PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SetDamage Problem


MagicStyle
01.09.2013, 14:43
Hi, ich bräuchte bitte Hilfe bei meinem kleinem Vorhaben.

Ziel :
Sani-Feldlazarett soll alle Einheiten vom Typ OPFOR heilen die sich in seiner Nähe befinden.

Um das zu erreichen habe ich einen Auslöser erstellt und über das Feldlazarett platziert und ihn wie folgt eingestellt.

Auslöseart: Mehrfach, OPFOR
Auslösebedinung:
this && (ceil time %2 != 0)

On Act:

for [{_i=1}, {_i<1000}, {_i=_i+1}] do
{
{_x setDammage (getDammage _x)-0.000025} forEach thislist;

};

Dieses Script steht übrigens in einer externen Scriptdatei, da ich den Auslöser per Script erstellt habe, die For-Schleife funktioniert also.
Jeder vom Typ OPFOR der diesen Auslöser betritt, soll alle paar Sekunden ein paar Damage Punkte abgezogen bekommen. So, wie es dort steht müsste es meiner Meinung nach von der Logik her funktionieren. Leider tut es das nicht, weshalb?

Danke im Vorraus für jede Hilfe!

Vienna
01.09.2013, 16:52
Du musst dem Auslöser einen Namen geben und statt thislist list AuslöserName verwenden.

Auslöseart: OPFOR | EINMAL
Bedingung: true

Bei Akt:

temp = 0 spawn
{
while {true} do
{
{if (getDammage _x > 0) then {_x setDammage((getDammage _x)-0.033)}} forEach list AuslöserName;
sleep 1
}
}

Je nach Verletzung wäre die maximale Heilzeit 30 Sekunden.

Lester
01.09.2013, 18:38
Ich meine mich erinnern zu können (in ArmA1 war es zumindest so) das sehr kleine Werteänderungen (zumindest im MP) nicht funktionierten.

z.B. würde da Treibstoff nicht draufaddiert.
Ich hab mich da dann beholfen und die Variable erst auf einen entfernten Wert und danach auf den richtigen gesetzt.
Möglicherweise liegt hierein ähnliches Problem vor.

MagicStyle
01.09.2013, 18:52
Ok, danke euch beiden :daumen: ich werde es gleich mal probieren.

PS: Weiss jemand zufällig wie man in rama 2 einem Auslöser per Script einen Namen vergeben kann?

Vienna
01.09.2013, 21:47
TriggerName = createTrigger ...

MagicStyle
01.09.2013, 22:10
thx !

Edit: Habe alles eben getestet, deine Lösung funktioniert leider auch nicht. ich schau mal nach ob ich nicht vielleicht einen Fehler gemacht habe :nixweiss:

Edit II: War mein Fehler, Ich habe festgestellt dass das Script nicht funktioniert wenn der Name des Auslösers lokal ist.

Edit III: Erstelle ich den Auslöser im Editor funktioniert es, erstelle ich ihn hingegen per Script, funktioniert es nicht ?! Woran könnte das liegen, ich verwende für beide den selben Code? Eine Fehlermeldung wird nicht ausgegeben.
Meine einzige Vermutung die jedoch vermutlich eher unwahrscheinlich ist, ist das man eben nicht den Namen vergibt indem man ihn vor createVehicle schreibt sondern auf eine andere weise. Ich such mich mal durch

Vienna
02.09.2013, 06:29
Zeig einmal den Code, wie du den Auslöser über Skript erstellst.

Lass dir anzeigen welche Rückgabe du aus list AuslöserName erhältst.

MagicStyle
02.09.2013, 10:47
Wie kann ich mir ausgeben lassen was list AuslöserName mir zurückgibt ? Etwa ganz normal mit hint oder gibt es da einen einfacheren Weg ?

Lester
02.09.2013, 11:18
Der "einfachste" Weg wäre wohl ein Funkauslöser der dann einen
hint str (list <auslösername>);
ausführt.
hint str([count list <auslösername>,list <auslösername>]);
hätte sogar den Vorteil das man vorneweg die Anzahl der betroffenen Einheiten sieht.

Etwas umständlicher wäre es wenn man in der init.sqf eine kleine while- do Schleife aufbaut die dann alle n-Sekunden das automatisch erledigt.


Generell hat die Methode oben aber ohnehin das Problem das sie besetzte Fahrzeuge der entsprechenden Seite auch heilt !
Sauberer wäre es wenn man das heilen für jede Crew von jedem entsprechenden Objekt im Auslöser ausführt ! ;)

MagicStyle
03.09.2013, 18:46
Ok, vielen danke für die Info & Tipps :) Mein Problem ist jetzt gelöst, es war mein Fehler. Herzlichen dank an euch beiden !!! :daumen: