PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : eventhandler 'hit' Script


HptmBastardo
24.04.2013, 08:09
Hallo zusammen

mit dem eventhandler 'hit' möchte ich mir ein einfaches Treffermeldesystem basteln. Aber irgendwie bekomme ich das nicht hin...der code ist so:


if (side _this select 1 == east) then

{
if (!alive _this select 1) then
{
hint "blablabla";
}
else
{
hint "blublublu";
};
}
else
{
hint "bliblibli";
};

Ziel ist, dass wenn die Seite East ist und die Einheit tot ist, dann kommt ein Hint. Wenn die getroffene Einheit noch lebt, ein anderer Hint. Und wenn die Einheit nicht East dann eine Friendly Fire Meldung...

Aber es funktioniert nicht so wie ich will. Grrr. Bei einem Treffer werden die Hints alle nacheinander eingeblendet, am Anfang kommt 'blublubblu'. Was mache ich nur falsch, wo liegt mein Denkfehler?

Danke für jegliche Hilfe...

Vienna
24.04.2013, 17:01
Deine Abfrage bezieht sich hier offensichtlich auf das falsche Objekt.


"Hit" Array: _this = [Einheit, Verursacher, Schaden]

select 0: Objekt dem der Event-Handler zugeordnet ist
select 1: Objekt das den Schaden verursacht hat
select 2: Höhe des Schadens durch den Treffer


Der "Hit" EventHandler ist Lokal. Für eine publike Textausgabe musst du sorgen.

HptmBastardo
24.04.2013, 19:48
Danke für die Antwort. Das Objekt habe ich korrigiert, eber es funktioniert immer noch nicht richtig. Es zeigt mir immer nacheinander alle Hints an, beginnend mit dem "bliblibli". Stimmt da was mit dem Syntax nicht? Übersehe ich etwas...?

Vienna
25.04.2013, 13:12
Ein Soldat wird nach dem Tod als Zivilist geführt. Darum ergibt die Abfrage side (_this select 0) == EAST für einen toten EAST-Soldaten false!

Es ist aber möglich die Seite einer Spielfigur abzufragen. Ersetze deine Abfrage nach der Seite durch:

if (_this select 0 isKindOf "SoldierEB") then {...

HptmBastardo
26.04.2013, 07:25
isKindOf habe ich eingebaut, aber es bringt immer noch hintereinander alle Meldungen.

Ich denke dass if (!alive _this select 0) then {hint "..."} das Problem ist. Egal ob die Person verletzt oder tot ist, es wird immer der Hint angezeigt.

Vienna
26.04.2013, 17:36
Kopiere den folgenden Code in die Initalisierungszeile von Einheiten unterschiedlicher Seiten und teste dann das Ergebnis.


temp = this addEventHandler
[
"Hit",
{
_this spawn
{
hint format
[
"Return-Array: _this select\n\n0 = %1\n1 = %2\n2 = %3",
_this select 0,
_this select 1,
_this select 2
]
};
player groupChat format ["Seite von %1: %2",_this select 0, side(_this select 0)];
if (_this select 0 isKindOf "SoldierEB") then
{
if (!alive (_this select 0)) then
{
player groupChat format ["%1 ist tot!",_this select 0]
}
else
{
player groupChat format ["%1 lebt noch!",_this select 0]
}
}
else
{
player groupChat format ["%1 ist nicht von EAST!",_this select 0]

};
}
];

Übrigens, deine Abfrage ist falsch. In diesem Fall ist _this select 0 in Klammern zu setzen.

Damit dir eine falsche Syntax angezeigt wird muss du beim Aufruf von Arma Parameter hizufügen:
z.B.
"C:\Program Files\Bohemia Interactive\ArmA 2\arma2.exe" -nosplash -showscripterrors

HptmBastardo
28.04.2013, 11:34
Vielen Dank für die Hilfe. Nun funktioniert es wie ich will. Etwas peinlich, aber der Hauptfehler war, dass ich das Script mit exec auslöste, und nicht mit execVM. Mit execVm funktioniert alles perfekt....