PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Lokalen "setRank"-Befehl an ander Maschienen Broadcasten?


Q_W_E_R
28.11.2014, 17:21
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 ^^:
////////////////////////////////////////////////////////////
//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;


Hab echt kein Plan wie ich jetzt den Rang an alle PCs sende :(

Danke für jede Hilfe ;)

Drunken Officer
28.11.2014, 21:42
Aus der Hüfte:
PVRANK = rank (_this select 0);
publicVaribale "PVRANK";

Q_W_E_R
29.11.2014, 18:33
Aus der Hüfte:
PVRANK = rank (_this select 0);
publicVaribale "PVRANK";

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:


_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];

};

Danke für deine Hilfe :daumen:

Q_W_E_R
30.11.2014, 14:48
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 :komisch: 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 :confused:

Tajin
02.12.2014, 09:40
mal wieder entäuscht mich ARMA

Nimms mir nicht übel aber an der Enttäuschung ist nicht ArmA schuld, sondern deine fehlende Scripterfahrung. :zahn:



Erstelle eine Funktion:
fnc_setRank = { (this select 0) setRank (this select 1); };


Rufe die Funktion mit BIS_fnc_MP (https://community.bistudio.com/wiki/BIS_fnc_MP) auf.:
[ [someGuy,"COLONEL"], "fnc_setRank", true, true] call BIS_fnc_MP;


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.

Q_W_E_R
03.12.2014, 19:29
Hätte ich den Beitrag mal vohere gelesen :rolleyes: habs jetzt so umgeschrieben das es auch ohne mp_fnc funktionert :zahn: aber danke für die funktion wird demnächst einiges erleichtern wenn ich weider mal mp scripte...

Danke :daumen: