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"";}]; Zitat:
mehr als 100 Punkte. Ich glaube es liegt an der Spielerzahl. Wie kann ich das unterbinden? danke! |
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.
|
Davon gehe ich auch aus, aber wie bekomme ich das besser hin?
thx4help! |
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.
|
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. |
*deleted*
Xeno |
Im Prinzip ist es mir total egal WIE die Score auf das Punktekonto kommt. Hauptsache es ist simpel zu verstehen und funktioniert vernünftig. Werds heute abend mal testen, Danke euch!
|
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:
Code:
_index = VIP01 addMPEventHandler ["mpkilled", {Null = _this execVM "Scripts\VIP\VIP.sqf";}];removeallweapons this; Code:
Hint "Test"; Danke! |
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. :faust: |
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. |
*deleted*
Xeno |
Wie ich gerade sehe, habe ich in der Wiki bei dem Befehl das "Kleingedruckte" überlesen. http://community.bistudio.com/wiki/addScore
|
ah ok ich dachte ich dürfte wählen :D
Jetzt klappt alles 1A danke euch! :daumen: |
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 { |
MPKilled ...... :rolleyes:
|
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. |
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;};}]; |
Es wird auch der EventHandler ein MP sein müssen:
Code:
_EHkilledIdx = Player08 addMPEventHandler |
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;};}]; |
Vielleicht wird der EventHandler doppelt aktiviert?
Versuche einmal bei meinem Vorschlag die beiden _this select 1 in normale Klammern zu setzen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:33 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias