Construction Set Der Scriptthread

Äh... wie man das Construction Set bedient, weißt du aber schon? :-D

Grid = Raster

Erleichtert das genaue Positionieren von Objekten ungemein.

Einstellen über File\Preferencies -> Grid Snap

setz das mal auf 1 und mach einen Haken bei "Use Grid" rein.

Ab dann werden deine Objekte schön sauber am Raster ausgerichtet, die ganzen Dezimalstellen bei den X, Y, Z - Koordinaten entfallen dann, da Null.

Angle Snap macht das gleiche für die Rotation der Objekte.

...und ANGLE im PositionCell gibt die Blickrichtung des Spielers an, in die er nach dem Teleport sieht. Das solltest du schon machen, sonst schaut der am Ende nach dem Teleport noch gegen eine Wand, was ja bissl doof wäre.
 
Naja, achte mal drauf, wenn du ein Objekt nach dem Einschalten im Editor verschiebst. Dann landet es nicht mehr auf "krummen" Koordinaten, sondern auf geraden. Ich schrieb doch "ab dann", also bleibt alles, was vorher Position bezogen hat da, wo es war. Aber alles neue wird sauber ausgerichtet. Probier es einfach aus.
 
Hi leute,
Ich mach grade meine erste Mod, (ne Insel mit Quests un so) und bin schon recht weit. Insel schon fast fertig, Quest eigentlich auch. Ich habe gestern Musik in den Interriorgebieten eingefügt, und das klappt auch. Nur 1 Problem:
Kann ich in nem Interriorgebiet irgendwie die Kampfmusik überspringen, sodass dann nur noch die "normale" Musik läuft. Oder kann ich die Kampfmusik zu meiner eigenen Musik ändern, und nur die Kampfmusik spielen lassen?:huh:

gengaluf
 
Wenn ich mal dazwischen fragen darf:
Ist es möglich durch einen Script abfragen zu lassen, ob der Spieler einen anderen Gegenstand genommen hat als der, auf dem das Script liegt? (Das heißt, sobald der Spieler den Gegenstand nimmt, passiert etwas mit dem, auf dem der Script liegt.)

Ich würde am ehesten denken, dass dafür AddItem oder etwas ähnliches zu gebrauchen wäre. Wobei AddItem ja dafür da ist, etwas in das Inventar des Spielers zu bringen und nicht dafür, zu sehen ob der Spieler einen Gegenstand in das Inventar aufnimmt.
 
Wenn ich mal dazwischen fragen darf:
Ist es möglich durch einen Script abfragen zu lassen, ob der Spieler einen anderen Gegenstand genommen hat als der, auf dem das Script liegt? (Das heißt, sobald der Spieler den Gegenstand nimmt, passiert etwas mit dem, auf dem der Script liegt.)

Ja, kommt ein wenig darauf an, was für ein Gegenstand das ist. wenn er einmalig ist (nicht zwingend reference persistent), kannst zum Beispiel Folgendes machen:

Code:
begin my_script

if ( Player->GetItemCount "my_item" > 0 )
  ;Spieler hat Gegenstand aufgenommen
endif

end
 
  • Like
Reaktionen: 1 Person
Ja, er ist einmalig.
Das heißt, da müsste ich jetzt in der Mitte einfügen, was der andere Gegenstand machen soll, und dann klappt es?

Edit: Ja, anscheinend schon. Klappt zumindest. Danke für das Script!

Und noch ein Frage zu einem anderen Script:
Der Script soll bewirken, dass wenn ich einen Schalter aktiviere ein anderes Objekt die Position wechselt. Ich habe mir dazu einrn Befehl rausgesucht, von dem ich denke, dass er richtig ist, und versucht ein Script zu schreiben. Aber irgendwie kriege ich das mit den if/endifs und else(s) nicht hin. Dazu findet der Script Editor den Befehl nicht.
Code:
[B][SIZE=2]begin kl_hag_switch02_floor1_script[/SIZE][/B]
 
[B][SIZE=2]if ( OnActivate == 1 )[/SIZE][/B]
[B][SIZE=2]  "in_hag_grille_floor1"->ModPos, Z, 15494.221[/SIZE][/B]
[B][SIZE=2]elseif[/SIZE][/B]
[B][SIZE=2]  "in_hag_grille_floor1"->ModPos, Z, 15277.569[/SIZE][/B]
[B][SIZE=2]endif[/SIZE][/B]
 
[B][SIZE=2]end[/SIZE][/B]
Muss da noch irgendwo etwas anderes rein?
 
