Wollte einmal fragen wie ich abfragen könnte z.b wenn man das T inv öffnet das der Server erst abfragt ob der Spieler mit dem Server connected ist wenn nicht soll sich das menü nicht öffnen
Lagswitch abfrage einbauen
-
- Altis Life
-
Midenta1 -
25. Dezember 2021 um 01:07 -
Erledigt
-
-
Also, eine "Lagswitch Abfrage" gibt es nicht. Was du beschreibst ist im Endeffekt eine Art Ping Pong bzw eine Art Keepalive. Sprich, dein Client muss sich beim Server melden, und der Server löst beim Client das Öffnen des Interface aus. So stellst du sicher, dass der Spieler eine Verbindung hat.
Sprich: Client sagt Server "hallo ich bin da!" und Server antwortet mit "Super, hier ist dein Kofferraum!" (oder so ähnlich). Das musste nur implementieren
-
hättest du dafür denn ein beispiel?
-
hättest du dafür denn ein beispiel?
Client, wenn er T Inv aufmacht -> remoteExecCall - Bohemia Interactive Community (bistudio.com) ein Script auf dem Server
Server macht dann ein remoteExecCall an den Client und führt dann die normale T Inv Datei aus. -
Ich hab hier eine ältere Vorlage noch rumliegen für sowas die nicht mehr wirklich genutzt wird:
Code
Alles anzeigen/* Autor: MaltepowR99 Maltis Life Custom System */ params["_vehicle"]; _name = name player; _loops = 100; _forceClose = false; _inUse = _vehicle getVariable "trunk_in_use"; if(isNil "_inUse") then { _inUse = false; }; _userName = _vehicle getVariable "trunkUser"; if(isNil "_userName") then { _userName = ""; }; if(life_debug) then { systemChat format ["Vehicle: %1, Trunk in Use: %2, UserName: %3",_vehicle,_inUse,_userName]; }; while {_loops > 0} do { if(_name != _vehicle getVariable "trunkUser" || {isNil "_userName"}) exitWith {_forceClose = true; }; if(_loops < 90 && {(cursorTarget getVariable ["trunk_in_use",false]) == false}) exitWith { }; // Kurze Abfrag-Pause um Variable sicher setzen zu lassen... sleep 0.1; _loops = _loops - 1; }; if(_forceClose == true) then { closeDialog 0; hint "Dieser Kofferaum wird bereits benutzt!"; };
-
Wobei ich das heute sehr anders machen würde aber hey, hier haste was was immerhin geht
Musst halt noch die Variablen "trunk_in_use", "trunkUser" auf das Fahrzeug speichern oder zb wie TaktischerSpeck meinte zb via RemoteExec Call, wobei er alle Abfragen Serverseititg laufen lassen würde, was evtl auch nicht immer das beste ist.Kommt letzten Endes darauf an was du für Prioritäten hast etc.
Bei meinem Beispiel was hier reingeschickt wurde ist auf jeden Fall die Schwachstelle, dass er aktuell alle 0.1 sek für 10 sek lang Variablen eines Fahrzeuges abfragt was Networktraffic natürlich auch kostet.
RemoteExecCall ist allgemein aber schon sicherer nochmal, jedoch auch performance lastiger im Normalfall, da durch Useractions "Serverseitige Berechnungen" angestoßen werden können (je nach Programmierung kann man hier schon viel verhauen^^)
Ich überarbeite bei Gelegenheit nochmal die obere Datei etwas, da sind mir noch ein paar Sachen aufgefallen
ist halt mehrere Jahre alt.
Aber sollte primär eh als Vorlage / Ideenanstoß dienen, wie du das letzten Endes baust ist dir überlassen
Bei Fragen dazu halt nochmal melden..
MfG Malte
-
Und ich denke so ca meinen das die anderen
Code
Alles anzeigenparams ["_vehicle"]; // Client Side _playerID = clientOwner; [_vehicle,_playerID] remoteExecCall ["maltisServer_fnc_openTInvByServer",2,false]; params ["_vehicle","_playerID"]; // Server Side if((_vehicle getVariable ["trunk_in_use",false]) == false) then { [_vehicle] remoteExecCall ["maltisCore_fnc_openTInv",_playerID,false]; }; //TODO openTInv Datei -> Einfach T inv öffen wie eig eh schon implementiert
-
Habe es schon selber gefixt aber danke
-
- Offizieller Beitrag
Habe es schon selber gefixt aber danke
Wie denn?
-
Wie denn?
was in der fn_vehInventory geändert und eine neue datei in life_server eingerichtet
-
Und ich denke so ca meinen das die anderen
Code
Alles anzeigenparams ["_vehicle"]; // Client Side _playerID = clientOwner; [_vehicle,_playerID] remoteExecCall ["maltisServer_fnc_openTInvByServer",2,false]; params ["_vehicle","_playerID"]; // Server Side if((_vehicle getVariable ["trunk_in_use",false]) == false) then { [_vehicle] remoteExecCall ["maltisCore_fnc_openTInv",_playerID,false]; }; //TODO openTInv Datei -> Einfach T inv öffen wie eig eh schon implementiert
also auf diesen Weg?
-
also auf diesen Weg?
if (!_checkLag) exitWith {[_vehicle] remoteExecCall ["Husky_fnc_checkLagVehInventory",2]};
-
Maltepower, bei deiner alten Version mit dem Loop kräuseln sich mir die Zehennägel xD
Die Variante von Lucian aus dem DE100 Repo ist da deutlich performanter und funktioniert tadellos!
https://github.com/Clon1998/DE100…ion/fn_ping.sqf
https://github.com/Clon1998/DE100…isc/fn_pong.sqf -
Maltepower, bei deiner alten Version mit dem Loop kräuseln sich mir die Zehennägel xD
Die Variante von Lucian aus dem DE100 Repo ist da deutlich performanter und funktioniert tadellos!
https://github.com/Clon1998/DE100…ion/fn_ping.sqf
https://github.com/Clon1998/DE100…isc/fn_pong.sqfJa ist auch wie gesagt relativ alt aber würde auch funktionieren, so ists nicht
Aber würde auch eig jedem Variante B empfehlen aber ist letzten Endes ja jedem selbst überlassen ich gebe nur Ideen preis wie man das umsetzen könnte und ich fand damals in meinen Anfangszeiten erst Variante A verständlicher und wusste ja nicht wie weit seine Kenntnisse gehen. Wer weiß wie Variante B funktioniert sollte klar diese nutzen, weiß dies aber auch...