mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
Community Stats System #1
Fully customizable system. Base system laid out more so as an example. Included: -Murders -Deaths -Suicides -Revives -AIKills -AntagonistKills -ZombieKills -MissionsAttempted -CompletedMissions Client side stat change with optional send to server. Server side stat change with optional send to client. Server is backed up with token check if sent from client.
This commit is contained in:
parent
4cdc67cf9d
commit
43958142b8
@ -1,4 +1,4 @@
|
||||
/*%FSM<COMPILE "F:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, Epoch Login">*/
|
||||
/*%FSM<COMPILE "C:\Program Files (x86)\Steam\steamapps\common\Arma 3 Tools\FSMEditor\scriptedFSM.cfg, Epoch Login">*/
|
||||
/*%FSM<HEAD>*/
|
||||
/*
|
||||
item0[] = {"INIT",0,250,-25.000000,-375.000000,75.000000,-325.000000,0.000000,"INIT"};
|
||||
@ -18,7 +18,7 @@ item13[] = {"ERROR_PlayerUID",2,250,275.000000,125.000000,375.000000,175.000000,
|
||||
item14[] = {"",7,210,471.000061,145.999908,478.999939,154.000092,0.000000,""};
|
||||
item15[] = {"Timeout_No_Respo",4,218,125.000000,875.000000,225.000000,925.000000,0.000000,"Timeout" \n "No Response"};
|
||||
item16[] = {"Response",4,218,-150.000000,825.000000,-50.000000,875.000000,0.000000,"Response"};
|
||||
item17[] = {"Setup_Player_Var",2,250,-25.000000,1075.000000,75.000000,1125.000000,0.000000,"Setup Player" \n "Variables"};
|
||||
item17[] = {"Setup_Player_Var",2,4346,-25.000000,1075.000000,75.000000,1125.000000,0.000000,"Setup Player" \n "Variables"};
|
||||
item18[] = {"Request_Hive",2,250,-25.000000,575.000000,75.000000,625.000000,0.000000,"Request Hive"};
|
||||
item19[] = {"Timeout_No_Respo",4,218,125.000000,575.000000,225.000000,625.000000,0.000000,"Timeout" \n "No Response"};
|
||||
item20[] = {"ERROR_Server_not",2,250,275.000000,875.000000,375.000000,925.000000,0.000000,"ERROR" \n "Server not" \n "Response"};
|
||||
@ -62,7 +62,7 @@ item57[] = {"Select_Weapon",2,250,150.000000,1300.000000,250.000000,1350.000000,
|
||||
item58[] = {"true",8,218,225.000000,1375.000000,325.000000,1425.000000,0.000000,"true"};
|
||||
item59[] = {"Do_nothing",2,250,300.000000,1300.000000,400.000000,1350.000000,0.000000,"Do nothing"};
|
||||
item60[] = {"Check_New_Player",2,250,-25.000000,875.000000,75.000000,925.000000,0.000000,"Check" \n "New Player" \n "Setup"};
|
||||
item61[] = {"check_new__player",4,4314,-150.000000,925.000000,-50.000000,975.000000,0.000000,"check new " \n "player not null"};
|
||||
item61[] = {"check_new__player",4,218,-150.000000,925.000000,-50.000000,975.000000,0.000000,"check new " \n "player not null"};
|
||||
item62[] = {"true",4,218,-150.000000,-325.000000,-60.000000,-275.000000,0.000000,"true"};
|
||||
item63[] = {"Process_1",2,250,-25.000000,-275.000000,75.000000,-225.000000,0.000000,"Process"};
|
||||
item64[] = {"Wait_ArmA_Loading",4,218,-150.000000,-225.000000,-50.000000,-175.000000,0.000000,"Wait ArmA" \n "Loading Screen" \n "Done"};
|
||||
@ -183,8 +183,8 @@ link93[] = {82,76};
|
||||
link94[] = {83,16};
|
||||
link95[] = {83,22};
|
||||
link96[] = {84,31};
|
||||
globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-423.640717,1096.514160,1778.978027,253.646729,577,604,1};
|
||||
window[] = {2,-1,-1,-1,-1,767,105,1089,0,3,595};
|
||||
globals[] = {0.000000,0,0,0,0,640,480,1,247,6316128,1,-374.618774,303.072205,1651.411377,653.207275,573,844,1};
|
||||
window[] = {2,-1,-1,-1,-1,863,96,1080,96,3,595};
|
||||
*//*%FSM</HEAD>*/
|
||||
class FSM
|
||||
{
|
||||
@ -462,10 +462,13 @@ class FSM
|
||||
"{" \n
|
||||
" missionNamespace setVariable[(format[""EPOCH_player%1"", EPOCH_customVars select _forEachIndex]), _x];" \n
|
||||
"} forEach _playerVariables;" \n
|
||||
"""Loading Player Variables... Please wait!"" call Epoch_updateLoadingScreen;" \n
|
||||
"{" \n
|
||||
" missionNamespace setVariable[(format[""EPOCH_total%1"", EPOCH_communityStats select _forEachIndex]), _x];" \n
|
||||
"} forEach _communityStats;" \n
|
||||
"""Loading Player Variables and Community Stats... Please wait!"" call Epoch_updateLoadingScreen;" \n
|
||||
"progressLoadingScreen 0.7;" \n
|
||||
"if (_debug) then {" \n
|
||||
" diag_log ""EPOCH-LOGIN: Setup Player Variables"";" \n
|
||||
" diag_log ""EPOCH-LOGIN: Setup Player Variables and Community Stats"";" \n
|
||||
"};"/*%FSM</STATEINIT""">*/;
|
||||
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
|
||||
class Links
|
||||
@ -1396,6 +1399,7 @@ class FSM
|
||||
"Epoch_canBeRevived = _C_SET deleteAt 0;" \n
|
||||
"Epoch_personalToken = _C_SET deleteAt 0;" \n
|
||||
"Epoch_my_Group = _C_SET deleteAt 0;" \n
|
||||
"_communityStats = _C_SET deleteAt 0;" \n
|
||||
"" \n
|
||||
"_extraPayload = _C_SET deleteAt 0;" \n
|
||||
"" \n
|
||||
|
@ -57,6 +57,7 @@ switch _unitClass do {
|
||||
_units pushBack _unit;
|
||||
_unit call _disableAI;
|
||||
[_unit,_trgt] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm";
|
||||
_unit addEventHandler ["Killed", {["AntagonistKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
case "GreatWhite_F": {
|
||||
@ -67,6 +68,7 @@ switch _unitClass do {
|
||||
_units pushBack _unit;
|
||||
_unit call _disableAI;
|
||||
[_unit] execFSM "\x\addons\a3_epoch_code\System\Shark_Brain.fsm";
|
||||
_unit addEventHandler ["Killed", {["AntagonistKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -90,6 +92,7 @@ switch _unitClass do {
|
||||
_unit setVariable ["sapperHndl",_sapperHndl];
|
||||
_unit addEventHandler ["FiredNear", format ["%1 setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];",_sapperHndl]];
|
||||
_unit addEventHandler ["Hit", format ["%1 setFSMVariable [""_sHit"",[_this select 1, _this select 2]];",_sapperHndl]];
|
||||
_unit addEventHandler ["Killed", {["AntagonistKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
};
|
||||
@ -104,6 +107,7 @@ switch _unitClass do {
|
||||
_unit setVariable ["sapperHndl",_sapperHndl];
|
||||
_unit addEventHandler ["FiredNear", format ["%1 setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];",_sapperHndl]];
|
||||
_unit addEventHandler ["Hit", format ["%1 setFSMVariable [""_sHit"",[_this select 1, _this select 2]];",_sapperHndl]];
|
||||
_unit addEventHandler ["Killed", {["AntagonistKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
case "Epoch_SapperB_F": {
|
||||
@ -117,6 +121,7 @@ switch _unitClass do {
|
||||
_unit setVariable ["sapperHndl",_sapperHndl];
|
||||
_unit addEventHandler ["FiredNear", format ["%1 setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];",_sapperHndl]];
|
||||
_unit addEventHandler ["Hit", format ["%1 setFSMVariable [""_sHit"",[_this select 1, _this select 2]];",_sapperHndl]];
|
||||
_unit addEventHandler ["Killed", {["AntagonistKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
case "I_UAV_01_F": {
|
||||
@ -132,6 +137,7 @@ switch _unitClass do {
|
||||
_driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"];
|
||||
_driver moveInAny _unit;
|
||||
[_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm";
|
||||
_unit addEventHandler ["Killed", {["AIKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
case "PHANTOM": {
|
||||
@ -145,6 +151,7 @@ switch _unitClass do {
|
||||
{
|
||||
_unit = [] call EPOCH_zombieSpawn;
|
||||
_units pushBack _unit;
|
||||
_unit addEventHandler ["Killed", {["ZombieKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
};
|
||||
};
|
||||
case "I_Soldier_EPOCH": {
|
||||
@ -180,6 +187,7 @@ switch _unitClass do {
|
||||
_unit enableAI "MOVE";
|
||||
_unit enableAI "ANIM";
|
||||
_unit disableAI "FSM";
|
||||
_unit addEventHandler ["Killed", {["AIKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
// randomize skill
|
||||
for "_i" from 0 to ((count _arrSkills)-1) do {
|
||||
_aiskill = floor random (_arrVals select _i);
|
||||
|
@ -47,5 +47,6 @@ removegoggles _unit;
|
||||
_zedHandle = [_unit,true] execFSM "epoch_code\system\EPOCH_zombie_brain.fsm";
|
||||
_unit addEventHandler ["FiredNear", "(_this select 0) setVariable [""zFiredNear"",[_this select 1, _this select 2]];"];
|
||||
_unit addEventHandler ["Hit", "(_this select 0) setVariable [""zHit"",[_this select 1, _this select 2]];"];
|
||||
_unit addEventHandler ["Killed", {["ZombieKills",1,true] call EPOCH_client_updatePlayerStat;}];
|
||||
|
||||
_unit
|
||||
|
@ -0,0 +1,49 @@
|
||||
/*
|
||||
|
||||
Author: DirtySanchez - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Update player community stat
|
||||
Can function as inbound stat adjustment from server side change
|
||||
Can also function as client side adjustment and send to server for saving
|
||||
|
||||
Licence:
|
||||
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||
|
||||
usage:
|
||||
// This will add +15 to the "ZedKills" index and will also update the server variable
|
||||
["ZedKills",15,true] call EPOCH_client_updatePlayerStat;
|
||||
|
||||
_statType - STRING: the name of the variable as set in the EpochClientConfig defineCommunityStats[] = {};
|
||||
|
||||
_adjust - NUMBER: set the positive or negative adjustment, a value of 0 will exit the script
|
||||
|
||||
_toServer - BOOLEAN: (OPTIONAL): false by default
|
||||
|
||||
*/
|
||||
params [ ["_statType",""], ["_adjust",0], ["_toServer",false] ];
|
||||
|
||||
if(isNull player)exitWith{
|
||||
diag_log "EPOCHDebug: updatePlayerStats -1- player is null object";
|
||||
};
|
||||
if(_statType isEqualTo "")exitWith{
|
||||
diag_log "EPOCHDebug: updatePlayerStats -2- stat type not defined";
|
||||
};
|
||||
if(_adjust isEqualTo 0)exitWith{
|
||||
diag_log "EPOCHDebug: updatePlayerStats -3- stat adjustment is 0";
|
||||
};
|
||||
_playerUID = getplayerUID player;
|
||||
if(_playerUID isEqualTo "")exitWith{
|
||||
diag_log "EPOCHDebug: updatePlayerStats -4- player UID is empty";
|
||||
};
|
||||
|
||||
_statVarName = format["EPOCH_total%1",_statType];
|
||||
_currentStat = missionNameSpace getVariable[_statVarName,0];
|
||||
_newStat = _currentStat + _adjust;
|
||||
missionNameSpace setVariable[_statVarName,_newStat];
|
||||
|
||||
if(_toServer)then{
|
||||
[player, _statType, _adjust, false, Epoch_personalToken] remoteExec ["EPOCH_fnc_updatePlayerStats",2];
|
||||
};
|
@ -72,6 +72,7 @@ if !(isNull _trader) then {
|
||||
EPOCH_mission_startTime = diag_ticktime;
|
||||
EPOCH_ActiveTraderMission = [_inGameTasksconfig,_taskname,_missionname];
|
||||
};
|
||||
["AttemptedMissions",1,true] call EPOCH_client_updatePlayerStat;
|
||||
}
|
||||
else {
|
||||
[format["Mission Not Allowed !",_menuCondition], 5] call Epoch_message; //Not formatting, is this intended?
|
||||
|
@ -225,6 +225,7 @@ if !(EPOCH_ActiveTraderMission isequalto []) then {
|
||||
_LastMissionTrigger = 0;
|
||||
};
|
||||
if (call _taskCompleteCond) exitwith {
|
||||
["CompletedMissions",1,true] call EPOCH_client_updatePlayerStat;
|
||||
if (count _taskCompleteDiags > 0) then {
|
||||
_diag = selectrandom _taskCompleteDiags;
|
||||
[format ["%1",_diag], 5] call Epoch_message;
|
||||
|
@ -13,7 +13,7 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_code/init/both_init.sqf
|
||||
*/
|
||||
//[[[cog import generate_private_arrays ]]]
|
||||
private ["_antagonistSpawnDefaults","_customVarsInit","_say3dsounds","_say3dsoundsConfig","_spawnLimits"];
|
||||
private ["_antagonistSpawnDefaults","_customVarsInit","_say3dsounds","_say3dsoundsConfig","_spawnLimits","_communityStatsInit"];
|
||||
//[[[end]]]
|
||||
|
||||
// detect if Ryan's Zombies and Deamons mod is present
|
||||
@ -77,6 +77,18 @@ _customVarsInit = ["CfgEpochClient", "customVarsDefaults", EPOCH_customVarsDefau
|
||||
} forEach _customVarsInit;
|
||||
EPOCH_customVarCount = count EPOCH_customVars;
|
||||
|
||||
// Init Community Stats
|
||||
EPOCH_communityStats = [];
|
||||
EPOCH_defaultStatVars = [];
|
||||
_communityStatsInit = ["CfgEpochClient", "defineCommunityStats", []] call EPOCH_fnc_returnConfigEntryV2;
|
||||
EPOCH_communityStatsDefaults = _communityStatsInit;
|
||||
{
|
||||
EPOCH_communityStats pushBack (_x select 0);
|
||||
EPOCH_defaultStatVars pushBack (_x select 1);
|
||||
} forEach _communityStatsInit;
|
||||
EPOCH_communityStatsCount = count EPOCH_communityStats;
|
||||
|
||||
|
||||
// Init antagonist spawn limits
|
||||
EPOCH_spawnIndex = [];
|
||||
EPOCH_spawnLimits = [];
|
||||
|
@ -136,6 +136,7 @@ class CfgClientFunctions
|
||||
class giveAttributes {};
|
||||
class fnc_spawnEffects {};
|
||||
class fnc_arrayStringToBool {};
|
||||
class client_updatePlayerStat {};
|
||||
};
|
||||
class environment
|
||||
{
|
||||
|
@ -57,6 +57,8 @@ class CfgEpochClient
|
||||
ryanZombiesEnabled = "true";
|
||||
antagonistSpawnIndex[] = {{"Epoch_Cloak_F",1},{"GreatWhite_F",2},{"Epoch_Sapper_F",2},{"Epoch_SapperG_F",1},{"Epoch_SapperB_F",1},{"I_UAV_01_F",2},{"PHANTOM",1},{"B_Heli_Transport_01_F",1},{"EPOCH_RyanZombie_1",12},{"I_Soldier_EPOCH",1}}; // {"type", limit}
|
||||
customVarsDefaults[] = {{"Temp",98.6,{106.7,95,102,105,96,95}},{"Hunger",1500,{5000,0,5001,5001,1250,0}},{"Thirst",750,{2500,0,2501,2501,625,0}},{"AliveTime",0,{-2,0}},{"Energy",0,{2500,0}},{"Wet",0,{100,0,35,55,-1,-1}},{"Soiled",0,{100,0,35,55,-1,-1}},{"Immunity",0,{100,0}},{"Toxicity",0,{100,0,35,55,-1,-1}},{"Stamina",100,{"EPOCH_playerStaminaMax",0}},{"Crypto",0,{250000,0}},{"HitPoints",{0,0,0,0},{1,0,0.5,1,-1,-1}},{"BloodP",100,{190,0,120,140,70,50}},{"SpawnArray",{},{}},{"Karma",0,{50000,-50000}},{"Alcohol",0,{100,0,35,55,-1,-1}},{"Radiation",0,{100,0,35,55,-1,-1}},{"Nuisance",0,{100,0}},{"MissionArray",{},{}}}; // EPOCH_player + varName, default value, {max,min,high-warn,high-critical,low-warn,low-critical}
|
||||
// add any stats and their starting number here for better community integration and neat stats tracking too!
|
||||
defineCommunityStats[] = {{"Murders",0},{"Deaths",0},{"Suicides",0},{"Revives",0},{"AttemptedMissions",0},{"CompletedMissions",0},{"AIKills",0},{"AntagonistKills",0},{"ZombieKills",0}};
|
||||
hudConfigs[] = {{{"BloodP","","",{"getPlayerDamage",">=",0.7}},"topRight","x\addons\a3_epoch_code\Data\UI\bleeding_ca.paa",{"forceUpdate"}},{{"Oxygen","getPlayerOxygenRemaining","",{},{1,0,2,2,1,0.55}},"topRight","x\addons\a3_epoch_code\Data\UI\oxygen_ca.paa"},{"Hunger","topRight","x\addons\a3_epoch_code\Data\UI\hunger_ca.paa",{"forceBloodRise"}},{"Thirst","topRight","x\addons\a3_epoch_code\Data\UI\thirst_ca.paa",{"forceBloodRise"}},{"Temp","topRight",{"x\addons\a3_epoch_code\Data\UI\hot_ca.paa","x\addons\a3_epoch_code\Data\UI\cold_ca.paa"},{"forceFatigue"}},{"Toxicity","topRight","x\addons\a3_epoch_code\Data\UI\hazzard_ca.paa"},{"Alcohol","topRight","x\addons\a3_epoch_code\Data\UI\drunk_ca.paa"},{"Soiled","topRight","x\addons\a3_epoch_code\Data\UI\soiled_ca.paa"},{"Radiation","topRight","x\addons\a3_epoch_code\Data\UI\rads_ca.paa"},{{"HitPoints","getPlayerHitPointDamage","HitLegs"},"topRight","x\addons\a3_epoch_code\Data\UI\broken_ca.paa"}};
|
||||
group_upgrade_lvl[] = {4,"1000",6,"1500",8,"2000",10,"2500",12,"3000",14,"3500",16,"4000",32,"8000",64,"16000"}; // controls max group limit and cost
|
||||
// Event handler code
|
||||
|
@ -305,6 +305,16 @@ class CfgRemoteExec
|
||||
{
|
||||
allowedTargets = 2;
|
||||
jip = 0;
|
||||
};
|
||||
class EPOCH_fnc_updatePlayerStats
|
||||
{
|
||||
allowedTargets = 2;
|
||||
jip = 0;
|
||||
};
|
||||
class EPOCH_client_updatePlayerStat
|
||||
{
|
||||
allowedTargets = 1;
|
||||
jip = 0;
|
||||
};
|
||||
};
|
||||
class Commands
|
||||
|
@ -14,5 +14,5 @@
|
||||
*/
|
||||
params ["_player","",["_token","",[""]]];
|
||||
if([_player,_token] call EPOCH_server_getPToken)then{
|
||||
_this call EPOCH_server_savePlayer
|
||||
}
|
||||
_this call EPOCH_server_savePlayer;
|
||||
};
|
||||
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
Author: DirtySanchez - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Save player with token check for use with RemoteExec
|
||||
|
||||
Licence:
|
||||
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||
|
||||
Github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_fnc_updatePlayerStats.sqf
|
||||
*/
|
||||
params ["_player","","","",["_token","",[""]]];
|
||||
if([_player,_token] call EPOCH_server_getPToken)then{
|
||||
_this call EPOCH_server_updatePlayerStats;
|
||||
};
|
@ -13,7 +13,7 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_checkPlayer.sqf
|
||||
*/
|
||||
//[[[cog import generate_private_arrays ]]]
|
||||
private ["_apperance","_arr","_class","_dead","_deadPlayer","_hitpoints","_isMale","_medical","_playerUID","_response","_vars"];
|
||||
private ["_apperance","_arr","_class","_dead","_deadPlayer","_hitpoints","_isMale","_medical","_playerUID","_response","_vars","_communityStatsArray"];
|
||||
//[[[end]]]
|
||||
params [["_playerObj",objNull]];
|
||||
if (_playerObj isEqualType objNull) then {
|
||||
@ -50,6 +50,13 @@ if (_playerObj isEqualType objNull) then {
|
||||
_dead = true;
|
||||
};
|
||||
};
|
||||
|
||||
// check status of community stats to prevent load / save issues
|
||||
_communityStatsArray = ["CommunityStats", _playerUID] call EPOCH_fnc_server_hiveGETRANGE;
|
||||
if((_communityStatsArray select 1) isEqualTo []) then{
|
||||
_return = ["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [EPOCH_defaultStatVars]] call EPOCH_fnc_server_hiveSETEX;
|
||||
};
|
||||
|
||||
/* true => New Char
|
||||
false => load old Char */
|
||||
['_checkPlayer_PVC', _dead] remoteExec ['EPOCH_playerLoginInit',_playerObj];
|
||||
|
@ -13,7 +13,7 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_deadPlayer.sqf
|
||||
*/
|
||||
//[[[cog import generate_private_arrays ]]]
|
||||
private ["_bankBalance","_bankData","_cIndex","_current_crypto","_defaultVars","_playerName","_playerUID","_pos","_response","_triggerType","_vars"];
|
||||
private ["_bankBalance","_bankData","_cIndex","_current_crypto","_defaultVars","_playerName","_playerUID","_pos","_response","_triggerType","_vars","_killerUID","_deathType","_killerCommunityStats","_mIndex","_current_murders","_communityStats","_sIndex","_current_suicides","_dIndex","_current_deaths"];
|
||||
//[[[end]]]
|
||||
params ["_playerObj","_killer","_playerName",["_token","",[""]] ];
|
||||
|
||||
@ -21,7 +21,9 @@ params ["_playerObj","_killer","_playerName",["_token","",[""]] ];
|
||||
if !([_playerObj, _token] call EPOCH_server_getPToken) exitWith{};
|
||||
|
||||
_playerUID = getPlayerUID _playerObj;
|
||||
_killerUID = getPlayerUID _killer;
|
||||
_pos = getposATL _playerObj;
|
||||
_deathType = 666;
|
||||
|
||||
if (_playerObj != _killer) then {
|
||||
if (random 1 <= EPOCH_antagonistChancePDeath) then {
|
||||
@ -37,9 +39,22 @@ if (_playerObj != _killer) then {
|
||||
_playerName = toString (_playerName);
|
||||
};
|
||||
|
||||
['deathlog', format['%1 (%2) Killed By %3 (%4) with weapon %5 from %6m at %7', _playerName, _playerUID, name _killer, getPlayerUID _killer, currentWeapon _killer, _playerObj distance _killer, _pos]] call EPOCH_fnc_server_hiveLog;
|
||||
['deathlog', format['%1 (%2) Killed By %3 (%4) with weapon %5 from %6m at %7', _playerName, _playerUID, name _killer, _killerUID, currentWeapon _killer, _playerObj distance _killer, _pos]] call EPOCH_fnc_server_hiveLog;
|
||||
|
||||
if!(_killerUID isEqualTo "")then{
|
||||
[_killer, "Murders", 1, true] call EPOCH_server_updatePlayerStats;
|
||||
};
|
||||
_deathType = 1;
|
||||
};
|
||||
|
||||
switch(_deathType)do{
|
||||
case 666: {
|
||||
[_playerObj, "Suicides", 1] call EPOCH_server_updatePlayerStats;
|
||||
};
|
||||
case 1: {
|
||||
[_playerObj, "Deaths", 1] call EPOCH_server_updatePlayerStats;
|
||||
};
|
||||
};
|
||||
_defaultVars = call EPOCH_defaultVars_SEPXVar;
|
||||
// get vars array and current Crypto value
|
||||
_cIndex = EPOCH_customVars find "Crypto";
|
||||
|
@ -13,7 +13,7 @@
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_loadPlayer.sqf
|
||||
*/
|
||||
//[[[cog import generate_private_arrays ]]]
|
||||
private ["_CheckLocation","_allGroupMembers","_alreadyDead","_attachments","_backpack","_canBeRevived","_class","_currWeap","_deadPlayer","_defaultData","_dir","_equipped","_found","_goggles","_group","_headgear","_hitpoints","_instanceID","_itemsInContainers","_jammer","_jammers","_linkedItems","_location","_newLocation","_newPlyr","_normalMagazines","_playerData","_playerGroup","_playerGroupArray","_playerNetID","_playerUID","_reject","_serverSettingsConfig","_type","_uniform","_vars","_vest","_wMags","_wMagsArray","_weapon","_weaponsAndItems","_weaponsInContainers"];
|
||||
private ["_CheckLocation","_allGroupMembers","_alreadyDead","_attachments","_backpack","_canBeRevived","_class","_currWeap","_deadPlayer","_defaultData","_dir","_equipped","_found","_goggles","_group","_headgear","_hitpoints","_instanceID","_itemsInContainers","_jammer","_jammers","_linkedItems","_location","_newLocation","_newPlyr","_normalMagazines","_playerData","_playerGroup","_playerGroupArray","_playerNetID","_playerUID","_reject","_serverSettingsConfig","_type","_uniform","_vars","_vest","_wMags","_wMagsArray","_weapon","_weaponsAndItems","_weaponsInContainers","_communityStatsArray","_communityStats"];
|
||||
//[[[end]]]
|
||||
_reject = true;
|
||||
|
||||
@ -306,7 +306,12 @@ if (!isNull _player) then {
|
||||
_newPlyr setVariable["REVIVE", _canBeRevived];
|
||||
};
|
||||
|
||||
[_playerNetID, _playerUID, [_newPlyr, _vars, _currWeap, loadAbs _newPlyr, _playerGroup, _canBeRevived, _newPlyr call EPOCH_server_setPToken,_playerGroupArray]] call EPOCH_server_pushPlayer;
|
||||
// load community stats
|
||||
_communityStatsArray = ["CommunityStats", _playerUID] call EPOCH_fnc_server_hiveGETRANGE;
|
||||
_communityStats = ((_communityStatsArray select 1) select 0);
|
||||
_newPlyr setVariable["COMMUNITY_STATS", _communityStats];
|
||||
|
||||
[_playerNetID, _playerUID, [_newPlyr, _vars, _currWeap, loadAbs _newPlyr, _playerGroup, _canBeRevived, _newPlyr call EPOCH_server_setPToken,_playerGroupArray, _communityStats]] call EPOCH_server_pushPlayer;
|
||||
//diag_log format["DEBUG (Load Player) Sent Group: %1 %2", _playerGroup, _playerGroupArray];
|
||||
|
||||
_newPlyr setVariable["SETUP", true, true];
|
||||
|
@ -247,6 +247,9 @@ if (!local _player) then {
|
||||
|
||||
// send to player
|
||||
[_newPlyr, _token, loadAbs _newPlyr] remoteExec ['EPOCH_clientRevive',_player];
|
||||
|
||||
// send stat to reviver
|
||||
[_reviver, "Revives", 1, true] call EPOCH_server_updatePlayerStats;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
@ -12,7 +12,7 @@
|
||||
Github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/release/Sources/epoch_server/compile/epoch_player/EPOCH_server_savePlayer.sqf
|
||||
*/
|
||||
private["_return", "_pos", "_medical", "_playerUID", "_weapons", "_itemsplayer", "_weaponsplayer", "_appearance", "_dmg", "_allowSave", "_cIndex", "_Svars", "_current_crypto", "_group", "_revive", "_vehiclePlyr","_server_vars"];
|
||||
private["_return", "_return2", "_pos", "_medical", "_playerUID", "_weapons", "_itemsplayer", "_weaponsplayer", "_appearance", "_dmg", "_allowSave", "_cIndex", "_Svars", "_current_crypto", "_group", "_revive", "_vehiclePlyr","_server_vars","_stats"];
|
||||
params [["_player",objNull], ["_vars",[]]];
|
||||
|
||||
if (isNull _player) exitWith {
|
||||
@ -88,6 +88,10 @@ if (_allowSave) then{
|
||||
// save player
|
||||
_return = ["Player", _playerUID, EPOCH_expiresPlayer, [[getDir _player, _pos, (call EPOCH_fn_InstanceID)], _medical, _appearance, _server_vars, _vars, _weapons, assignedItems _player, magazinesAmmo _player, _itemsplayer, _weaponsplayer, _group, _revive]] call EPOCH_fnc_server_hiveSETEX;
|
||||
|
||||
// save community stats
|
||||
_stats = _player getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars];
|
||||
_return2 = ["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [_stats]] call EPOCH_fnc_server_hiveSETEX;
|
||||
|
||||
// kill player if blood pressure >= 180
|
||||
if (_vars select 12 >= 180) then {
|
||||
_player setDamage 1;
|
||||
|
@ -0,0 +1,64 @@
|
||||
/*
|
||||
|
||||
Author: DirtySanchez - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Save player community stats - default server only update, _this select 3 = true will send stat update to client
|
||||
|
||||
Licence:
|
||||
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||
|
||||
usage:
|
||||
|
||||
example 1:
|
||||
[_playerObj, "AIKills", 1] call Epoch_server_updatePlayerStats;
|
||||
|
||||
usage example
|
||||
[_playerObj, _statType, _adjust, true] call Epoch_server_updatePlayerStats;
|
||||
|
||||
_playerObj - OBJECT: the player object to receive the stat adjust and send to database/player
|
||||
|
||||
_statType - STRING: the name of the variable as set in the EpochClientConfig defineCommunityStats[] = {};
|
||||
|
||||
_adjust - NUMBER: set the positive or negative adjustment, a value of 0 will exit the script
|
||||
|
||||
_toClient - BOOLEAN: (OPTIONAL) by default this script is server side variables/hive changes only.
|
||||
by setting this true the client will receive the stat update.
|
||||
Use true when the stat change originates from the server and not the client.
|
||||
*/
|
||||
params [ ["_playerObj",objNull], ["_statType",""], ["_adjust",0], ["_toClient",false] ];
|
||||
|
||||
if(isNull _playerObj)exitWith{
|
||||
diag_log "EPOCHDebug: playerUpdateStats -1- player is null object";
|
||||
};
|
||||
if(_statType isEqualTo "")exitWith{
|
||||
diag_log "EPOCHDebug: playerUpdateStats -2- stat type not defined";
|
||||
};
|
||||
if(_adjust isEqualTo 0)exitWith{
|
||||
diag_log "EPOCHDebug: playerUpdateStats -3- stat adjustment is 0";
|
||||
};
|
||||
_playerUID = getplayerUID _playerObj;
|
||||
if(_playerUID isEqualTo "")exitWith{
|
||||
diag_log "EPOCHDebug: playerUpdateStats -4- player UID is empty";
|
||||
};
|
||||
|
||||
//get this playerObj stats
|
||||
_playerStats = _playerObj getVariable["COMMUNITY_STATS", EPOCH_defaultStatVars];
|
||||
//get this stats index #
|
||||
_sIndex = EPOCH_communityStats find _statType;
|
||||
//get this stat value
|
||||
_currentStat = _playerStats select _sIndex;
|
||||
//set the new stat value
|
||||
_playerStats set[_sIndex, _currentStat + _adjust];
|
||||
//set the new stats array back onto this playerObj
|
||||
_playerObj setVariable["COMMUNITY_STATS", _playerStats];
|
||||
|
||||
//send to hive
|
||||
["CommunityStats", _playerUID, EPOCH_expiresCommunityStats, [_playerStats]] call EPOCH_fnc_server_hiveSETEX;
|
||||
|
||||
//send to player
|
||||
if(_toClient)then{
|
||||
[_statType,_adjust] remoteExecCall ["EPOCH_client_updatePlayerStat",(owner _playerObj)];
|
||||
};
|
@ -64,6 +64,8 @@ class CfgServerFunctions
|
||||
class server_deadPlayerDetonate{};
|
||||
class server_playerSetVariable{};
|
||||
class server_PayCrypto{};
|
||||
class fnc_updatePlayerStats{};
|
||||
class server_updatePlayerStats{};
|
||||
};
|
||||
class epoch_traders {
|
||||
class server_loadTraders {};
|
||||
|
@ -54,6 +54,7 @@ private _configArray = [
|
||||
["expiresBank", "7776000"],
|
||||
["expiresVehicle", "604800"],
|
||||
["expiresAIdata", "604800"],
|
||||
["expiresCommunityStats", "7776000"],
|
||||
["hiveAdminCmdExec", false],
|
||||
["hiveAdminSavePlayerList", true],
|
||||
["hiveAdminCmdTime", 5],
|
||||
|
Loading…
Reference in New Issue
Block a user