Zuletzt bearbeitet von einem Moderator:
@Kallor
Wenn du elseif benutzen willst, musst du auch eine Bedingung angeben, ansonsten an der Stelle wo das elseif ist einfach else verwenden. Damit ist das Skript aber immer noch nicht fertig - aktuell verschiebst du beim Aktivieren das Objekt um 15494.221 Einheiten in Z-Richtung, wenn du es nicht aktivierst bewegt es sich um 15277.569 Einheiten in Z-Richtung. Da diese zweite Bedingung dann so gut wie immer wahr ist, bewegt sich dein Gegenstand ohne dein zutun jeden Frame weiter weg - ist dementsprechend wahrscheinlich nicht ganz das was du willst. Beschreib mal näher, was genau du beim Schalterdruck beabsichtigst (also bewegt sich das nur einmal oder jedes mal ein Stück weiter oder beim zweiten aktivieren wieder zurück?).
 
Der Schalter soll bewirken, dass sich das andere Objekt auf eine andere Position bewegt und beim zweiten Schalterdruck wieder zurück. Wenn man es noch mal macht wieder hoch, ein viertes Mal wieder zurück. (Also Torhaus Prinzip)

Mir fällt grad auf, müsste ich irgendetwas zurücksetzen, damit dass beliebig oft wiederholbar ist? (eine Variable wie state?)

Edit: Und noch etwas:
Code:
[SIZE=2]begin kl_hag_pearlwarning_script[/SIZE]
 
[SIZE=2][COLOR=red]short state[/COLOR][/SIZE]
 
[SIZE=2][COLOR=red]if ( state = 0 )[/COLOR][/SIZE]
[SIZE=2] if ( OnActivate == 1 )[/SIZE]
[SIZE=2]    [COLOR=red]set state to 1[/COLOR][/SIZE]
[SIZE=2]    MessageBox, "Seid ihr euch sicher, dass ihr die Perle aus ihrer Halterung entfernen wollt?", "Ja", "Nein"[/SIZE]
[SIZE=2] endif[/SIZE]
[SIZE=2][COLOR=red]endif[/COLOR][/SIZE]
 
[SIZE=2]end[/SIZE]
Was ich wollte ist glaube ich klar. Das Problem ist bloß, dass ich das Objekt (ein aufnehmbares Licht) nicht mehr aufnehmen konnte. Mit state habe ich es danach probiert (das rote), aber es kam raus, was ich erwartet habe - das Objekt war immer noch nicht aufnehmbar.
Ist es möglich das zu regeln, ohne das Objekt zu disabeln und selbiges dann per AddItem ins Inventar zu geben?
 
Zuletzt bearbeitet von einem Moderator:
also so ungefähr?:
Code:
begin kl_hag_switch02_floor1_script

short oben
 
if ( OnActivate == 1 )
  if ( oben == 1 )
    "in_hag_grille_floor1"->ModPos, Z, -1000
    set oben to 0
  else
    "in_hag_grille_floor1"->ModPos, Z, 1000
    set oben to 1
  endif
endif

end
Skript ist nicht getestet, also probier mal noch etwas rum ... die Entfernungsdaten musst du auch noch an deine Bedürfnisse anpassen
 
  • Like
Reaktionen: 1 Person
Noch eine Frage dazu:
Würde das Script jetzt nicht nur aktiv werden, wenn das Objekt bereits oben ist? Oder versteh ich da jetzt was mit der Variable falsch?
Muss das Oben nicht erst auf eins gesetzt werden?

Ach und ich habe meinen vorigen Post noch einmal editiert, weil noch eine andere Frage aufgekommen ist. Nur falls es nicht mitgekriegt wurde.:)
 
Edit: Und noch etwas:
Code:
[SIZE=2]begin kl_hag_pearlwarning_script[/SIZE]
 
[SIZE=2][COLOR=red]short state[/COLOR][/SIZE]
 
[SIZE=2][COLOR=red]if ( state = 0 )[/COLOR][/SIZE]
[SIZE=2] if ( OnActivate == 1 )[/SIZE]
[SIZE=2]    [COLOR=red]set state to 1[/COLOR][/SIZE]
[SIZE=2]    MessageBox, "Seid ihr euch sicher, dass ihr die Perle aus ihrer Halterung entfernen wollt?", "Ja", "Nein"[/SIZE]
[SIZE=2] endif[/SIZE]
[SIZE=2][COLOR=red]endif[/COLOR][/SIZE]
 
[SIZE=2]end[/SIZE]
Was ich wollte ist glaube ich klar. Das Problem ist bloß, dass ich das Objekt (ein aufnehmbares Licht) nicht mehr aufnehmen konnte. Mit state habe ich es danach probiert (das rote), aber es kam raus, was ich erwartet habe - das Objekt war immer noch nicht aufnehmbar.
Ist es möglich das zu regeln, ohne das Objekt zu disabeln und selbiges dann per AddItem ins Inventar zu geben?

