Alle Objekte/Lebewesen/Fahrzeuge auf der Map auflisten
3 verfasser
Autor
Nachricht
Tundanér Fregattenkapitän
Alter : 29 Ort : Rödental Anmeldedatum : 03.02.09
Thema: Alle Objekte/Lebewesen/Fahrzeuge auf der Map auflisten Do Aug 26, 2010 6:52 pm
Aaalso, ich versuch schon ewig ne Funktion zu basteln,mit der man alle Objekte auf der Karte in einem Menü aufgelistet bekommt und diese dann zerstören bzw. zu sich teleportieren kann aber iwie komm ich da nicht wirklich weiter... Muss man das mithilfe eines arrays machen oder wie sonst? Ich hab echt keine Ahnung
Extremclonk Staatsrat
Ort : Am Anti-Spam-Limes Anmeldedatum : 19.01.09
Thema: Re: Alle Objekte/Lebewesen/Fahrzeuge auf der Map auflisten Do Aug 26, 2010 7:22 pm
Ich bin mir nicht sicher ob es die beste Lösung ist, aber es ist immerhin eine.
FindObjects() gibt die gefundenen Objekte bekanntlich als Array aus. Nun muss man FindObjects nur noch dazu bringen alle Objekte in die Suche einzubeziehen. Am einfachsten nimmst man hier wohl Find_InRect(0,0, LandscapeWidth(), LandscapeHeight()). So bekommt man eine Array in dem alle Objekte in der Landschaft drin sind. Wir erstellen einen Array "Objects" und dann:
Denke das funktioniert so. Zum Ordnen von Array hat B_E hier etwas geschrieben, ersten Kommentar. Und dann ein Menü erstellen. Allerdings hatte ich bei Menüs und Arrays immer das Problem das das Menü fehlerhaft wird sobald sich im Menükommando eine Variable befindet, da diese beim Aufruf des Eintrags nicht mehr zwangsläufig das ist was sie war als der Eintrag erstellt wurde. Aber vllt. weiß ja wer eine Lösung oder einen Ansatz der das Problem umgeht.
Tundanér Fregattenkapitän
Alter : 29 Ort : Rödental Anmeldedatum : 03.02.09
Thema: Re: Alle Objekte/Lebewesen/Fahrzeuge auf der Map auflisten Do Aug 26, 2010 7:42 pm
Mh okay und wie pack ich das dann in ein Menü
Limeox Admiral
Anmeldedatum : 25.04.10
Thema: Re: Alle Objekte/Lebewesen/Fahrzeuge auf der Map auflisten Do Aug 26, 2010 8:01 pm
Extremclonk: Das Find_InRect ist nicht nötig. Wenns nicht da ist, werden einfach alle gefunden. Blöderweise muss mindestens ein Parameter angegeben werden, aber da tuts auch einfach ein leeres Find_Not(). SetObjectOrder ist was ganz anderes, Arrays sortiert man mit den Sort_-Funktionen (zu finden in System.c4g/FindObject.c).
In ein Menü gepackt wird das Ganze zB so:
Code:
for (var obj in FindObjects(Find_Not())) AddMenuItem("%s zerstören", Format("Explode(10, Object(%d))", ObjectNumber(obj)), GetID(obj));
"%s zerstören" Name des Eintrags. Für %s wird der Name des 3. Parameters eingefügt, hier also die ID des gefundenen Objekts. Format("Explode(10, Object(%d))", ObjectNumber(obj)) Hässlich, aber tut: Die Objektnummer wird in das Kommando gequetscht und bei Ausführung in ein Objekt zurückverwandelt und explodiert dann.
for (&ref in array a) geht alle Objekte (bzw Integer oder Strings, was halt drin ist) im array "a" durch und speichert den jeweiligen Eintrag in "ref". Der kann dann im Block verwendet werden. Hier werden alle Objekte, die FindObjects zurückliefert, in "obj" gespeichert und dann ins Menü gepackt.
Edit: Find_Not() geht doch nicht. Du könntest aber zB Find_Category(~0) nehmen. Extremclonks Methode findet halt zB nicht Objekte außerhalb der Landschaft, auch wenn das eher selten stört.
Tundanér Fregattenkapitän
Alter : 29 Ort : Rödental Anmeldedatum : 03.02.09
Thema: Re: Alle Objekte/Lebewesen/Fahrzeuge auf der Map auflisten Do Aug 26, 2010 8:44 pm
Irgendwie gehts nich,entweder bin ich zu doof oder zu schlau