Arrayübergabe
Moin,
ich komm bei dem Versuch ein Array zu übergeben nicht so recht weiter, wäre klasse wenn mir da jmd helfen könnte. (testen tu ich aufn dedi-server) Hab auf der Map: 1. Spiellogik namens server 2. Auslöser names serverinit Bedingung: local server Aktivierungszeile : Code:
sinit = [] execVM "scripts\serverinit.sqf"; Bedingung: local player Aktivierungszeile : Code:
pinit = [] execVM "scripts\playerinit.sqf";punkte = [] execVM "scripts\punktefang.sqf"; Code:
this addEventHandler ["killed", {handle = [(_this select 0),(_this select 1)] execVM "scripts\enemykilled.sqf"}]; init.sqf : Code:
LANGER_punkte = compile (preprocessFileLineNumbers "scripts\punktefang.sqf"); Code:
if !(local player) exitwith {}; Code:
if !(local server) exitwith {}; Code:
if !(local player) exitwith {}; die Funktion läuft, sehe ich an der groupchat-mitteilung aber irgendwie scheint das mit der Array-übergabe nicht zu funzen.. ich frickel da jetzt seid fast 2Tagen rum und komme nicht weiter :( sinn dieser ganzen aktion ist, jedem spieler für eliminierte/zerstörte Soldaten/Fahrzeuge Pkt zuzuweisen und danach Orden/Auszeichnungen zu verteilen.. wenn jmd eine Idee hat, was ich falsch mache oder einen anderen Lösungsweg weiss ... einen ratlosen Gruss, Langer |
Man kann die Sache, natürlich sehr unterschiedlich angehen, alles möglichst client-seitig (da muss man wegen den killed-eventhandler etwas aufpassen), oder die ganze Punktevergabe serverseitig (wobei die aktuellen Punkte dann regelmäßig oder auf Anforderung des Clients aktualisiert werden) oder ne Mischung aus beidem, so wie hier :daumen:
Hab mir das ganze jetzt nicht so genau angeschaut und durchdacht, aber - funktioniert die "Array-Übergabe" wohl nicht, wegen dem "=" bei publicVariable "uebergabe"; , das gehört da nicht hin - wirst du zur Einordnung des Einheitentyps wohl noch isKindOf brauchen (die Konstruktion mit dem switch wirst du dann wohl etwas umbauen müssen) - solltest du bei dem busy-waiting-mäßigen Abfragen von der Variable uebergabe aufpassen - jeder Kill sollte wohl nur einmal gezählt werden - statt dem busy-waiting mit der Schleife vielleicht mal addPublicVariableEventHandler anschauen - statt der Konstruktion mit der Gamelogic server und local server kann einfach isServer verwendet werden Hoffe, ich konnte helfen ;) |
Moin,
vielen Dank für deine Hilfe, Master85 :), pöses "=" , wie hat sich das nur wieder eingeschlichen...:zahn: auch die array-zuweisung habe ich in Code:
uebergabe set [0, _killer]; Ich glaube diesen addPublicVariableEventhandle verstehe ich nicht richtig, Code:
"uebergabe" addPublicVariableEventHandler { Mfg Langer |
Ein addPublicVariableEventHandler funktionert so, wenn der Server diese ausgibt z.B Tot dann legt dieser los und macht das was du ihm gesagt hast.
Ein bsp: "TOT" addPublicVariableEventHandler{ Player sidechat "Bla bla ist tot"; }; Du kannst den so oft benutzten wie du möchtest der legt immer wieder los wenn die Variable gesetzt wird. Du kannst den sogar nur auf true angehen lassen. Ein bsp: "TOT" addPublicVariableEventHandler{ if(tot)then{Player sidechat "Bla bla ist tot";}; }; Wenn du beibe Varianten haben willst kann das so aussehen. Ein bsp: "TOT" addPublicVariableEventHandler{ if(tot)then{Player sidechat "Bla bla ist tot";}; if(!tot)then{player sidechat "bla bla ist noch am leben";}; }; Ich hoffe du kann mit meiner Erklärung was anfangen. Was noch zu dem addPublicVariableEventHandler was zu erwähnen ist das funktioniert nur decidet also nicht wenn du das im Editor testest, da du dort Server und Client gleichzeitig bist. Wenn du eine Variable beim clienten Ausgibts dann wird auch der PublicVariableEventHandler bei dir nicht funktionieren sondern nur bei den anderen Spielern bzw auf dem Server. Noch was zu deinem Vorhaben du kannst auch einfach den Score des Spielers auslesen. Bsp: _number=score player; Du könntest es ja dann score abhängig machen wann du deinem Spieler die Orden,Auszeichnungen usw vergeben. |
:) sehr gute erklärung, jetz hab sogar ich verstanden wie der funktioniert, Großes Danke!
Mit verwendung des PublicVariable-Handlers brauch ich dann auch keine andauerde Abfrage über eine schleife...:D Das Auszeichnungssystem von den score abhängig zu machen, hab ich schon mal, dort wurde leider kein unterschied gemacht ob ich mit M1 aufm Hügel campe und alles aus 3km wegholze, oder mit M136 in der Stadt unterwegs bin. Daher wollte ich jetzt einen Schritt weiter gehen und erstmal eine eigene Punkteliste erstellen, dort dann einbauen "wie" das "killed"-event zustande kam und dementsprechend mehr oder weniger punkte verteilen etc. etc. Ich bin relativ neu im scripten und muss daher schritt für schritt vorgehen, alles auf einmal wächst einem schnell übern kopf :oh: Mfg Langer |
Warum sollte zwischen
uebergabe = [_killer,_toter]; oder uebergabe = []; uebergabe set [0, _killer]; uebergabe set [1, _toter]; ein Unterschied sein? Ich denke das liegt eher daran, dass lokale Objekte nicht übertragen werden können (z.B. eine vom Server oder einem Spieler gesteuerte KI). Wäre interessant, wenn du addPublicVariableEventHandler testen würdest. Dieser EventHandler überträgt vermutlich eine Änderung der Variablen automatisch übers Netzt. Dabei werden zwei Werte übergeben: _this select 0 = <Name der Variablen als "String"> _this select 1 = <Inhalt der der Variablen> Das könntest du in deinem Fall so testen: "uebergabe" addPublicVariableEventHandler {hint format["Name=%1 Inhalt=%2",_this select 0,_this select 1]} Funktioniert das, dann kann die übliche Übertragung mit publicVariable entfallen. |
@Vienna,
hab mal beide Versionen getestet: Code:
uebergabe = [_toter,_killer]; Code:
uebergabe set [0, _toter]; im PublicEventhandler stecke ich beide übergabewerte in Code:
_nplayer = format["%1",Player]; Die zweite Übergabe (mit set) ist denke ich etwas übersichtlicher, da ich einige zusätzliche Variablen einbauen möchte (z.B. welche Waffe/Fahrzeug wurde benutzt, vlt die Crew, um Fahrer eines Panzers auch pkt zu geben .. etc. etc...) und diese einzelnen Zeilen besser mit Kommentaren versehen kann... Nochmals Danke an alle die mir geholfen haben:daumen: Mfg Langer |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:04 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias