Construction Set Skriptthread zum Construction Set

Das einfachste dürfte hier sein, den Krug sobald er den Boden berührt durch eine zerbrochene zu ersetzten. Problem ist nämlich, dass alle Befehle um ein Mesh auszutauschen auf alle Referenzen des Objekts zutrifft.
Ich würde folgendes ausprobieren:

Code:
scn VaseScript

short Start
float OldHeight
float StartHeight

Begin OnActivate
End

Begin Gamemode
 if ( GetContainer == [Referenz eines Trash-Containers] )
  RemoveMe
 elseif ( Start )
  if ( OldHeight <= GetPos z )
   if ( OldHeight <= ( StartHeight + [Höhe, ab der die Vase kaputt gehen soll in Units]
    PlaceAtMe [Kaputte Vase], 1, 0, 0
    Activate [Referenz eines Trash-Containers]
   else
    set Start to 0
   endif
  else
   set OldHeight to GetPos z
  endif
 elseif ( StartHeight != GetPos z )
  set Start to 1
  set StartHeight to GetPos z
  set OldHeight to GetPos z
 endif
End
Wichtig dabei ist, dass die ganze Version der Vase kein Static ist, sondern theoretisch in's Inventar genommen werden kann (wird praktisch durch das Script verhindert (OnActivate-Block)).
Bei der kaputten Vase ist das egal, je nachdem was du willst.
Vielen Dank schonmal! Ich verstehe bloß ein paar Sachen nicht:
Was ist ein Trahscontainer ^^? Ist das die Vase?
Was genau macht das Skript jetzt? Muss an der Stelle, an der die Vase zu Boden geht jetzt nicht die kaputte, disablete Referenz der kaputten Vase sein? Oder muss ich die kaputte nirgends hinlegen?
 
Ein Trash-Container ist einfach ein Container (Persistent Reference), den du irgendwo plazierst und in den die ganze Vase nachdem sie nicht mehr gebraucht wird abgelegt (und anschließend aus dem Spiel entfernt) wird.
Am besten platzierst du den irgendwo wo der Spieler nichts davon mitkriegt. ;)


Das Script bewirkt folgendes: sobald die Vase eine gewisse Höhe fällt wird am Ort der Originalvase eine kaputte Vase erzeugt und die Originalvase in den Trash-Container transveriert (und entfernt).
 
  • Like
Reaktionen: elveon
Kann man das nicht auf alle Items dieser Art übertragen? Per disable könnte das doch klappen oder nicht? Sie fällt, wird disabled und dann wird die Mesh geplacet...

EDI: Bzw, wie ist das mit den Scherben, können die Static sein?
 
Zuletzt bearbeitet:
Das Script funktioniert für alle Referenzen der Objekte auf denen das Script liegt.

Mesh austauschen geht nicht, da dann z.B. wenn man 2 Vasen hat und eine runterfällt auch die zweite (die sich nicht bewegt hat) zu Scherben zerfällt.



Ja, die Scherben können auch Static sein, zumindest, wenn man Statics bei PlaceAtMe verwenden kann.
 
  • Like
Reaktionen: elveon
Es tauscht nicht aus? Wo muss ich denn die kaputte Vasenmesh hintun?

EDIT: es sähe jetzt so aus

Code:
scn NEPVaseScript

short Start
float OldHeight
float StartHeight

Begin OnActivate
End

Begin Gamemode
 if ( GetContainer == [TESTVASE] )
  RemoveMe
 elseif ( Start )
  if ( OldHeight <= GetPos z )
  [COLOR="Red"] if ( OldHeight <= ( StartHeight + [Höhe, ab der die Vase kaputt gehen soll in[/COLOR] Units]
    PlaceAtMe [Scherben1], 1, 0, 0
    Activate [TESTVASE]
   else
    set Start to 0
   endif
  else
   set OldHeight to GetPos z
  endif
 elseif ( StartHeight != GetPos z )
  set Start to 1
  set StartHeight to GetPos z
  set OldHeight to GetPos z
 endif
End

er sagt in der rot markierten zeile seien "mismatched parentheses, was heißt das?
 
Zuletzt bearbeitet:
Es tauscht nicht aus? Wo muss ich denn die kaputte Vasenmesh hintun?
Er tauscht nicht das Mesh bei dem Objekt aus, sondern ersetzt das Objekt gleich gegen ein kaputte.

er sagt in der rot markierten zeile seien "mismatched parentheses, was heißt das?
Klammern passen nicht. ;)
Allerdings solltest du die eckigen Klammern [] auch noch entfernen, zumindest wenn die nicht Teil der ID sind.
Code:
scn NEPVaseScript

short Start
float OldHeight
float StartHeight

Begin OnActivate
End

Begin Gamemode
 if ( GetContainer == [TESTVASE] )       ;Entfernen, falls sich die Vase im Trashcontainer befindet
  RemoveMe
 elseif ( Start )
  if ( OldHeight <= GetPos z )         ;überprüfen eines Aufschlages
   if ( OldHeight <= ( StartHeight + [Höhe, ab der die Vase kaputt gehen soll in Units] ) )
    PlaceAtMe [Scherben1], 1, 0, 0            ;erzeugen des kaputten Meshes
    Activate [TESTVASE]           ;transverieren in den Trashcontainer
   else
    set Start to 0
   endif
  else
   set OldHeight to GetPos z
  endif
 elseif ( StartHeight != GetPos z )      ;festlegen der Starthöhe
  set Start to 1
  set StartHeight to GetPos z
  set OldHeight to GetPos z
 endif
End
Der Fehler mit den Klammern wurde gefixt und ich hab ein paar Kommentare hinzugefügt.
 
  • Like
Reaktionen: elveon
hoi ich würde gerne eine tür per Trigger schließen.

ha aber keinen plan was ich d machen soll kenn net soviele script befehler kan mir jemand helfen ?

Mfg Raist
 
Willst du die Tür abschließen oder eine animierte Tür schließen?

Für die animierte tür:

Code:
scn sonstwas

short once 

Begin OnTrigger Player
if once == 0
IdderTür.SetOpenState 0
set once to 1
endif
end

Wenn es keine einmalige Aktion ist, muss das once noch raus.

Wenn du sie abschließen willst, ersetze setopenstate 0 durch lock 100
 
Hast du auch alles richtig eingestellt? (Triggerbox plaziert? Der Tür ne Ref-ID geben? Haken bei Persistance Reference? Ref-ID im Script benutzt? Script auf die Triggerbox gelegt?)
 
jaja ich habs en par mal kontrolliert.
Die Tür ist da wo sie seine soll sie hat ne ref Id der hacken is auch drin der script is beim TRigger eingefügt der trigger ist eingefügt eigendlich muss es doch klappen hmmm die tür hat noch en script der schon drauf war :

scn ARGatePREOPEN01SCRIPT

; activated by linked child
; activates optionally linked parent after 1 sec delay

short init
short closed
short next
short busy
float timer

ref mySelf
ref myParent

begin onActivate

if isActionRef player == 1
if closed == 1
message "Dieses Tor wird per Fernsteuerung geöffnet."
endif
elseif isActionRef mySelf == 0 && busy == 0
if closed == 0
playgroup forward 0
set closed to 1
disableLinkedPathPoints
else
playgroup backward 0
set closed to 0
enableLinkedPathPoints
endif
set next to 1
set timer to 1
set busy to 1
endif

end

begin gameMode

if init == 0
; set up ref vars
set mySelf to getSelf
set myParent to getParentRef
set init to 1
endif

; daisy-chain activation
if next == 1 && timer <=0
set next to 0
myParent.activate mySelf 1
endif

if timer > 0
set timer to timer - getSecondsPassed
endif

if isAnimPlaying == 0 && busy == 1
set busy to 0
endif

end

begin onReset

reset3DState
enableLinkedPathPoints
set closed to 0
set busy to 0
set next to 0

end
 
Ach das ist der auf der Tür, sag das doch, ich würde ihn wegmachen, ich hab ihn mir jetzt nicht komplett angeschaut, aber es könnte sein, das er das Problem verursacht. Ich würd einfach nur den Script auf dem Trigger benutzen.
 
Ich würde dir empfehlen, die Tür einmal mit ner neuen ID zu versehen (als "create new form"). Wenn du jetzt das Script weggenommen hast, ist es nämlich auch bei der Tür weg, die irgendwo in einer Ayleidenruine steht.
 
nene die hat schon ne neue id die alte tür is immer noch so wie voher hab die id schon am anfang geändert, aber das bringt mich jetzt au net weiter :/