mirror of
https://github.com/EpochModTeam/DayZ-Epoch.git
synced 2025-12-14 04:02:37 +03:00
It makes no sense to rename the identical DayZ PVs to have an E in their name. I don't see any good reason it was done in the first place. All it accomplishes is breaking script compatibility between the two mods and requiring different publicvariable.txt filters. The only time it makes sense is for custom Epoch variables that aren't used in vanilla. All admins have to do to update custom scripts is swap the names according to the change log. Note I've submitted a pull request to replace PVDZ_veh_Save with PVDZ_obj_Save in official too because they are duplicates.
207 lines
6.0 KiB
Plaintext
207 lines
6.0 KiB
Plaintext
private ["_isInfected","_doLoop","_hiveVer","_isHiveOk","_playerID","_playerObj","_primary","_key","_charID","_playerName","_backpack","_isNew","_inventory","_survival","_model","_mags","_wpns","_bcpk","_config","_newPlayer"];
|
|
#include "\z\addons\dayz_server\compile\server_toggle_debug.hpp"
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("STARTING LOGIN: " + str(_this));
|
|
#endif
|
|
|
|
_playerID = _this select 0;
|
|
_playerObj = _this select 1;
|
|
_playerName = name _playerObj;
|
|
_worldspace = [];
|
|
if (_playerName == '__SERVER__' || _playerID == '' || local player) exitWith {};
|
|
|
|
if (isNil "sm_done") exitWith {
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("Login cancelled, server is not ready. " + str(_playerObj));
|
|
#endif
|
|
};
|
|
// Cancel any login until server_monitor terminates.
|
|
// This is mandatory since all vehicles must be spawned before the first players spawn on the map.
|
|
// Otherwise, all vehicle event handlers won't be created on players' client side.
|
|
if (isNil "sm_done") exitWith { diag_log ("Login cancelled, server is not ready. " + str(_playerObj)); };
|
|
|
|
if (count _this > 2) then {
|
|
dayz_players = dayz_players - [_this select 2];
|
|
};
|
|
|
|
//Variables
|
|
_inventory = [];
|
|
_backpack = [];
|
|
_items = [];
|
|
_magazines = [];
|
|
_weapons = [];
|
|
_medicalStats = [];
|
|
_survival = [0,0,0];
|
|
_isInfected = 0;
|
|
_tent = [];
|
|
_state = [];
|
|
_direction = 0;
|
|
_model = "";
|
|
_newUnit = objNull;
|
|
if (_playerID == "") then {
|
|
_playerID = [_playerObj] call FNC_GetPlayerUID;
|
|
};
|
|
|
|
if ((_playerID == "") || (isNil "_playerID")) exitWith {
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("LOGIN FAILED: Player [" + _playerName + "] has no login ID");
|
|
#endif
|
|
};
|
|
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("LOGIN ATTEMPT: " + str(_playerID) + " " + _playerName);
|
|
#endif
|
|
|
|
_endMission = false;
|
|
_timeleft = 0;
|
|
{
|
|
//if ((_playerID select _i) in activePlayers) exitWith { diag_log ("Login cancelled, player has logged out within the past 2 mins. " + str(_playerObj)); };
|
|
_0 = _x select 0;
|
|
_1 = _x select 1;
|
|
_timeleft = diag_ticktime - _1;
|
|
|
|
if (_playerID == _0) then {
|
|
//If players last logoff is about the ghost timer remove player from ghost que.
|
|
if ((_timeleft > dayz_ghostTimer) or (_timeleft < 0)) then {
|
|
dayz_ghostPlayers = dayz_ghostPlayers - [_0];
|
|
dayz_activePlayers set[_forEachIndex, _0];
|
|
dayz_activePlayers = dayz_activePlayers - [_0];
|
|
} else {
|
|
//if player is in died allow them passage.
|
|
if (_playerID in dayz_died) then {
|
|
dayz_died = dayz_died - [_playerID];
|
|
dayz_ghostPlayers = dayz_ghostPlayers - [_0];
|
|
dayz_activePlayers set[_forEachIndex, _0];
|
|
dayz_activePlayers = dayz_activePlayers - [_0];
|
|
} else {
|
|
// Logoff time is not beyond ghost time and player didn't die
|
|
_endMission = true;
|
|
};
|
|
};
|
|
};
|
|
}forEach dayz_activePlayers;
|
|
|
|
//Do Connection Attempt
|
|
_doLoop = 0;
|
|
while {_doLoop < 5} do {
|
|
_key = format["CHILD:101:%1:%2:%3:",_playerID,dayZ_instance,_playerName];
|
|
_primary = _key call server_hiveReadWrite;
|
|
if (count _primary > 0) then {
|
|
if ((_primary select 0) != "ERROR") then {
|
|
_doLoop = 9;
|
|
};
|
|
};
|
|
_doLoop = _doLoop + 1;
|
|
};
|
|
|
|
if (isNull _playerObj || !isPlayer _playerObj) exitWith {
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("LOGIN RESULT: Exiting, player object null: " + str(_playerObj));
|
|
#endif
|
|
};
|
|
|
|
if ((_primary select 0) == "ERROR") exitWith {
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log format ["LOGIN RESULT: Exiting, failed to load _primary: %1 for player: %2 ",_primary,_playerID];
|
|
#endif
|
|
};
|
|
|
|
//Process request
|
|
_newPlayer = _primary select 1;
|
|
_isNew = count _primary < 7; //_result select 1;
|
|
_charID = _primary select 2;
|
|
_randomSpot = false;
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("LOGIN RESULT: " + str(_primary));
|
|
#endif
|
|
|
|
/* PROCESS */
|
|
_hiveVer = 0;
|
|
|
|
if (!_isNew) then {
|
|
//RETURNING CHARACTER
|
|
_inventory = _primary select 4;
|
|
_backpack = _primary select 5;
|
|
_survival = _primary select 6;
|
|
_model = _primary select 7;
|
|
_hiveVer = _primary select 8;
|
|
|
|
if (!(_model in AllPlayers)) then {
|
|
_model = "Survivor2_DZ";
|
|
};
|
|
|
|
} else {
|
|
if (DZE_PlayerZed) then {
|
|
_isInfected = _primary select 3;
|
|
} else {
|
|
_isInfected = 0;
|
|
};
|
|
_model = _primary select 4;
|
|
_hiveVer = _primary select 5;
|
|
|
|
if (isNil "_model") then {
|
|
_model = "Survivor2_DZ";
|
|
} else {
|
|
if (_model == "") then {
|
|
_model = "Survivor2_DZ";
|
|
};
|
|
};
|
|
|
|
|
|
//Record initial inventory only if not player zombie
|
|
if(_isInfected != 1) then {
|
|
_config = (configFile >> "CfgSurvival" >> "Inventory" >> "Default");
|
|
_mags = getArray (_config >> "magazines");
|
|
_wpns = getArray (_config >> "weapons");
|
|
_bcpk = getText (_config >> "backpack");
|
|
_randomSpot = true;
|
|
if(!isNil "DefaultMagazines") then {
|
|
_mags = DefaultMagazines;
|
|
};
|
|
if(!isNil "DefaultWeapons") then {
|
|
_wpns = DefaultWeapons;
|
|
};
|
|
if(!isNil "DefaultBackpack") then {
|
|
_bcpk = DefaultBackpack;
|
|
};
|
|
//_randomSpot = true;
|
|
|
|
//Wait for HIVE to be free
|
|
_key = format["CHILD:203:%1:%2:%3:",_charID,[_wpns,_mags],[_bcpk,[],[]]];
|
|
_key call server_hiveWrite;
|
|
};
|
|
};
|
|
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log ("LOGIN LOADED: " + str(_playerObj) + " Type: " + (typeOf _playerObj) + " at location: " + (getPosATL _playerObj));
|
|
#endif
|
|
|
|
_isHiveOk = false;
|
|
if (_hiveVer >= dayz_hiveVersionNo) then {
|
|
_isHiveOk = true;
|
|
};
|
|
|
|
if (worldName == "chernarus") then {
|
|
([4654,9595,0] nearestObject 145259) setDamage 1;
|
|
([4654,9595,0] nearestObject 145260) setDamage 1;
|
|
};
|
|
|
|
PVCDZ_plr_Login = [_charID,_inventory,_backpack,_survival,_isNew,dayz_versionNo,_model,_isHiveOk,_newPlayer,_isInfected];
|
|
#ifdef DZE_SERVER_DEBUG
|
|
diag_log format["%1, %2, %3, %4, %5, %6, %7, %8, %9, %10",_charID,_inventory,_backpack,_survival,_isNew,dayz_versionNo,_model,_isHiveOk,_newPlayer,_isInfected];
|
|
#endif
|
|
|
|
(owner _playerObj) publicVariableClient "PVCDZ_plr_Login";
|
|
|
|
//Make player wait till ghost timer is up.
|
|
if (_endMission) exitwith {
|
|
_remaining = dayz_ghostTimer - _timeleft;
|
|
diag_log format["LOGIN CANCELLED: player: %1 is in ghost mode. Time remianing: %2 before login!!",_playerObj,_remaining];
|
|
PVCDZ_plr_Ghost = [_remaining];
|
|
(owner _playerObj) publicVariableClient "PVCDZ_plr_Ghost";
|
|
};
|
|
|
|
[_playerID,_charID,1] call dayz_recordLogin;
|
|
|
|
PVCDZ_plr_PlayerAccepted = [_playerName,diag_ticktime];
|
|
(owner _playerObj) publicVariableClient "PVCDZ_plr_PlayerAccepted"; |