25.02.2013, 06:58 | #1 (permalink) |
addMPEventHandler nur beim Auslöser auslösen
Moin zusammen,
hab folgendes Problem, ich möchte gerne in einer Mehrspieler Mission wenn eine Zielperson ausgeschaltet wurde extrapunkte vergeben. Hab mir gedacht ich mache das so: In die Unit der Zielperson: Code:
_index = VIP01 addMPEventHandler [""mpkilled"", {Null = _this execVM ""Scripts\VIP\VIP.sqf"";}]; blöderweise wird dieses Script allerdings öfter ausgeführt den es gibt mehr als 100 Punkte. Ich glaube es liegt an der Spielerzahl. Wie kann ich das unterbinden? danke!
__________________
|
|
25.02.2013, 08:40 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Ich gehe davon aus, dass der MPEventhandler auf allen PCs das Skript startet. Wenn im Skript die Variable paddscore mit publicVariable "paddscore"; von jedem Client übers Netz gesendet wird, ist das vermutlich die Ursache der mehrfachen Punktewertung.
|
25.02.2013, 09:42 | #4 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Lass einmal den Befehl publicVariable "paddscore"; weg und schau wie sich das im MP Spiel auswirkt. Die Variable paddscore muss ja irgend einen Zweck erfüllen, der aus deiner Information nicht nicht ersichtlich ist.
|
25.02.2013, 09:45 | #5 (permalink) |
Oh ich hatte vergessen das da noch was in der init steht. Das Problem mit addscore im mp ist das dieser Befehl nicht mehr so einfach funktionert.
Hier steht dazu bissl mehr: Scoring on a dedicated server Ich trage heut abend nochmal nach was in der Inti bei mir steht, gerade @work.
__________________
|
|
25.02.2013, 19:56 | #8 (permalink) |
Ok, jetzt verteilt er nicht mehr pro Spieler extra Punkte, allerdings gibt es immernoch 200 statt 100 Punkten.
Hier mal alles was ich habe: init.sqf: Code:
// JIP fix if ((!isServer) && (player != player)) then { waitUntil {player == player}; }; if (isServer) then { "paddscore" addPublicVariableEventHandler { ((_this select 1) select 0) addScore ((_this select 1) select 1); }; }; Code:
_index = VIP01 addMPEventHandler ["mpkilled", {Null = _this execVM "Scripts\VIP\VIP.sqf";}];removeallweapons this; Code:
Hint "Test"; if (isServer) then { _killer = _this select 1; if (isPlayer _killer) then { _killer addScore 100; }; }; Danke!
__________________
|
|
25.02.2013, 21:34 | #9 (permalink) |
Hast du Xeno's Post überhaupt gelesen?
Da stand soviel wie: lösch den ganzen Mist, nehme dir einen normalen EVH killed und kopiere den Code hinein.
__________________
Niemand hat die Absicht eine Tüte zu bauen! ___<<<A3 Wounding System>>>___ |
|
26.02.2013, 10:44 | #10 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Vielleicht zum besseren Verständnis für Clawhammer.
Für Punkte von Spielern gibt es im Arma-System eigene Variable welche mit score unitName ausgelesen und mit unitName addScore xx abgeändert werden können. Jede Abänderung beim Server/Host ist automatisch auf allen beteiligten PCs wirksam. Die Variable steht zu Spielbeginn auf 0 und man verwendete sie für ein eigenes Punktesystem. Edit: Hinweis! Arma2 führt den Befehl addScore nur auf dem Server/Host PC aus (ab Version 1.2). Es gibt weitere solche Variable, in die aber das "System" automatisch Plus- oder Minuspunkte vergibt. Auszulesen mit: rating unitName. Dieser Wert kann mit addRating wie oben abgeändert werden. Bei einem zu hohen Minus-Punktestand wird ein Spieler für alle Seiten zum "Feind". Was dieser "JIP fix" in der init.sqf bewirken soll kapiere ich nicht. Für die Verwaltung von Gesamtpunkten einer Seite/Gruppe sollte diese der "Server" mit eigenen Variablen immer auf dem aktuellen Stand halten, dann müsste das auch stimmen wenn Spieler das Spiel verlassen bzw. neue Spieler hinzukommen. Geändert von Vienna (26.02.2013 um 12:40 Uhr). |
26.02.2013, 12:32 | #12 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Wie ich gerade sehe, habe ich in der Wiki bei dem Befehl das "Kleingedruckte" überlesen. http://community.bistudio.com/wiki/addScore
|
01.03.2013, 16:59 | #14 (permalink) |
Ach mist, sry das ich nochmals störe.
Das ganze hat immernoch einen Bug. Wenn in der KI kein Spieler ist funktioniert das ganze, sobald aber jemand in die KI steigt aktiviert sich der Handler nicht. Hilfe Danke! Hier nochmals der Code: Player Init: Code:
_EHkilledIdx = Player01 addEventHandler ["killed", {_this exec "Scripts\OtherPlayer\OtherPlayer.sqf"}]; Code:
if (isServer) then { _killer = _this select 1; if (isPlayer _killer) then { _killer addScore 1001; }; };
__________________
Geändert von Clawhammer (01.03.2013 um 17:16 Uhr). |
|
02.03.2013, 01:34 | #16 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Liegt vermutlich am Skript. Wenn der Spieler nicht der Host ist, dann wird das nicht funktionieren, weil der Code mit if(isServer)then beginnt.
MPKilled löst das Problem, weil das Skript dann auch beim Server läuft. Auch funkt ja addScore nicht bei einem Client, da könnte man eigentlich diese Abfrage entfernen und sie dafür in den EventHandler einfügen, damit das Skript nur bei Server gestartet wird oder den Code vom Skript gleich in den Eventhandler schreiben. |
02.03.2013, 08:28 | #17 (permalink) |
mit mpkilled funktioniert es weder für die KI noch für einen echten Spieler.
@vienna hab das mal versucht was du sagtest: Code:
_EHkilledIdx = Player08 addEventHandler ["mpkilled", {_killer = _this select 1;if (isPlayer _killer) then {_killer addScore 1001;};}];
__________________
Geändert von Clawhammer (02.03.2013 um 08:41 Uhr). |
|
02.03.2013, 09:59 | #19 (permalink) |
Intressiert Ihn leider kein Stück :-/ Werden weiterhin keine Punkte gezählt :-(
UPDATE: So geht es schon aber ich bekomme 1997 Punkte statt 999 (+1 Kill regulär): Code:
_EHkilledIdx = Player05 addMPEventHandler ["mpkilled", {_killer = _this select 1;if (isPlayer _killer) then {_killer addScore 999;};}];
__________________
Geändert von Clawhammer (02.03.2013 um 10:38 Uhr). |
|
Stichworte |
mp eventhandler |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Auslöser aktiv. durch West und/oder Civilian | killshot | Editing & Scripting | 4 | 26.09.2012 21:08 |
Bestimmte Einheit Funk auslösen | tigerforce001 | Editing | 6 | 20.09.2012 13:39 |
Auslöser geht nicht. | S@ndviper | Editing & Scripting | 17 | 31.01.2012 17:03 |
2 Auslöser arbeiten zusammen | Sol.LrMartyn | Editing & Scripting | 11 | 05.11.2011 18:29 |
Gruppe per Auslöser bewegen | Deep Five-9te | Editing & Scripting | 2 | 07.01.2011 07:46 |