Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 09.03.2013, 23:37   #1 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard 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;
Mein player_killed.sqf sieht so aus:
Code:
_unit = _this select 0;

while ({true}) do {

	waituntil {!alive _unit};

	nul = [_unit] execVM "scripts\equipment\clear_equipment.sqf";

};
Nachdem ich ein bisschen gelesen habe, weiß ich, dass ich für meine Zwecke (ich will einfach alle Waffen, Magazine und Items der Einheit entfernen), keinen MPEventhandler brauche. Weil der Eventhandler ja nur auf der lokalen Maschiene ausgeführt wird.
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?
JoeJoe87577 ist offline  
Alt 10.03.2013, 08:15   #2 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

_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).
Vienna ist offline  
Alt 10.03.2013, 11:47   #3 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

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).
JoeJoe87577 ist offline  
Alt 10.03.2013, 12:40   #4 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline  
Alt 10.03.2013, 12:48   #5 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Müsste ich das Script den mit rEXECVM aufrufen? Und die ID gebe ich dann einfach als Parameter mit?
JoeJoe87577 ist offline  
Alt 10.03.2013, 13:34   #6 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

In der Übergabe ist nur die momentan aktuelle ID. In player ist immer die aktuelle. Man kann kauch anstelle von player den UnitNamen nehmen. player ist immer der jeweilige Spieler auf seinem PC.
Vienna ist offline  
Alt 10.03.2013, 13:52   #7 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Test einmal dieses Skript:
Code:
while {true} do
 {
  waitUntil {!alive player};
  removeallWeapons player; //das muss erfolgen bevor die neue Spieler-Unit respawnt.
 }
Hier ein Beispiel wie man dem Spieler die Bewaffnung zuweist, welche er unmittelbar vor dem Tod hatte: Problem: Respawn mit Vor-Tod-Bewaffnung
Vienna ist offline  
Alt 10.03.2013, 13:55   #8 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Ich werde es testen.
Ich beis aber gleich ein Stück Schreibtisch ab und nehm ein Glas Milch dazu. Ich schaffe es nichtmal, dass die Mission auf den Clients beendet wird.
JoeJoe87577 ist offline  
Alt 10.03.2013, 14:04   #9 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Auch das hat nicht funktioniert
JoeJoe87577 ist offline  
Alt 10.03.2013, 14:20   #10 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Mehrmals getestet und es hat nicht funktioniert. Weder mit Player noch mit Einheitenname im Parameter.
JoeJoe87577 ist offline  
Alt 10.03.2013, 14:53   #11 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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
   }
 }
In der description.ext ist eingestellt:
Code:
Respawn      = "INSTANT"; // Respawn an Ort und Stelle.
RespawnDelay = 3;         // Respawnzeit
Vienna ist offline  
Alt 10.03.2013, 16:04   #12 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Wie hast du den Auslöser gesetzt? Wenn ich einen setze mit Anybody als Aktivierung spawnen die Einheiten trotzdem mit Waffe.
JoeJoe87577 ist offline  
Alt 10.03.2013, 17:16   #13 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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
   }
 }
Es läuft in Arma 2. Denke nicht, dass sich da in Arma 3 was geändert hat.

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.
Vienna ist offline  
Alt 11.03.2013, 19:21   #14 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

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;
   }
Und ruf es in der Init.sqf auf
Code:
{
	0 execVM "scripts\helpers\player_killed.sqf";
	0 execVM "scripts\helpers\score_hint.sqf";
	
	} forEach allUnits;
Aber es funktioniert nicht. Wenn ich auf einem Dedizierten Server sterbe und neu spawne hab ich die Standardausrüstung an.
JoeJoe87577 ist offline  
Alt 11.03.2013, 21:07   #15 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline  
Alt 11.03.2013, 22:07   #16 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

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.
JoeJoe87577 ist offline  
Alt 12.03.2013, 02:20   #17 (permalink)
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

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.
Vienna ist offline  
Alt 12.03.2013, 10:05   #18 (permalink)
500 Beiträge1000 Beiträge
 
Registriert seit: 05.01.2008
Alter: 32
Beiträge: 1.703
Standard

Und wie führ ich das aus? Ich hab grade den Syntax nicht im Kopf aber ich habschonmal was mit
Code:
call re und rEXEC
gemacht. Stimmt das zum ausführen?
JoeJoe87577 ist offline  
Alt 12.03.2013, 10:08   #19 (permalink)
50 Beiträge100 Beiträge250 Beiträge
 
Benutzerbild von Tajin
 
Registriert seit: 17.01.2008
Beiträge: 267
Standard

Kannst auch mal die neue "hübsche" Variante probieren:
"END1" call BIS_fnc_endMission;
__________________
Tajin ist offline  
 


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Ä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


Kontakt - HX3.de - Archiv - Nach oben

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