28.11.2014, 17:21 | #1 (permalink) |
Registriert seit: 29.09.2012
Beiträge: 56
|
Lokalen "setRank"-Befehl an ander Maschienen Broadcasten?
Hallo Leute,
hab mir hier ein Script mit Rängen durch PlayerIDs zusammengebastellt doch mal wieder entäuscht mich ARMA :/ der Befehl setRank wird nur Lokal auf dem jeweiligen Rechner ausgeführt... findet jemand eine möglichkeit einer art umschreibung? hier mal das was ich selbst hinbekommen habe ^^: Code:
//////////////////////////////////////////////////////////// //nul = player execVM "QWR_Ranksystem\QWR_Ranksystem.sqf"; //////////////////////////////////////////////////////////// hint format ["Starte QWR_Ranksystem.sqf"]; sleep 2; waitUntil {!isNull player}; /////// //VAR// /////// _uid = getPlayerUID player; _ranks = ["PRIVATE","CORPORAL","SERGEANT","LIEUTENANT","CAPTAIN","MAJOR","COLONEL"]; // 0 , 1 , 2 , 3 , 4 , 5 , 6; _multiArray = [["111",1,"QWER"],["222",4,"BOUNTY"],["333",2,"BREMSE"],["444",2,"SPEARS"]]; { if (_uid == _x select 0) then { _GetRankPlayer = (_x select 1); _PlayerRank = _ranks select _GetRankPlayer; Player setRank _PlayerRank; hint format ["Dein Rang ist %1", rank player]; }; } forEach _multiArray; Danke für jede Hilfe |
28.11.2014, 21:42 | #2 (permalink) |
Registriert seit: 15.05.2011
Beiträge: 1.110
|
Aus der Hüfte:
PVRANK = rank (_this select 0); publicVaribale "PVRANK";
__________________
Bewegende Momente bei ArmA 3 |
29.11.2014, 18:33 | #3 (permalink) |
Registriert seit: 29.09.2012
Beiträge: 56
|
Hat leider nicht ganz so leicht funktioniert ... Hab aber (hoffe ich zumindest) eine Lösung gefunden wenn ich Zeit und ein "Opfer" gefunden habe werte ich es Testen und nochmal bescheidt geben: Code:
_uid = getPlayerUID player; _hatRang = 0; _ranks = ["PRIVATE","CORPORAL","SERGEANT","LIEUTENANT","CAPTAIN","MAJOR","COLONEL"]; _multiArray = [["123",1,"QWER"],["456",4,"BOUNTY"],["789",2,"SPACKENBREMSE"]]; { if (_uid == _x select 0) then { _GetRankPlayer = (_x select 1); _PlayerRank = _ranks select _GetRankPlayer; if (isNil "QWR_PlayerRank") then { QWR_PlayerRank = [[vehicle player,_PlayerRank]]; publicVariable "QWR_PlayerRank"; } else { QWR_PlayerRank = QWR_PlayerRank + [[vehicle player,_PlayerRank]]; publicVariable "QWR_PlayerRank"; }; _hatRang = 1; { (_x select 0) setRank (_x select 1); } forEach QWR_PlayerRank; hint format ["Dein Rang ist %1", rank player]; }; } forEach _multiArray; if (_hatRang == 0) then { { (_x select 0) setRank (_x select 1); } forEach QWR_PlayerRank; hint format ["Dein Rang und deine Player-ID ist noch nicht eingetragen! Deine Player-ID würde in deine Zwischenablage kopiert!"]; copyToClipboard format ["%1", _uid]; cutText ["Dein Rang und deine Player-ID ist noch nicht eingetragen! Deine Player-ID würde in deine Zwischenablage kopiert!","BLACK",5]; sleep 5; cutText ["","BLACK IN",0]; }; |
30.11.2014, 14:48 | #4 (permalink) |
Registriert seit: 29.09.2012
Beiträge: 56
|
So hab jetzt ziemlich lange rumprobiert ... und hab fest gestellt was mein Problem ist :
Alle Spielbaren Einheiten haben den Rang COLONEL P1 connected :: Lässt das Script durchlaufen erstellt den Array: QWR_PlayerRank [[p1, "PRIVATE"]] und führt das aus: p1 setRank "PRIVATE"; so P2 connected :: Lässt das Script durchlaufen erstellt den Array: QWR_PlayerRank [[p1, "PRIVATE"],[p2, "LIEUTNANT"]] und führt das aus: p1 setRank "PRIVATE"; p2 setRank "LIEUTNANT"; jetzt hab ich das Prbolem für P1 sieht das so aus: rank P1 | "PRIVATE" rank P2 | "COLONEL" für P2 sieht es so aus: rank P1 | "PRIVATE" rank P2 | "LIEUTNANT" Ich finde es irgendwie seltsam das man auf die idee kommt den Befehl "SetRank" nur Lokal zu machen aber das ist halt Bohemia... ich brauch jetzt eine Art umschreibung die sagt das Wenn ein Spieler den Array ändert/Connected das alle anderen den Befehl SetRank mit dem von ihm aktualisierten Array ausführen kein Plan wie ich in einem Lokalem Script sage das alle Spieler noch einmal ein Script ausführen ... Vielleicht hat noch jemand ne idee mal schaun viell. fällt mir selber noch was ein |
02.12.2014, 09:40 | #5 (permalink) |
Registriert seit: 17.01.2008
Beiträge: 267
|
Nimms mir nicht übel aber an der Enttäuschung ist nicht ArmA schuld, sondern deine fehlende Scripterfahrung. Erstelle eine Funktion: PHP-Code:
Rufe die Funktion mit BIS_fnc_MP auf.: PHP-Code:
Das gleiche wäre auch direkt mit dem setRank befehl möglich, ohne eine Funktion zu erstellen. Ist aber sicherer so. Schau dir bis_fnc_mp mal genauer an, für multiplayerscripting ist das fast unerlässlich. Ansonsten, was dein Script oben angeht: Anstelle objektreferenzen zusammen mit Rängen in einem Array abzulegen, könntest du einfach Objektvariablen für den Rang verwenden. (setVariable) Oder aber die Ränge nicht abhängig vom Objekt, sondern nur von der SpielerID abspeichern. Das lässt sich jedenfalls auf mehrere Wege lösen.
__________________
Geändert von Tajin (02.12.2014 um 09:48 Uhr). |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
Themen-Optionen | |
Ansicht | |
|
|