Meinst du das da? Soll das Script auf dem Gegenstand den du aufnimmst sein? Wenn ja, ist dir doch bewusst das der Gegenstand durch das Script nicht mehr aktivierbar/aufnehmbar ist. Deshalb reicht dein Script noch
nicht...

Code:
begin kl_hag_pearlwarning_script
 
short state
short button
 
if ( state = 0 )
 if ( OnActivate == 1 )
    set state to 1
    MessageBox, "Seid ihr euch sicher, dass ihr die Perle aus ihrer Halterung entfernen wollt?", "Ja", "Nein"
 else
     set button to GetButtonPressed
     if ( button == 0 )
     Activate
     elseif ( button == 1 )
     set state to 0
  endif
endif
 
end

Hab mich mal dran versucht,musst aber testen bin noch Anfänger...
 
Zuletzt bearbeitet:
Die Frage war jetzt, ob es möglich ist, bei ja, den Gegenstand aufzunehmen ohne disable und AddItem.
Bei nein passiert natürlich nichts.

Edit: Oh, sorry. Ich bin ein Hornochse.:headwall: Das habe ich ja gar nicht geschrieben.
Edit2: Ich bin ein noch viel größerer Hornochse. Ich habe vergessen bei ja überhaupt eine weitere Möglichkeit anzugeben.
 
Zuletzt bearbeitet von einem Moderator:
Hier nochmal meine Version,falls du es übersehen hast.

Code:
begin kl_hag_pearlwarning_script
 
short state
short button
 
if ( state = 0 )
 if ( OnActivate == 1 )
    set state to 1
    MessageBox, "Seid ihr euch sicher, dass ihr die Perle aus ihrer Halterung entfernen wollt?", "Ja", "Nein"
 else
     set button to GetButtonPressed
     if ( button == 0 )
     Activate
     elseif ( button == 1 )
     set state to 0
  endif
endif
 
end
 
  • Like
Reaktionen: 1 Person
Noch eine Frage dazu:
Würde das Script jetzt nicht nur aktiv werden, wenn das Objekt bereits oben ist? Oder versteh ich da jetzt was mit der Variable falsch?
Muss das Oben nicht erst auf eins gesetzt werden?

Tommys Script funktioniert nur, wenn sich der Gegenstand am Anfang unten befindet.

Code:
begin kl_hag_pearlwarning_script
 
short state
short button
 
if ( state = 0 )
 if ( OnActivate == 1 )
    set state to 1
    MessageBox, "Seid ihr euch sicher, dass ihr die Perle aus ihrer Halterung entfernen wollt?", "Ja", "Nein"
 else
     set button to GetButtonPressed
     if ( button == 0 )
     Activate
     elseif ( button == 1 )
     set state to 0
  endif
endif
 
end

Prinzipiell schon mal nicht schlecht, funktioniert aber nicht.

Zwischen der MessageBox und dem else fehlt ein endif. Und im Falle von button == 0, musst du den state auch wieder auf 0 setzen. Sonst kannst du den Gegenstand zwar einmal aufnehmen, wenn du ihn in Zukunft aber irgendwann einmal wieder ablegst, kannst du ihn nicht einmal mehr aktivieren.
 
hallo ich würde gerne per script einer Creatur einen HitTriggerShadder geben und zwar soll der immer dann ausgelöst werden wen die Creatur einen schritt macht. vieleicht ist es ja noch anderster realisierbar aber ich weiß nicht wie. würd mich um hilfe freuen

MFG Raist
 
Mein CS behauptet hartnäckig, dass es "ModPos" in der einen Zeile nicht findet. Ich habe ihn aus dieser Liste von Killfetzer.

Dazu meint es noch "miss matched if/elseif/else" (Ich würde es so übersetzen, dass irgendetwas nicht mit den ifs/else stimmt.)
(Ich habe den Aufbau wie Tommy, aber keine Ahnung, was ich daran ändern sollte.)
 
Zuletzt bearbeitet von einem Moderator:
kann durchaus sein, dass es ModPos nicht gibt (deshalb ja der Hinweis, dass du noch rumprobieren sollst) ... in diesem Fall musst du halt stattdessen GetPos und SetPos kombinieren ... also ungefähr so:
Code:
begin kl_hag_switch02_floor1_script

short oben
 
if ( OnActivate == 1 )
  if ( oben == 1 )
    "in_hag_grille_floor1"->SetPos, Z, "in_hag_grille_floor1"->GetPos, Z - 1000
    set oben to 0
  else
    "in_hag_grille_floor1"->SetPos, Z, "in_hag_grille_floor1"->GetPos, Z + 1000
    set oben to 1
  endif
endif

end