Ich freue mich das du das Skripten entdeckst
Ich hoffe du nimmst mir das nicht böse, du kennst mich ja schon und weißt, dass ich dir und den Leuten die das hier lesen nur helfen will.
- KHtargetsall = (getMarkerPos "KHmark") nearObjects ["TargetBootcampHumanSimple_F", 100];
- KHtargetsallPos = KHtargetsall apply {[getPosATL _x, getDir _x]};
- {
- deletevehicle _x;
- nil
- } count KHtargetsall;
Hier ein paar Verbessrungen für deinen Code:
nearObjects statt nearestObjects: das Ergebnis ist nicht sortiert und daher ist der Befehl etwas schneller
count statt forEach: forEach nur benutzen wenn du auch den _forEachIndex brauchst, denn dieser wird bei forEach immer mitgezählt und macht daher forEach langsamer als count (wenn du mit count nichts zählen möchtest immer nil im code-block zurückgeben)
apply statt pushBack: wenn du für jedes Element eines Arrays einen neuen Wert berechnen und in ein neues Array legen möchtest ist apply genau dafür gemacht
- params ["_anzahl"];
- private _count = count KHtargetsallPos;
- private _copy = +KHtargetsallPos;
- KHtargetsspawn = [];
- for "_i" from 0 to _anzahl do {
- (_copy deleteAt (floor random _count)) params ["_pos", "_dir"];
- _count = _count - 1;
- private _veh = createVehicle ["TargetBootcampHumanSimple_F", _pos, [], 0, "CAN_COLLIDE"];
- _veh setDir _dir;
- _veh addEventhandler ["Hit", {
- (_this select 0) animate ["terc", 1];
- }];
- KHtargetsspawn pushback _veh;
- };
Alles anzeigen
private vor den Variablen: die variablen existieren dann nur im aktuellen Scope (innerhalb der geschweiften Klammern oder der Datei falls keine Klammern da sein) und verhindert dadurch Überschneidungen mit anderen Skripten
params statt select: wenn du einzelne Werte eines Arrays in getrennte Variablen schreiben willst ist das genau der richtige Befehl
createVehicle array statt createVehicle mit setPos: mit der akternativen syntax kannst du hier CAN_COLLIDE angeben und dadurch die exakte Position gleich mit (ein extra setPos entfällt dann)
Die Idee mit BIS_fnc_arrayShuffle ist zwar nicht schlecht, erfordert aber ein Durchlaufen des gesamten Arrays.
Mit einem zufällig sortierten Arrays lässt sich jedoch die array select [start, count] Syntax nutzen, die dann mehrfaches Selektieren aus dem Array (in der for-Schleife) überflüssig macht.
@stoffl:
Letztendlich würde ich dir empfehlen, wenn es möglich ist, die Ziele nur aus- bzw. einzublenden (hideObjectGlobal), denn Erstellen und Löschen von Objekten (besonders im Sichtfeld des Spielers) führt gerne mal zu "Framelags".
Dann sparst du dir eingangs das Löschen aller 200+ Objekte und musst nicht die Positionen und Ausrichtungen der Ziele zwischenspeichern.
Abschließend noch etwas das nicht zu Fehlern fürt aber mir persönlich wichtig ist:
Nutzt bitte 4 Leerzeichen anstatt Tabs zum Einrücken und achtet auf Groß- und Kleinschreibung bei den SQF-Befehlen