Armed-Assault.de Twitter
 
 
Themen-Optionen Ansicht
Alt 25.02.2013, 07:58   #1 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard 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"";}];
VIP.sqf:

Zitat:

Hint "Test";

Killer = _this select 1;

if (isServer) then {
Killer addScore 100; // for hosted environment
} else {
paddscore = [Killer, 100]; publicVariable "paddscore";
};

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!
__________________
Clawhammer ist offline  
Alt 25.02.2013, 09:40   #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

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.
Vienna ist offline  
Alt 25.02.2013, 09:41   #3 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

Davon gehe ich auch aus, aber wie bekomme ich das besser hin?
thx4help!
__________________
Clawhammer ist offline  
Alt 25.02.2013, 10:42   #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

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.
Vienna ist offline  
Alt 25.02.2013, 10:45   #5 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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.
__________________
Clawhammer ist offline  
Alt 25.02.2013, 11:25   #6 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
Standard

*deleted*

Xeno

Geändert von Xeno (08.12.2013 um 17:18 Uhr).
Xeno ist offline  
Alt 25.02.2013, 11:35   #7 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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!
__________________
Clawhammer ist offline  
Alt 25.02.2013, 20:56   #8 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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);
    };
};
Init der Unit VIP01:

Code:
_index = VIP01 addMPEventHandler ["mpkilled", {Null = _this execVM "Scripts\VIP\VIP.sqf";}];removeallweapons this;
VIP.sqf:

Code:
Hint "Test";

if (isServer) then {
    _killer = _this select 1;
    if (isPlayer _killer) then {
        _killer addScore 100;
    };
};
Wo versteckt sich der 200 Fehlerteufel Oo

Danke!
__________________
Clawhammer ist offline  
Alt 25.02.2013, 22:34   #9 (permalink)
500 Beiträge1000 Beiträge
 
Benutzerbild von Pfandgiraffe
 
Registriert seit: 16.09.2008
Ort: Berlin
Alter: 38
Beiträge: 1.737
Pfandgiraffe eine Nachricht über ICQ schicken Pfandgiraffe eine Nachricht über Skype™ schicken
Standard

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>>>___
Pfandgiraffe ist offline  
Alt 26.02.2013, 11:44   #10 (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

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 13:40 Uhr).
Vienna ist offline  
Alt 26.02.2013, 11:59   #11 (permalink)
10 Jahre hx3
5000 Beiträge
 
Benutzerbild von Xeno
 
Registriert seit: 03.01.2008
Alter: 84
Beiträge: 6.552
Standard

*deleted*

Xeno

Geändert von Xeno (08.12.2013 um 17:18 Uhr).
Xeno ist offline  
Alt 26.02.2013, 13:32   #12 (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

Wie ich gerade sehe, habe ich in der Wiki bei dem Befehl das "Kleingedruckte" überlesen. http://community.bistudio.com/wiki/addScore
Vienna ist offline  
Alt 27.02.2013, 15:45   #13 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

ah ok ich dachte ich dürfte wählen
Jetzt klappt alles 1A danke euch!
__________________
Clawhammer ist offline  
Alt 01.03.2013, 17:59   #14 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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"}];
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 18:16 Uhr).
Clawhammer ist offline  
Alt 01.03.2013, 19:05   #15 (permalink)
10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von TeRp
 
Registriert seit: 02.04.2003
Ort: San Francisco
Beiträge: 1.919
Standard

MPKilled ......
__________________

TeRp ist offline  
Alt 02.03.2013, 02:34   #16 (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

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.
Vienna ist offline  
Alt 02.03.2013, 09:28   #17 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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;};}];
Ich glaube so meintest du das richtig? Das will auch nicht grrrrr
__________________

Geändert von Clawhammer (02.03.2013 um 09:41 Uhr).
Clawhammer ist offline  
Alt 02.03.2013, 10:34   #18 (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

Es wird auch der EventHandler ein MP sein müssen:
Code:
_EHkilledIdx = Player08 addMPEventHandler 
 [
  "MPkilled",
  {if (isPlayer _this select 1) then {_this select 1 addScore 100}}
 ];
Vienna ist offline  
Alt 02.03.2013, 10:59   #19 (permalink)
500 Beiträge
 
Benutzerbild von Clawhammer
 
Registriert seit: 07.01.2008
Alter: 37
Beiträge: 635
Clawhammer eine Nachricht über ICQ schicken
Standard

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;};}];
Tippe das der Client UND der Server das Script aufrufen und es deswegen 2x gestartet wird?
__________________

Geändert von Clawhammer (02.03.2013 um 11:38 Uhr).
Clawhammer ist offline  
Alt 02.03.2013, 12:32   #20 (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

Vielleicht wird der EventHandler doppelt aktiviert?

Versuche einmal bei meinem Vorschlag die beiden _this select 1 in normale Klammern zu setzen.
Vienna ist offline  
 

Stichworte
mp eventhandler


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
Auslöser aktiv. durch West und/oder Civilian killshot Editing & Scripting 4 26.09.2012 22:08
Bestimmte Einheit Funk auslösen tigerforce001 Editing 6 20.09.2012 14:39
Auslöser geht nicht. S@ndviper Editing & Scripting 17 31.01.2012 18:03
2 Auslöser arbeiten zusammen Sol.LrMartyn Editing & Scripting 11 05.11.2011 19:29
Gruppe per Auslöser bewegen Deep Five-9te Editing & Scripting 2 07.01.2011 08: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