Hallo mal wieder liebe Community,
ich habe mal eine frage:
Ist es möglich den Kontostand eines Spielers in den Playertags abzufragen und wenn ja wie kann ich das machen?
Kontostand in Playertags abfragen
-
GenApophis -
29. November 2016 um 15:40 -
Geschlossen -
Erledigt
-
-
Du meinst das der Kontostand sichtbar ist unter dem Namen oder wie?
-
Hi @Kuchenplatte,
nee, ich möchte eine abfrage haben die nur schaut ob ein Spieler einen Bestimmten betrag hat und wenn ja soll sie den Namen anzeigen und wenn nicht den namen plus extra Text... -
Selbstverständlich ist das möglich.
Fraglich ist nur wieso du das hinzufügen möchtest ^^.
-
Hi @Max1337 (Geiler Typ #Leetspeak),
ich möchte da ebend etwas anzeigen lassen unter dem Namen wenn ein Spieler weniger als einen bestimmten wert hat.
Bin kein Diabolischer Bösewicht und stelle die Spielergeheimnisse offen XDWeiß jemand von euch wie ich das hinbekomme???
-
Möchtest du das als Cop zu Civ machen oder Civ zu Civ oder wie?
-
Hi @Kuchenplatte,
Civ zu Civ ist der Plan^^ -
Hi,
ich würde es über eine Variable auf dem Spielerobjekt lösen.
Hierfür musst du diesen Code bei den Zivilisten spawnen oder etwas umbauen und in eine vorhandene Schleife legen (initSurvival.sqf).
Code
Alles anzeigen[] spawn { private["_dummyBank"]; waituntil{!isNil "life_atmbank"}; player setVariable["bankPlayer",life_atmbank,true]; _dummyBank = life_atmbank; while{true} do { if!(_dummyBank isEqualTo life_atmbank) then { player setVariable["bankPlayer",life_atmbank,true]; _dummyBank = life_atmbank; }; uisleep 1; }; };
Anschließend kannst du den Kontostand der Personen wie folgt abgreifen:
-> spielerObject getVariable["bankPlayer",0];Gruß
RamBob
-
@GenApophis, @RamBob,
wenn die Variable von anderen Clients oder dem Server (Host) ausgelesen werden soll, dann fehlt das "true" in dem Befehl zum Setzen der Variableplayer setVariable["bankPlayer",life_atmbank,true];
Ansonsten im BI-Wiki den Befehl setVariable genauer anschauen. #handy
Gr. Rom -
Guten Morgen @RamBob,
danke ich werde das gleich mal ausprobieren -
Hi @Rom,
habe ich nachgetragen, bin mal gespannt ob es funktoiniert so wie ich mir das vorstelle oder ob ich geArmat werde XD -
@GenApophis, @RamBob,
wenn die Variable von anderen Clients oder dem Server (Host) ausgelesen werden soll, dann fehlt das "true" in dem Befehl zum Setzen der Variableplayer setVariable["bankPlayer",life_atmbank,true];
Ansonsten im BI-Wiki den Befehl setVariable genauer anschauen. #handy
Gr. RomVollkommen richtig!
Da ist wohl was untergegangen -
Nur mal so am rande, der aktuallisiert den Kontostand aber nicht. Wenn du das brauchst, musste das regelmässig aktuallisieren zum beispiel über das Paycheck script
-
Also ich kann auf Anhieb keinen Fehler erkennen.
-
vergiss es, es ist noch zu früh am morgen.
-
Naja, müssen tuen wir ja schon mal nix @moeck, man kann es so lösen oder auch nicht. Funktionieren tut es in der Logik:
1. die lokale Var *dummy* wird vor der Schleife definiert
2. Variable playerBank wird bei Ungleichheit von *dummy* und Kontostand erneuert, und das global sowie die Variable *dummy* wird in der if-Bedingung aktualisiert.
3. etwa ne Sekunde warten und aufs Neue
4. was geht deiner Meinung nach nicht? Und der Kontostand soll dich dadurch nicht verändern sonder nur von jedem Spieler abgefragt werden können@RamBob und @GenApophis, ich habe mir gerade nochmal die Schleife angeschaut:
Ich weiß zwar nicht, was am Ende performanter ist, aber die Whileschleife kann man auch anders lösen: entweder baust du anstelle der if-Bedingung ein waitUntil mit sleep oder mit for-do-step(0) mit if und sleepVariante. Man kann die Schleife auch komplett umgehen, in dem er das Updaten der Variable einmal in der playerinit + requestReceived und dann in den Updatedateien von Session (clientseitig) -
@Rom: das ganze über eine Schleife zu lösen ist möglich. Ich persönliche ziehe es vor ein Update zu machen, wenn sich etwas ändert. also der Vorschlag mit dem init und dann bei Änderungen updaten ist mit sicherheit performanter. Bedeutet auch weniger Traffic zwischen Client und Server.
-
Wieso macht Ihr alles so umständlich?
Einfach mit remoteExec ein Script starten, als Target den Spieler nehmen (_x) und dort den Betrag abfragen. Das ganze kommt dann direkt in die PlayerTags.sqf und wird mit einer IF abfragte auf einen bestimmten Betrag abgefragt.Bsp.:
_money = remoteExec ["life_fnc_checkMoney",_x];
if(_money > 60000) then {...}; -
Das macht keiner so weil das hart unperformant wäre, da die playertags oneachframe läuft und du so super viele Befehle gleichzeitig übers Netzwerk überträgst. Darüber hinaus würde dein Bsp so nicht funktionieren. #handy
-
Okö,
das verwirrt mich jetzt doch etwas, also ist es performanter wenn ich das wie aus dem vorschlag von @RamBob mache richtig?
Das aktualisiert sich aber nur wenn der spieler joint? (Wäre denke ich kein Problem für mich) -