Add coin support to dayz_Server and login

New variables: DZE_groupManagement = false; //Enable or disable group
management. Enabled by default
DZE_MoneyStorageClasses = []; // If using a Single currency system
(Z_SingleCurrency = true;), this is an array of object classes players
can store coins in

if Z_SingleCurrency = true; the hive is now set up to handle coin
updates on players, characters, and objects.
if DZE_groupManagement = true; the hive is now set up to save groups

group and coin variables are set in player_monitor.fsm, for
vehicles/objects it's set in the server_monitor.sqf file for objects in
the DZE_MoneyStorageClasses array

Also, this commit includes a change to the way the hive spawns in
vehicles. vehicles are now created at [0,0,0] and moved using setPosATL
to their saved position. Thanks for the tip @ndavalos  @eraser1
This commit is contained in:
icomrade
2016-08-03 18:01:22 -04:00
parent de9d3feb0f
commit ae78fde067
6 changed files with 117 additions and 39 deletions

View File

@@ -1,4 +1,4 @@
private ["_doLoop","_hiveVer","_isHiveOk","_playerID","_playerObj","_primary","_key","_charID","_playerName","_backpack","_isNew","_inventory","_survival","_model","_config","_mags","_wpns","_bcpk","_newPlayer","_isInfected"];
private ["_playerID","_forEachIndex","_endMission","_0","_1","_timeleft","_doLoop","_key","_primary","_model","_inventory","_backpack","_survival","_CharacterCoins","_group","_playerCoins","_BankCoins","_hiveVer","_mags","_wpns","_bcpk","_config","_isInfected","_remaining","_playerObj","_playerName","_newPlayer","_isNew","_charID","_isHiveOk"];
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
@@ -17,6 +17,10 @@ _backpack = [];
_survival = [0,0,0];
_model = "";
_isInfected = 0;
_CharacterCoins = 0;
_group = [];
_playerCoins = 0;
_BankCoins = 0;
if (_playerID == "") then {
_playerID = [_playerObj] call FNC_GetPlayerUID;
@@ -78,10 +82,9 @@ if ((_primary select 0) == "ERROR") exitWith {
//Process request
_newPlayer = _primary select 1;
_isNew = count _primary < 7; //_result select 1;
_isNew = count _primary < 10; //_result select 1;
_charID = _primary select 2;
//diag_log ("LOGIN RESULT: " + str(_primary));
/* PROCESS */
_hiveVer = 0;
@@ -90,14 +93,20 @@ if (!_isNew) then {
_inventory = _primary select 4;
_backpack = _primary select 5;
_survival = _primary select 6;
_group = _primary select 7;
_CharacterCoins = _primary select 7;
_model = _primary select 8;
_hiveVer = _primary select 9;
_group = _primary select 9;
_playerCoins = _primary select 10;
_BankCoins = _primary select 11;
_hiveVer = _primary select 12;
if !(_model in AllPlayers) then {_model = "Survivor2_DZ";};
} else {
_isInfected = if (DZE_PlayerZed) then {_primary select 3} else {0};
_model = _primary select 4;
_hiveVer = _primary select 5;
_group = _primary select 5;
_playerCoins = _primary select 6;
_BankCoins = _primary select 7;
_hiveVer = _primary select 8;
if (isNil "_model") then {
_model = "Survivor2_DZ";
} else {
@@ -122,7 +131,7 @@ if (!_isNew) then {
_isHiveOk = if (_hiveVer >= dayz_hiveVersionNo) then {true} else {false}; //EDITED
PVCDZ_plr_Login = [_charID,_inventory,_backpack,_survival,_isNew,dayz_versionNo,_model,_isHiveOk,_newPlayer,_isInfected];
PVCDZ_plr_Login = [_charID,_inventory,_backpack,_survival,_isNew,dayz_versionNo,_model,_isHiveOk,_newPlayer,_isInfected,_group,_CharacterCoins,_playerCoins,_BankCoins];
(owner _playerObj) publicVariableClient "PVCDZ_plr_Login";
//Make player wait until ghost timer is up.

View File

@@ -1,4 +1,4 @@
private ["_characterID","_temp","_currentWpn","_magazines","_force","_isNewPos","_humanity","_isNewGear","_currentModel","_modelChk","_playerPos","_playerGear","_playerBackp","_backpack","_killsB","_killsH","_medical","_isNewMed","_character","_timeSince","_charPos","_isInVehicle","_distanceFoot","_lastPos","_kills","_headShots","_timeGross","_timeLeft","_onLadder","_isTerminal","_currentAnim","_muzzles","_array","_key","_lastTime","_config","_currentState","_name"];
private ["_debug","_distance","_distanceFoot","_playerPos","_lastPos","_playerGear","_medical","_currentModel","_currentAnim","_currentWpn","_muzzles","_array","_coins","_key","_globalCoins","_bankCoins","_group","_playerBackp","_backpack","_kills","_killsB","_killsH","_headShots","_humanity","_lastTime","_timeGross","_timeSince","_timeLeft","_config","_onLadder","_isTerminal","_modelChk","_temp","_currentState","_character","_magazines","_characterID","_force","_charPos","_isInVehicle","_name","_Achievements","_isNewMed","_isNewPos","_isNewGear"];
//[player,array]
_character = _this select 0;
@@ -88,7 +88,7 @@ if (_characterID != "0") then {
};
//Process update
if (_characterID != "0") then {
//if (_characterID != "0") then {
//Record stats while we're here
/*
Check previous stats against what client had when they logged in
@@ -164,13 +164,31 @@ if (_characterID != "0") then {
if (!isNull _character) then {
if (alive _character) then {
//Wait for HIVE to be free and send request
_key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,_kills,_headShots,_distanceFoot,_timeSince,_currentState,_killsH,_killsB,_currentModel,_humanity];
if (Z_SingleCurrency) then {
_coins = _character getVariable [Z_MoneyVariable, -1]; //should getting coins fail set the variable to an invalid value to prevent overwritting the in the DB
_key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:%17:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,_kills,_headShots,_distanceFoot,_timeSince,_currentState,_killsH,_killsB,_currentModel,_humanity,_coins];
} else {
_key = format["CHILD:201:%1:%2:%3:%4:%5:%6:%7:%8:%9:%10:%11:%12:%13:%14:%15:%16:",_characterID,_playerPos,_playerGear,_playerBackp,_medical,false,false,_kills,_headShots,_distanceFoot,_timeSince,_currentState,_killsH,_killsB,_currentModel,_humanity];
};
//diag_log ("HIVE: WRITE: "+ str(_key) + " / " + _characterID);
//diag_log format["HIVE: SYNC: [%1,%2,%3,%4]",_characterID,_playerPos,_playerGear,_playerBackp];
_key call server_hiveWrite;
};
};
if (Z_SingleCurrency) then { //update global coins
_globalCoins = _character getVariable ["GlobalMoney", -1];
_bankCoins = _character getVariable ["MoneySpecial", -1];
_key = format["CHILD:205:%1:%2:%3:%4:",(getPlayerUID _character),dayZ_instance,_globalCoins,_bankCoins];
_key call server_hiveWrite;
};
if (DZE_groupManagement) then { //update player group
_group = _character getVariable ["savedGroup", []];
_key = format["CHILD:204:%1:%2:%3:",(getPlayerUID _character),dayZ_instance, _group];
_key call server_hiveWrite;
};
// If player is in a vehicle, keep its position updated
if (vehicle _character != _character) then {
[vehicle _character, "position"] call server_updateObject;
@@ -183,5 +201,5 @@ if (_characterID != "0") then {
if (_timeSince > 0) then {
_character setVariable ["lastTime",(diag_ticktime - _timeLeft)];
};
};
//};
};

View File

@@ -1,8 +1,8 @@
// [_object,_type] spawn server_updateObject;
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
if (isNil "sm_done") exitWith {};
private ["_objectID","_objectUID","_object_position","_isNotOk","_object","_type","_recorddmg","_forced","_lastUpdate","_needUpdate","_object_inventory","_object_damage","_objWallDamage","_object_killed","_object_maintenance","_object_variables"];
private ["_object","_type","_objectID","_objectUID","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk"];
_object = _this select 0;
_type = _this select 1;
_recorddmg = false;
@@ -11,10 +11,10 @@ _forced = if (count _this > 2) then {_this select 2} else {false};
_objectID = "0";
_objectUID = "0";
if !((isNil "_object") or {isNull _object}) then {
_objectID = _object getVariable ["ObjectID","0"];
_objectUID = _object getVariable ["ObjectUID","0"];
};
if ((isNil "_object") || {isNull _object}) exitWith {diag_log "server_updateObject.sqf _object null or nil, could not update object"};
_objectID = _object getVariable ["ObjectID","0"];
_objectUID = _object getVariable ["ObjectUID","0"];
if ((typeName _objectID == "SCALAR") || (typeName _objectUID == "SCALAR")) then {
#ifdef OBJECT_DEBUG
@@ -65,7 +65,7 @@ _object_position = {
};
_object_inventory = {
private ["_inventory","_previous","_key"];
private ["_inventory","_key","_isNormal","_coins"];
if (_object isKindOf "TrapItems") then {
_inventory = [["armed",_object getVariable ["armed",false]]];
} else {
@@ -90,9 +90,19 @@ _object_inventory = {
//if (str _inventory != _previous) then {
_object setVariable["lastInventory",_inventory];
if (_objectID == "0") then {
_key = format["CHILD:309:%1:",_objectUID] + str _inventory + ":";
if (Z_SingleCurrency) then {
_coins = _object getVariable [Z_MoneyVariable, -1]; //set to invalid value if getVariable fails to prevent overwriting of coins in DB
_key = format["CHILD:309:%1:%2:%3:",_objectUID,_inventory,_coins];
} else {
_key = format["CHILD:309:%1:%2:",_objectUID,_inventory];
};
} else {
_key = format["CHILD:303:%1:",_objectID] + str _inventory + ":";
if (Z_SingleCurrency) then {
_coins = _object getVariable [Z_MoneyVariable, -1];
_key = format["CHILD:303:%1:%2:%3:",_objectID,_inventory,_coins];
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_inventory];
};
};
#ifdef OBJECT_DEBUG
@@ -188,12 +198,23 @@ _object_maintenance = {
_variables set [count _variables, ["padlockCombination", _accessArray]];
if (_objectID == "0") then {
_key = format["CHILD:309:%1:%2:",_objectUID,_ownerArray];
if (Z_SingleCurrency) then {
_coins = _object getVariable [Z_MoneyVariable, -1];
_key = format["CHILD:309:%1:%2:%3:",_objectUID,_ownerArray,_coins];
} else {
_key = format["CHILD:309:%1:%2:",_objectUID,_ownerArray];
};
_key = format["CHILD:306:%1:%2:%3:",_objectUID,[],0]; //Wont work just now.
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_ownerArray];
if (Z_SingleCurrency) then {
_coins = _object getVariable [Z_MoneyVariable, -1];
_key = format["CHILD:303:%1:%2:%3:",_objectID,_ownerArray,_coins];
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_ownerArray];
};
_key = format["CHILD:306:%1:%2:%3:",_objectID,[],0];
};
// #ifdef OBJECT_DEBUG
diag_log ("HIVE: WRITE: Maintenance, "+ str(_key));
// #endif
@@ -214,9 +235,19 @@ _object_variables = {
_variables set [count _variables, ["BuildLock", _lockedArray]];
if (_objectID == "0") then {
_key = format["CHILD:309:%1:%2:",_objectUID,_variables];
if (Z_SingleCurrency) then {
_coins = _object getVariable [Z_MoneyVariable, -1];
_key = format["CHILD:309:%1:%2:%3:",_objectUID,_variables,_coins];
} else {
_key = format["CHILD:309:%1:%2:",_objectUID,_variables];
};
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_variables];
if (Z_SingleCurrency) then {
_coins = _object getVariable [Z_MoneyVariable, -1];
_key = format["CHILD:303:%1:%2:%3:",_objectID,_variables,_coins];
} else {
_key = format["CHILD:303:%1:%2:",_objectID,_variables];
};
};
_key call server_hiveWrite;
};