04.01.2013, 23:01 | #1 (permalink) |
Registriert seit: 12.12.2012
Beiträge: 20
|
Meldung bei Teamkill
Hallo
Will in meiner Karte ein Script einbauen welche eine Meldung anzeigt (für alle Spieler sichtbar), wenn ein Spieler einen anderen Spieler der selben Seite anschießt bzw. tötet. Hab mir als Basis das Script von Kronzky genommen. Aber ehrlich gesagt versteh ich das nicht richtig. Wie stelle ich fest das einer von der eigenen Seite getroffen wurde? Kann mir einer erklären wie ich das verwende? addEventHandler ["hit" und addEventHandler ["killed" |
05.01.2013, 11:18 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Erstelle die beiden Auslöser im Editor. Sie sind für "Killed" ausgelegt. Ein Testen ist nur mit wenigstens zwei Spielern möglich.
Der erste Auslöser ist ein "Einmal-Auslöser" und aktiviert den EventHandler und die Variablen. Sollte es erforderlich sein, dass der EventHandler nach einem Respawn erneuert werden muss, dann diesen Auslöser von Einmal auf Mehrfach umstellen. Das addrating für den Team-Killer ist notwendig, weil er sonst ein negatives Rating erreicht und aus seiner Seite "ausgeschlossen" wird, wodurch die Seite-Abfrage nicht mehr stimmen würde. Der zweite Auslöser ist ein "Mehrfach-Auslöser" und hat die Aufgabe den Kill-Text bei allen Spielern der selben Seite auszugeben. Code:
1. Auslöser Achse A und B: 0 Aktivierung : Keiner | Einmal Bedingung : alive player Bei Akt. : folgenden Code reinkopieren MeldungTeamkill = []; MeineSeite = playerSide; player addEventHandler [ "killed", { if (MeineSeite == side (_this select 1)) then { MeldungTeamkill = _this; publicVariable "MeldungTeamkill"; _this select 1 addrating 1000 } } ]; 2. Auslöser: Achse A und B: 0 Aktivierung : Keiner | Mehrfach Bedingung : count MeldungTeamkill > 0 Bei Akt. : folgenden Code reinkopieren [side(MeldungTeamkill select 1),"HQ"] sideChat format ["Der Irre %1 hat unseren %2 gekillt!", name(MeldungTeamkill select 1), name(MeldungTeamkill select 0)]; MeldungTeamkill = []; |
05.01.2013, 14:22 | #3 (permalink) |
Registriert seit: 12.12.2012
Beiträge: 20
|
Wenn ich im Trigger bei Akt. den Code kopiere funktioniert es nicht.
Hab dann bei Akt. [] exec script1.sqf eingegügt und beim 2. Trigger [] exec script2.sqf die beiden Dateien erstellt. Die Meldung im SideChat wird nicht angezeigt. habe dann in Script2 zum test folgendes hinzugefügt: hint format["Der Irre %1 hat unseren %2 gekillt!",name(MeldungTeamkill select 1),name(MeldungTeamkill select 0)]; Jetzt kommt die Meldung aber leider ohne Namen. Geändert von Maddog_aut (05.01.2013 um 15:40 Uhr). |
05.01.2013, 16:26 | #5 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Ich sehe gerade, für Teamkill gibt es minus 1400 Punkte. Erhöhe das addrating im 1. Auslöser auf 2000.
Wenn du die Routinen der beiden Auslöser im Editor mit einer KI testen willst, dann kopiere dem KI-Soldaten folgenden Code in die Initialisierungszeile: Code:
this addEventHandler [ "killed", { if (MeineSeite == side (_this select 1)) then { MeldungTeamkill = _this; publicVariable "MeldungTeamkill"; _this select 1 addrating 2000 } } ]; Die KI muss natürlich von der eigenen Seite sein. Wenn du sie tötest wird jetzt die Meldung kommen. Den eigentlichen Test musst du mit einem zweiten Spieler machen. |
05.01.2013, 20:12 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Damit wird in Arma2_OA der Code des EventHandlers zu den anderen PCs übertragen. Das erfordert dann anstelle des 2. Auslösers ein Skript.
Die Anwendung wird dadurch einfacher, aber es werden mehr Daten übers Netz gesendet. |
06.01.2013, 21:07 | #9 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Das Strafversetzen ist recht einfach zu ergänzen:
Im 2. Auslöser fügst du den fett dargestellten Befehl hinzu. Anstelle von xxxxx deine Wunschposition. Sollte für den Spieler jeder Seite eine andere Position gewünscht werden, dann ist das mit einer Seitenabfrage vor setPos zu ergänzen. Code:
2. Auslöser: Achse A und B: 0 Aktivierung : Keiner | Mehrfach Bedingung : count MeldungTeamkill > 0 Bei Akt. : folgenden Code reinkopieren [side(MeldungTeamkill select 1),"HQ"] sideChat format ["Der Irre %1 hat unseren %2 gekillt!", name(MeldungTeamkill select 1), name(MeldungTeamkill select 0)]; if (player == MeldungTeamkill select 1) then {(MeldungTeamkill select 1) setPos xxxxxx}; MeldungTeamkill = []; |
13.01.2013, 19:35 | #12 (permalink) |
Registriert seit: 12.12.2012
Beiträge: 20
|
Das stimmt hier nicht?
Code:
hint format ["%1", localize "STR_ifmp_teamkill", "%2!", name(MeldungTeamkill select 1), name(MeldungTeamkill select 0)]; Spieler A beging einen Teamkill an Spieler B! |
13.01.2013, 22:48 | #14 (permalink) |
Registriert seit: 11.03.2005
Ort: HH
Alter: 53
Beiträge: 1.930
|
Der Klump mit dem %1 etc muss mit in die Stringtable.csv.
Beispiel: Stringtable.csv: Code:
my_Text, "Spielername: %1\nSchaden: %2", "Players name: %1\nDamage: %2" Code:
hintSilent format[localize ""my_Text"", name player, getDammage player]; Geändert von Buliwyf (13.01.2013 um 22:50 Uhr). |
14.01.2013, 14:55 | #16 (permalink) |
Registriert seit: 12.12.2012
Beiträge: 20
|
Funktioniert! Danke Hatte es bereits auch so, nur hatte ich ich einen Fehler ind der Stringtable. Das hab ich auch getestet: Code:
hintSilent format[localize ""my_Text"", name player, getDammage player]; Geändert von Maddog_aut (14.01.2013 um 15:30 Uhr). |
14.01.2013, 15:57 | #17 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Muss aber gehen. Nur die doppelten Anführungszeichen sind falsch. Das sieht dann so aus:
Code:
hint format [localize "STR_ifmp_teamkill", name(MeldungTeamkill select 1), name(MeldungTeamkill select 0)]; Welche Variante du verwendest kommt auf deinen Text an. Bei der von mir muss der Text in der Mitte und die Namen außen stehen. Bei obiger können die Namen innerhalb des Textes stehen. |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|