Wie kann ich alle Objekte von "TEST" gleichzeitig auswählen und dann brennen lassen ?
Hiermit kann ich immer nur 1 und dasselbe Objekte aswählen und anzünden... :
SetVar(0,FindObject(TEST,0,0,0,0,0,));
if (And(Not(Equal(Var(0),0)),Equal(Contained(Var(0),0)))) Incinerate(Var(0));
Wie müsste das aussehen damit alle objekte ausgewählt werden und angezündet werden ?
Danke !
Bitte benutze nicht mehr Var
, SetVar
und Konsorten. Und And, Or, Not, Equal
auch nicht mehr. Das führt nur zu total unleserlichem Code.
Alle TEST-Objekte anzünden geht zB so:
for (var obj in FindObjects(Find_ID(TEST)))
obj->Incinerate();
Ok vielen Dank !
Wie wäre es wenn ich nicht alle, sondern nur z.B die nächsten 2 Objekte von "TEST" anzünden möchte ?
Geht das ?
var num = 2;
for(var object in FindObjects(Find_ID(TEST), Sort_Distance())) if (num--) object->Incinerate(); else break;
Die saubere Variante für Szenario/Objektscripts ist:
for(var object in FindObjects(Find_ID(TEST))) {
Incinerate(object);
}
Falls du das aber zum Spaß mal Ingame machen willst, eignet sich Schedule ganz gut, da das quasi-instant passiert:
Schedule("Incinerate(FindObject2(Find_ID(TEST), Find_Not(Find_OCF(OCF_OnFire))))", 1, 1000)
By Medy
Date 22.12.2014 23:05
Edited 22.12.2014 23:09
Und falls ich Incinerate 2 mal ausführen möchte?
Falls ein Objekt brennt soll es nicht nochmal angezünden werden , statdessen das nächste Objekt des selben Typs finden was nicht brennt und das anzünden.
Ich hatte mich bei SetVar an einen Beispielobjekt orientiert ( "Fernbedienung EKE PACK", stimmt das ist wirklich schwer nachzuvollziehen .... :D
>Find_Not(Find_OCF(OCF_OnFire)))
Das macht genau das Statement hier. Aber wenn du das ingame machen willst, nimm am Besten die Lösung von Sven2 - die ist nochmal eleganter.
Falls du meintest, dass die Objekte erst nach und nach angezündet werden sollten: (.. geht B_E's Lösung natürlich auch, aber man kann auch in einem Objekt den Timer benutzen)
func Timer(){
var pSollBrennen = FindObject2(Find_ID(TEST),Find_Not(Find_OCF(OCF_OnFire)));
if(pSollBrennen) pSollBrennen->~Incinerate();
}
In der Defcore muss dann natürlich noch der Timer eingestellt werden: (Dazu zu dem Objekt, dass die Objekte anzünden soll, folgendes in die DefCore schreiben:)
Timer=1
TimerCall=Timer
--
Wenn jetzt noch Jemand die Lösung als Effekt aufschreibt, haben wir so ziemlich alle kuhlen Lösungen gefunden. :D
Oder die kuerzere Hack-Variante: FindObjects(Find_ID(TEST), Find_Func("Incinerate"));