Einzelnen Beitrag anzeigen
Alt 26.11.2011, 15:12   #13 (permalink)
Vienna
SQF Zauberer 10 Jahre hx3
500 Beiträge1000 Beiträge
 
Benutzerbild von Vienna
 
Registriert seit: 12.07.2004
Ort: Wien
Beiträge: 1.917
Standard

Der Versuch einer Testmission:

In der Test-Mission gibt es drei spielbare Soldaten. Bei der Initialisierung werden die Variablen mit dem Objektnamen der Soldaten angesprochen, im Spiel dann jeweils nur noch mit Player (siehe im Code den Kommentar):
init.sqf
Code:
if (local player) then          //nur wenn Spieler
 {
    waitUntil {!isNull player}; //warten bis System Spieler initialisiert hat
 };

if (isServer) then             //nur für den Server/Host
 {
  onPlayerConnected    "[_uid,_name] ExecVM 'Server_PlayerConnected.sqf'";
  onPlayerDisconnected "[_uid,_name] ExecVM 'Server_PlayerDisconnected.sqf'";
 };

//Für Spieler und Server
S1 setVariable["geld", 0, false]; //mit false nicht public initialisieren!
S2 setVariable["geld", 0, false]; //mit false nicht public initialisieren!
S3 setVariable["geld", 0, false]; //mit false nicht public initialisieren!

//Im Spiel kann dann jeder Spieler seine Variable mit player ansprechen. z.B:
//
//   player setVariable["geld", (player getVariable "geld") + 100, true];
//
//true bedeutet hier, dass die Änderung zu den anderen PCs übertragen wird.
Nach einem Disconnect werden vom Server dem Spieler die aktuellen Variablenwerte übertragen. Das Connected-Skript wird auch beim Spielstart aufgerufen. Dabei könnte man die UID der Spieler, für einen späteren Vergleich, beim Server speichern:
Server_PlayerConnected.sqf
Code:
Private ["_uid","_name"];

_uid  = _this select 0;   //die einzigartige Spieler ID
_name = _this select 1;   //Name des Spielers

//Pause (bei Bedarf verlängern) damit die Init.sqs des Spieler die
//  folgenden Daten nicht überschreibt
sleep 1; 

//Infoausgbe nur wenn Host der Server
 if (!isDedicated) then
  {
    player groupChat format ["Player Connected  UID: %1 | Name: %2",_uid,_name];
  };

//Aktuellen Spielstand übertragen
S1 setVariable["geld", S1 getVariable "geld", true]; 
S2 setVariable["geld", S2 getVariable "geld", true]; 
S3 setVariable["geld", S3 getVariable "geld", true];
Das Disconnected-Skrip wird hier nicht benötigt, da die Variablen bei jeder Änderung immer auch dem Server übermittelt werden (darum bei Daten-Änderung mit setVariable immer true einstellen!).
Server_PlayerDisconnected.sqf
Code:
Private ["_uid","_name"];

_uid  = _this select 0;   //die einzigartige Spieler ID
_name = _this select 1;   //Name des Spielers
Für das Testen sind in der der Beispielmission Funkbefehle vorhanden, mit denen die Werte der Variablen angezeigt und geändert werden können.

Für den Diskonnect-Test muss der Spieler wirklich das Spiel verlassen, nicht nur eine andere Spielfigur wählen.
Angehängte Dateien
Dateityp: zip __JIP_Test_01-utes.zip (2,5 KB, 49x aufgerufen)
Vienna ist offline