Lokale Variable für client erstellen?
Hallo zusammen,
Brauche Hilfe müsste eine Variable erstellen die jeder client einzeln bekommt wenn er eine Aktion ausführt, dass heißt: Code:
jemand eine Idee wie ich an einzelne clients VARs verteile und diese dann wieder herausfilter? Danke --vielleicht fällt jemand ne besser überschrift ein-- |
Local:
Im Programmcode verwendet man hauptsächlich lokale Variable welche mit einem Unterstrich beginnen. z.B. in einem Skript _zahl = 1; Dieser Variable-Name kann in jedem Skript verwendet werden und unterschiedliche Inhalte haben, welche sich gegenseitig nicht beeinflussen. Global: Eine Variable mit Namen Zahl ohne Unterstrich ist auf dem einzelnen PC "global". Wird Zahl in einem Skript mit einem Wert versehen, dann ist dieser in allen Skripten auf dem PC vorhanden und kann in jedem Skript verändert werden. Die Änderung ist in allen Skripten ersichtlich. Public: Will man den Wert der Global-Variablen den anderen PCs im Netz mitteilen, dann geschieht das im Normalfall mit publicVariable "Zahl"; Damit ist eine Änderung des Werts auf allen PCs vorhanden. In deinem Fall wirst du den Wert von voteMatch der einzelnen Spieler dem "Server" mitteilen wollen. Daher muss es für jeden Spieler eine eigene Vote-Variable geben die vom jeweiligen Spieler public gemacht wird. Jeder Spieler hat seinen eigenen "Stimmzettel". voteMatch_P1 = 0; für kein Vote voteMatch_P1 = 1; für ja voteMatch_P1 = 2; für nein Übertragen wird das dann mit publicVariable "voteMatch_P1"; Für den Spieler P2 gibt es dann die Variable voteMatch_P2; usw. Das erfordert natürlich ein entsprechendes Skript welches dem jeweiligen Spieler seine Variable zuweist, und beim Server/Host dann eines das diese Daten auswertet. Theoretisch könnte man mit einer Public-Variablen alle Spieler einzeln abfragen. Das wäre aber umständlicher zu handhaben. |
ich müsste jetzt nur noch schauen wie ich alle Player die ihre Variable auf 1 haben in einen array bekomme, um sie alle gleichzeitig ansprechen zu können, hast du eine Idee ? geht irgendwie an meine Grenzen :komisch:
|
So bekommst du ein Array (_listeJA) der Spieler die mit 1 (ja) voten:
Code:
_spieler = [P1, P2, ...]; |
Ok das ich das richtig verstehe:
in _spieler = [...] kommen alle Spieler die auf meinem server aufgeführt sind die voten können + natürlich ihre varibalen votematch_p1 ..., dann natürlich der leere array für die spieler _listeJa []; und eine art Variable um this select 0 bis unendlich zu erhöhen. dann fängt dass eingentlich script erst an: du prüfst spieler für spieler ob ihre VARs auf 1 sind und wenn ja komm sie in die liste. jetzt versteh ich erst wie man forEach richtig verwendet, finde es witzig das er beim abfragen von _x keine Probleme macht da er forEach erst zum schluss liest. DANKE VIENNA :daumen: |
Das Script von Vienna wird in dieser Form leider ein Problem kriegen, wenn nicht alle Spielerplätze belegt sind.
|
Probleme treten nur dann auf, wenn man die Vote-Variablen vor dem Vote nicht mit 0 initialisiert.
Werden beim Spielstart unbelegte Spielfiguren deaktiviert, dann wird ihr Platz im Spieler-Array nicht gelöscht, sondern er enthält ANY. Auf ein solches Array-Feld greift aber das Skript nicht zu. Code:
//Die Vote-Variablen vor der Abstimmung auf 0 setzen |
funktioniert irgendwie nicht richtig P1 wird hinzugefügt aber die weiteren nicht, aber hab mir das jetzt erstmal anders gelöst hab in meine init.sqf VoteListeJa = []; geschrieben und mein script so umgerschrieben:
Code:
spieler = [Player]; VoteListeJA=VoteListeJA-spieler; |
Die Namen der Spieler müssen P1, P2 usw. lauten.
Nach der Wahl ist der Wert in der Variablen _wahl eine 1 oder 2 (für JA oder NEIN). Code:
_code = format["voteMatch_%1=%2;publicVariable""voteMatch_%1""",player,_wahl]; Der Code wird mit call compile ausgeführt. Die Zeile mit hint ist nur zum Prüfen ob der Code korrekt ist. |
*deleted*
Xeno |
Vielleicht niemand der die neuen Befehle verstanden hat. Ich hatte bei "missionNamespace setVariable" noch nicht den Durchblick. Dein Beispiel hat mich jetzt erleuchtet.
Zitat:
Diese Routinen sind sicher nicht optimal. Da lässt sich noch einiges über "getexteten" Code vereinfachen. Was dann aber noch verwirrender und schwerer zu durchschauen sein wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:59 Uhr. |
Angetrieben durch vBulletin, Entwicklung von Philipp Dörner & Tobias