Not logged inClonkspot Forum
Forum Home Help Search Register Login
Up Topic Deutsch / Hilfestellung / Find "all" Objects
- - By Medy Date 22.12.2014 22:24
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 !
Parent - - By Zapper (More than 500 posts.) Date 22.12.2014 22:32
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();
Parent - - By Medy Date 22.12.2014 22:43
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 ?
Parent - By Sven2 (More than 500 posts.) Date 23.12.2014 00:14
var num = 2;
for(var object in FindObjects(Find_ID(TEST), Sort_Distance())) if (num--) object->Incinerate(); else break;
Parent - - By B_E (More than 200 posts.) Date 22.12.2014 22:36
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)
Parent - - 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
Parent - By B_E (More than 200 posts.) Date 23.12.2014 09:22

>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.
Parent - By Gecko (More than 500 posts.) Date 23.12.2014 21:01
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
Parent - By Sven2 (More than 500 posts.) Date 23.12.2014 00:16 Upvotes 2
Oder die kuerzere Hack-Variante: FindObjects(Find_ID(TEST), Find_Func("Incinerate"));
Up Topic Deutsch / Hilfestellung / Find "all" Objects

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill