Construction Set Zeitbegrenzung

[XXL]Jack

Abenteurer
Hallo,
wie kann man Zeitbegrenzungen in Spells einfügen? Also so. dass man ein Spell machen kann durch den jemand z.B. seinen Helm verliert aber ihn dann nach 2 min wieder bekommt?
 
Code:
Begin ScriptEffectStart 
player.removeitem xxx 1 
set timer to (timer + getsecondspassed )
END

Begin ScriptEffectUpdate 
if timer >= 2
player.additem xxx 1
player.equipitem xxx 1
endif
End

Versuchs mal damt :)
 
Hmmm dann muss ich aber wissen was er für en Helm anhat... kann man auch alles entfernen mit removeallitems oda so?
 
sollte gehen müsste dann so lauten (wenns auf einen gegner gezaubert wird)

Code:
ref target
float timer

Begin ScriptEffectStart 
set target to getcombattarget
target.removeallitems TruheRef 
set timer to (timer + getsecondspassed )
END

Begin ScriptEffectUpdate 
   if timer >= 120 (wenns 2min sein sollen)
   TruheRef.reomveallitems target
   set timer to 0 (muss noch eventuell hinzugefügt werden)
   endif
End
TruheRef bekommst du indem du die truhe in die welt platzierst, sie doppelklickst und eine editor-ID eingibst (hier also TruheRef)

wenn es auf sich selbst sein soll musst du target durch player ersetzen und "ref target" kannst du entfernen
 
Zuletzt bearbeitet:
Das Skript-Beispiel wird so gleich aus 2 Gründen nicht funktionieren. Zum einen wird der Timer nicht hochgezählt, da der Befehl hierzu im ScriptEffectStart-Block steht. Dieser Block wird aber nur ein einziges Mal am Anfang des Zaubers ausgeführt. Desweiteren liefert GetCombatTarget die Referenz desjenigen NPCs, den das Ziel des Zaubers gerade bekämpft, was so glaube ich nicht gedacht war. Folgendermaßen sollte es gehen:

Code:
ref me
float timer
short Fertig

Begin ScriptEffectStart 
   set me to GetSelf
   me.removeallitems TruheRef 
   set timer to 120
END

Begin ScriptEffectUpdate 
   set Timer to Timer - GetSecondsPassed
   if timer < 0 && Fertig == 0
      set Fertig to 1
      TruheRef.RemoveAllItems me
   endif
End

Das Timer-Gedöns könnte man sich hier aber auch ganz schenken, wenn man dem Zauber von Hause aus eine Wirkungsdauer von 120 Sekunden verpasst. Dann bräuchte man nur noch zu schreiben:

Code:
ref me
begin ScriptEffectStart 
   set me to GetSelf
   me.RemoveAllItems TruheRef 
end

begin ScriptEffectFinish
   TruheRef.RemoveAllItems me
end

Aber aufpassen! Wird dieser Zauber kurz nacheinander auf zwei NPCs abgeschossen, wird die Truhe mit der Ausrüstung des zweiten NPC gefüllt. Endet der Zauber beim ersten NPC, wird dieser also die Klamotten des zweiten NPCs erhalten. Danach ist in der Truhe nix mehr drin, so dass der zweite NPC seine Ausrüstung nie zurück bekommt. Hmm, könnte vielleicht ein ganz lustiger Spaß-Zauber werden. :)
 
Gut hab schon gedacht ich wär zu dumm ein Script einzufügen ^^
Kann man das Problem auch beheben so dass man es auch zu einem Massen zauber umformen kann? So, dass alle in einem bestimmten Gebiet getroffen werden...aber trotzdem ihr Sachen zurückbekommen?
 
Wäre aufwändig. Man müsste dazu erstmal eine Menge Kisten hinstellen. Diese müssten dann im Skript des Zaubereffektes dynamisch zugewiesen werden. Das Skript müsste in jeder laufenden Instanz prüfen, welche der vorhanden Kisten bereits belegt sind und die nächste freie auswählen. Dort hinein würden dann die Sachen des jeweiligen NPCs verbracht und diese Kiste als belegt gekennzeichnet. Die Variablen in denen der Belegungszustand der Kisten gespeichert werden, müssten global sein, damit sie von jedem der laufenden Effekt-Skripte abgefragt werden können. Und irgendwo muss die Anzahl der Kisten ja sinnvoll begrenzt werden. Alle NPC in einem Gebiet wird man also nicht erwischen, es sei denn, der Radius des Zauber wäre relativ klein.