09.03.2013, 23:37 | #1 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Eventhandler im MP
Hallo,
ich hab da ein Problem mit den Eventhandlern. Ich möchte, dass meiner Einheit im MP ein Eventhandler "Killed" zugewiesen wird. In der init.sqf rufe lasse ich den Eventhandler zuweisen: Code:
{ _x addEventHandler ["Killed", {nul = [_x] execVM "scripts\helpers\player_killed.sqf";}]; } forEach allUnits; Code:
_unit = _this select 0; while ({true}) do { waituntil {!alive _unit}; nul = [_unit] execVM "scripts\equipment\clear_equipment.sqf"; }; Wenn dann aber meine Einheit im MP getötet wird wird das Script nicht ausgeführt. Ich hab auch schon versucht den Eventhandler im Init Feld der Einheit zuzuweisen, selbes Ergebnis. Wie drehe ich das jetzt so, dass der Eventhandler läuft? |
10.03.2013, 08:15 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
_x addEventHandler ["Killed", {_this execVM "scripts\... Die Parameter des EventHandlers sind in der lokalen Variable _this enthalten. So wie bei bei den Skripten.
Die player_killed.sqf funktioniert so nicht! Jede Unit bekommt nach den Tod eine neue ID. Sonst würde es ja Probleme geben wenn sie nach einem Respawn den selben Namen bekommt. Du solltest das eigentliche Skript direkt im Eventhandler aufrufen: _x addEventHandler ["Killed", {[_this select 0] execVM "scripts\equipment\clear_equipment.sqf"}] Geändert von Vienna (10.03.2013 um 08:23 Uhr). |
10.03.2013, 11:47 | #3 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Die Schleife hat einen Fehler, die soll eigentlich warten bis die Einheit wieder lebt. Der Eventhandler wird ja aufgerufen sobald die Einheit Tod ist. Ich will das aber haben wenn die Einheit neu spawnt.
Das mit der ID wusste ich nicht, wieder was neues gelernt. Geändert von JoeJoe87577 (10.03.2013 um 11:53 Uhr). |
10.03.2013, 12:40 | #4 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wenn das für die Units der Spieler ist, dann brauchst du keinen EventHandler. Da reicht ein Skript mit Endlosschleife. Die ID des Spielers zuvor sichern _player = player; Nach dem Respawn kannst du dann die Tote Unit mit _player ansprechen.
|
10.03.2013, 13:52 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Test einmal dieses Skript:
Code:
while {true} do { waitUntil {!alive player}; removeallWeapons player; //das muss erfolgen bevor die neue Spieler-Unit respawnt. } |
10.03.2013, 14:53 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Nachdem ich diesen Code mit einem Auslöser startete, haben die toten Units des Spielers keine Waffen mehr:
Code:
temp = 0 spawn { if (isDedicated) exitWith {}; while {true} do { waitUntil {!alive player}; removeallWeapons player } } Code:
Respawn = "INSTANT"; // Respawn an Ort und Stelle. RespawnDelay = 3; // Respawnzeit |
10.03.2013, 17:16 | #13 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Ich habe das mit einem Funk-Auslöser getestet. Zuerst Respawn ohne und dann mit dem Skript.
Du kannst das auch in der init.sqf starten. Dann aber besser über ein Skript: NachTod.sqf Code:
//Lokal Player. Spieler nach Tod Waffen entfernen. if (isDedicated) exitWith {}; while {true} do { waitUntil {!alive player}; removeallWeapons player } } In Skripten kannst du das nul = weglassen. z.B. 0 execVM "NachTod.sqf"; Wenn du nur einen Parameter hast, dann brauchst du den nicht in ein Array packen. Im Skript wird der dann nur mit _this abgerufen. |
11.03.2013, 19:21 | #14 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Dann mach ich mit der Initialisierung falsch. Ich hab dein Script eingefügt:
Code:
if (isDedicated) exitWith {}; while ({true}) do { waitUntil {!alive player}; removeallWeapons player; } Code:
{ 0 execVM "scripts\helpers\player_killed.sqf"; 0 execVM "scripts\helpers\score_hint.sqf"; } forEach allUnits; |
11.03.2013, 21:07 | #15 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Der erste Code löscht nur die Waffen eines toten Spielers. Sie hat keinen Einfluss auf die Bewaffnung nach dem Respawn.
Dafür findest du in Post #7 einen Link zu einem Beispiel, bei welchem die Bewaffnung des Toten der neue Spieler hat. Falls der zweite Code überhaupt ausgeführt wird, dann ruft er die Skripte auf jedem PC so oft auf wie es Units gibt. Es fehlt hier das _x, welche jeweilige Unit enthält. |
11.03.2013, 22:07 | #16 (permalink) |
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
|
Ah, dann hab ich dich falsch verstanden . Ich schau mir mal dein Script an.
Jetzt nochmal ne ganz andere Frage, wie beende ich eine Multiplayer Mission? Mit endmission "END1"; beende ich die Mission auf dem Server, aber ich bekomme es nicht hin, dass die Mission auf den Clients beendet wird. Ich habe schon gesehen, dass man remote execute benutzen soll. Aber das kleine Schnipsel was ich drin hatte (war mit rENDMISSION) hatte nicht funktioniert. Aus dem Wiki habe ich das so verstanden, dass man den Code auf dem Server ausführt und der dann an alle Clients geschickt wird, oder Irre ich da mal wieder. |
12.03.2013, 02:20 | #17 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Siehe links oben in der Beschreibung [AL] [EL]: http://community.bistudio.com/wiki/endMission ist eigentlich lokal. Musst sicherstellen, dass dieser Befehl bei allen Clients ausgelöst wird.
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Baseschutz | WickerMan | Editing & Scripting | 30 | 02.08.2013 22:52 |
addaction für player (wenn mehrere beieinander stehen) | Wolkenbeisser | Editing & Scripting | 34 | 30.01.2013 07:27 |
addPublicVariableEventHandler | Ghost_Aut | Editing & Scripting | 6 | 14.06.2012 16:27 |
EventHandler wieder | DirtyHarryTPC | Editing & Scripting | 3 | 14.11.2010 11:28 |
Problem mit Eventhandler | Moerderhoschi | Editing & Scripting | 3 | 04.11.2010 19:46 |