27.02.2013, 09:50 | #1 (permalink) |
Registriert seit: 29.09.2012
Beiträge: 56
|
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:
P1 votet für Match P1 bekommt VAR voteMatch P2 votet für Match P2 bekommt VAR voteMatch P3 votet nicht P3 bekommt keine VAR jemand eine Idee wie ich an einzelne clients VARs verteile und diese dann wieder herausfilter? Danke --vielleicht fällt jemand ne besser überschrift ein-- |
27.02.2013, 11:38 | #2 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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. Geändert von Vienna (27.02.2013 um 12:57 Uhr). |
28.02.2013, 01:04 | #4 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
So bekommst du ein Array (_listeJA) der Spieler die mit 1 (ja) voten:
Code:
_spieler = [P1, P2, ...]; _vote = [voteMatch_P1, voteMatch_P2, ...]; _listeJA = []; _index = 0; { if(_x==1)then{_listeJA=_listeJA+[_spieler(select _index)]}; _index=_index+1 } forEach _vote; |
28.02.2013, 08:33 | #5 (permalink) |
Registriert seit: 29.09.2012
Beiträge: 56
|
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 |
28.02.2013, 13:34 | #7 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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 voteMatch_P1 = 0; voteMatch_P2 = 0; ... //Vote freigeben und warten bis die Spieler gewählt haben waitUntil {...}; _vote = [voteMatch_P1, voteMatch_P2, ...]; _spieler = [P1, P2, ...]; //Liste der Spieler die mit JA abstimmten _listeJA = []; _index = 0; { if(_x==1)then{_listeJA=_listeJA+[_spieler(select _index)]}; _index=_index+1 } forEach _vote; |
28.02.2013, 19:58 | #8 (permalink) |
Registriert seit: 29.09.2012
Beiträge: 56
|
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; VoteListeJA=VoteListeJA-spieler; |
28.02.2013, 20:59 | #9 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
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]; hint str _code; call compile _code; Der Code wird mit call compile ausgeführt. Die Zeile mit hint ist nur zum Prüfen ob der Code korrekt ist. |
01.03.2013, 00:16 | #11 (permalink) |
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
|
Vielleicht niemand der die neuen Befehle verstanden hat. Ich hatte bei "missionNamespace setVariable" noch nicht den Durchblick. Dein Beispiel hat mich jetzt erleuchtet.
Worin liegt das Problem? Es wird auf die "leeren" Felder im Array nicht zugegriffen. 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. |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Headless Client | Pfandgiraffe | Technische Fragen & Probleme | 34 | 07.05.2014 21:44 |
Multiplayer nicht gängig? | Hunne | Multiplayer | 6 | 04.01.2012 15:13 |
Merkwürdiges Dedi Serverproblem - trotz intensiver Suche nichts gefunden... | Qu!nt | Multiplayer | 5 | 11.10.2011 16:15 |
Missionsparameter Auswahl - paramsarray | Spiderman | Editing & Scripting | 14 | 19.01.2011 14:10 |
Multiplayer PROBLEM!!! | Panzagrenadier | Multiplayer | 15 | 18.06.2010 15:12 |