HX3 Foren

HX3 Foren (https://hx3.de/)
-   Editing & Scripting (https://hx3.de/editing-scripting-187/)
-   -   Wie kann man Einheiten im Triggerradius löschen? (https://hx3.de/editing-scripting-187/man-einheiten-triggerradius-loeschen-25430/)

niels001 28.06.2016 08:43

Wie kann man Einheiten im Triggerradius löschen?
 
Hallo,
ich spawne in einer Stadt per Trigger einige Einheiten und würde gerne die übrig gebliebene AI löschen sobald der Spieler den Trigger verlässt.
Ich habe folgenden Code gefunden:
Code:

{if (side _x == EAST AND _x in thisList) then {_x setDamage 1};} foreach allunits;
Für mich sieht der Code richtig aus und ich finde da auch keinen Fehler aber wenn ich ihn in den Trigger packe funktioniert er nicht. Er lässt sich zwar ausführen aber die Einheiten werden nicht gelöscht.

Ich hab den setDamage Befehl auch schon gegen {deleteVehicle _x} getauscht aber auch da klappt es nicht.

Könnt ihr mir sagen was daran falsch ist?

Sarogahtyp 28.06.2016 09:10

wenn du löschen willst dann solltest du dies auch tun und nicht einfach nur töten.

Code:

{if (side _x == east AND _x in thisList) then {deleteVehicle _x;}; true} count allUnits;
aber allUnits ist vermutlich garnicht notwendig.

Code:

{if (side _x == east) then {deleteVehicle _x;}; true} count thisList;

Drunken Officer 28.06.2016 10:55

Ich würde auch die 2 Variante vorschlagen. Warum alle Einheiten zählen lassen, wenn man eh nur die Einheiten aus dem Trigger braucht.

Sarogahtyp, wieso hast ein "true" in deine Count Abfrage gepackt?

niels001 28.06.2016 11:03

Danke für die Antworten bisher.

Ich habe beide Varianten versucht und bekomme die Fehlermeldung:
Bei Aktivierung:Typ Zahl, erwartet nichts.

Sarogahtyp 28.06.2016 11:21

mach mal:
Code:

nix = {if (side _x == east) then {deleteVehicle _x;}; true} count thisList; nix = nil;
das true ist ne Angewohnheit weil count mit der {code}count xxx; syntax eigtl. einen rückgabewert erwartet. Ich meine ich hätt so auch schon mal Fehlermeldungen im .rpt beseitigt.

niels001 28.06.2016 11:26

Eine Fehlermeldung gibt es nun keine mehr aber die AI wird noch immer nicht gelöscht.

Sarogahtyp 28.06.2016 11:30

Zitat:

Zitat von niels001 (Beitrag 495161)
Danke für die Antworten bisher.

Ich habe beide Varianten versucht und bekomme die Fehlermeldung:
Bei Aktivierung:Typ Zahl, erwartet nichts.

Nunja, irgendwie stimmt da auch was nicht, die sollten doch bei Deaktivierung gelöscht werden, also wenn der Spieler den Trigger verlässt?

Gib mal den Code aus allen Feldern Deines Triggers!

niels001 28.06.2016 11:53

Zum testen habe ich einen East Soldaten in einen Trigger gestellt, hab den Code bei Aktivieren eingetragen und habe auf Funk Alpha gestellt zum auslösen.
Sonst steht nichts weiter im Trigger.

Sarogahtyp 28.06.2016 12:00

dann müssen wir mal ans debuggen gehen:

Code:

nix = {if (side _x == east) then {deleteVehicle _x;}; true} count thisList; systemChat str nix;
sag mal ob und was er dann in den chat schreibt...

niels001 28.06.2016 12:03

im Chat steht 0

Sarogahtyp 28.06.2016 12:07

das bedeutet das die thisList leer ist, count zählt jedes Element darin und schiebt es in nix rein.

Der Trigger aktiviert zwar, aber es gibt kein Objekt im Triggerradius was die Bedingung erfüllt...

Was steht im Feld Bedingung bzw. Condition ???

niels001 28.06.2016 12:08

ich habe doch aber EAST Soldaten im Trigger stehen, die werden doch mit side _x == east abgefragt oder nicht?

Sarogahtyp 28.06.2016 12:15

Zitat:

Zitat von niels001 (Beitrag 495173)
ich habe doch aber EAST Soldaten im Trigger stehen, die werden doch mit side _x == east abgefragt oder nicht?

Nö...


der Trigger guckt ins Bedingungsfeld und schiebt alle Objekte die die BEdingung erfüllen in die thisList.

ich denke da muß true drin stehn damit es funktioniert.

Sarogahtyp 28.06.2016 12:23

Ich sehe da auch noch ein Problem, alle toten Einheiten werden nicht gelöscht weil Sie nicht mehr bei side east sonder civilian sind...

kannst du die nicht beim spawnen alle in ein globales array speichern? Dann wäre das löschen einfacher...

niels001 28.06.2016 12:26

Nein, auch dann klappt es leider nicht.

Zitat:

kannst du die nicht beim spawnen alle in ein globales array speichern? Dann wäre das löschen einfacher...
Gebe ich das Globale array dann einfach so wie ein normal array ein zum löschen oder muss ich da auf eine bestimmte schreibweise achten?

Sarogahtyp 28.06.2016 12:43

Was mit Deinem Trigger schief läuft weiß iuch jetzt auch nicht, eventuell ist der Radius 0?

Zeig mal wie du spawnst dann sag ich dir wie das mit dem array am besten geht.

Ich mach jetzt erstmal Mittagspause, melde mich also ne halbe stunde lang nicht...

niels001 28.06.2016 13:37

ich poste das heute abend fix. Hatte heute eigentlich frei darf aber nun doch arbeiten :daumen:

Sarogahtyp 28.06.2016 13:50

okay, ich kann dann vermutlich erst morgen wieder antworten...

Sarogahtyp 28.06.2016 18:18

so funktioniert es, ist aber nicht schön, weil allUnits benutzt wird. das kann unter umständen langsam sein.
Code:

nix = {deleteVehicle _x; true}count (allUnits select {(side _x == east) and (_x inArea thisTrigger)})
tote einheiten werden mit dieser methode auch nicht gelöscht, da sie side civilian sind.


besser ist es wenn du alle gespawnten einheiten in einem array hast dann werden auch tote gelöscht und das geht dann so:
Code:

nix = {if(!isNull _x) then {deleteVehicle _x;}; true}count yourglobalarray
Das mit der thisList hat nichgt funktioniert weil nur die objekte darin enthalten sind die den trigger aktiviert haben (glaube ich). in diesem fall nur du weil du gefunkt hast.


dein array baust du in etwa so (variiert je nachdem wie du spawnst):

Code:

yourglobalarry = [];  //leeres array erzeugen
_jeep = "Jeep" createVehicle position player;  // jeep spawnen und in _jeep speichern

yourglobalarry pushBack _jeep;  // _jeep als letztes element vom array speichern

jetzt ist in yourglobalarray der gespawnte jeep drin. geht naturlich auch ohne lokale _jeep variable:

Code:

yourglobalarry = [];
yourglobalarry pushBack ("Jeep" createVehicle position player);


Sarogahtyp 28.06.2016 19:22

Und so gehts richtig
 
Und so gehts richtig:

Trigger


Typ: keine
Aktivierung: Jeder

Bedingung:
Code:

this &&  {(isPlayer _x) and (alive _x)}count thisList > 0
Bei Aktivierung:
Code:

yourglobalarray = [];
nix = yourglobalarray pushBack ("O_G_Soldier_F" createVehicle position thisTrigger);
nix = yourglobalarray pushBack ("O_G_Soldier_F" createVehicle position thisTrigger)

Bei Deaktivierung:
Code:

nix = {if(!isNull _x) then {deleteVehicle _x;};true} count yourglobalarray;
yourglobalarray=nil

wenn du in den trigger rein rennst dann spawnen 2 opfor, wenn du ihn verlässt werden sie gelöscht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:31 Uhr.

Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias


SEO by vBSEO 3.2.0 ©2008, Crawlability, Inc.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119