mirror of
https://github.com/EpochModTeam/Epoch.git
synced 2024-08-30 18:22:13 +00:00
sync with experimental with release
This commit is contained in:
commit
c1356ed4b9
@ -55,7 +55,8 @@ Build: 439
|
||||
[Changed] Increased range for vehicle interactions to fix issues with access to larger vehicles. Thanks to Grahame for the report: http://epochmod.com/forum/index.php?/topic/41894-cannot-unlock-large-vehicles/
|
||||
[Changed] Preloading sapper by spawning one on the map at server start.
|
||||
[Changed] Change to github markdown for credits and license.
|
||||
[Fixed] BE kick since 1.58 hotfix.
|
||||
[Fixed] suppress loot spawning at main traders. Thanks to Ghostrider-DbD- for the report. http://epochmod.com/forum/topic/41954-loot-spawning-at-traders/
|
||||
[Fixed] BE kick since 1.58 hotfix. http://epochmod.com/forum/topic/41961-rscdebugconsole_watch-battleye-kick/?do=findComment&comment=275456
|
||||
[Fixed] Use object as input for remoteExec instead of owner. http://epochmod.com/forum/topic/41959-be-carefull-with-remoteexec-and-owner/
|
||||
[Fixed] Attempt fix issues with temporary angle and rotation issues with base building.
|
||||
[Fixed] Check for base kit item is in players inventory before spawning ghost.
|
||||
|
25
Changelogs/0.3.9.0.txt
Normal file
25
Changelogs/0.3.9.0.txt
Normal file
@ -0,0 +1,25 @@
|
||||
[Added] Player option to Morph into a random antagonist (from deathMorphClass) after death. The array 'deathMorphClass' found in CfgEpochClient can be used to specify what antagonists to randomly spawn.
|
||||
[Added] Player option to detonate body after death. Sacrifice yourself by generating a runaway thermal cascade using the nano bots within your body. Nothing left to revive.
|
||||
[Added] Server function to allow remote exec of setVariable on client - Allows client to ask another client to set a local variable, via the server. Server can run same function.
|
||||
[Changed] Sapper groan or detonate can be triggered by setting a variable on the target or sapper.
|
||||
[Changed] Server can be asked by a client / server to trigger an antagonist on another client. Antagonist is then run on target PC, independent from caller of function.
|
||||
[Changed] Epoch Unit Spawn code. Now can be called specifying the target of the antagonist. Antagonist will run on target client PC.
|
||||
[Changed] Sapper defaults tweaked to make them more responsive.
|
||||
[Changed] New Sapper antagonist config options:
|
||||
reflexSpeed - Set the loop pause. Defaults have been lowered to make sapper more responsive.
|
||||
nestChance - A percentage chance, at each sapper spawn, that he will create a nest.
|
||||
hideLevel - (Fear Emotion) Set level at which sapper will go into hiding based on fear of armed players, being shot near etc.
|
||||
chargeLevel - (Anger Emotion) Set level at which sapper will trigger 'charge the player' mode.
|
||||
[Changed] New UAV Support Troops antagonist config options:
|
||||
unitTypes - an array of soldier classes to randomly choose from. Custom weapons to-do, use soldiers with default weapon loadout or handle weapons with custom script.
|
||||
maxUnitNum - Maximum number of units to spawn per UAV.
|
||||
minAISkill - Minimum value for any AI skill.
|
||||
maxAimingAccuracy -> maxGeneral - Set the maximum value for each available AI skill. A random number between minAISkill and the value for each will be set as that skill.
|
||||
[Fixed] Prevent empty group menu display. Thanks to He-Man! for the fix.
|
||||
[Fixed] Group system marked player as "Dead Player" if moderator status was change while player offline. Thanks to He-Man! for the fix.
|
||||
[Fixed] Group system invite and kick from group options not working. Thanks to He-Man for the fixes: http://epochmod.com/forum/topic/41893-group-menu-broken-kick-invite-for-admin-not-possible/#comment-275429
|
||||
[Fixed] Missing texture issues with some base building objects since 0.3.8.
|
||||
[Info] RConPort 2306 added to example-beserver.cfg for changes since A3 1.58.
|
||||
[Info] Removed old .bikey and added new one for 0390.
|
||||
[Info] Requires Arma 3 1.58 or higher.
|
||||
[Info] A big thanks to Isaac, Axeman's chief tester.
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
5 "" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$"
|
||||
5 "" !="[0-9]:[0-9]{1,4}" !" GroundWeaponHolder$" !" WeaponHolderSimulated$" !" Epoch_(Sapper|SapperB|Cloak|Female_CamoRed)_F$" !" (Land_MPS|Bobber|Rabbit)_EPOCH$" !" (Sheep|Goat|Snake|Snake2|Hen|Cock|Fin|Alsatian)_random_EPOCH$" !" (Bed|locker|Filing|Chair|ChairRed|wardrobe|cooker|Couch|Table|Pelican|Fridge|Shelf|ToolRack|Shoebox|Bunk|Cabinet|Freezer|Tarp)_EPOCH$" !" (SapperHead|Jack|SolarGen)_SIM_EPOCH$" !" (Tipi|Workbench|StorageShelf|CinderWallHalf|Foundation|Wood(Floor|LargeWall|Stairs|Ramp|Foundation|Ladder|Tower))_Ghost_EPOCH$" !" Wood(Floor|LargeWall|LargeWallCor|LargeWallDoor|LargeWallDoorL|LargeWallDoorway|Stairs|Stairs2|Ramp|Ladder|Tower)_SIM_EPOCH$" !" (Safe|Workbench|LockBox|CinderWall|CinderWallGarage|CinderWallHalf|PlotPole|Tipi|StorageShelf|Fireplace|TankTrap)_SIM_EPOCH$" !" (Hesco3|Metal|WoodWall[1-4])_(Ghost|SIM)_EPOCH$" !" (Spike|Metal)_TRAP_SIM_EPOCH$" !" (WoodFoundation|Foundation)_Ghost_EPOCH$" !" I_(Soldier[1-3]|Soldier)_EPOCH$" !" I_(helipilot|helicrew)_F$" !" I_UAV_01_F$" !" (I|B|O)_UAV_AI$" !" I_Boat_Armed_01_minigun_F" !" B_Heli_Transport_01_F" !" Land_Cages_F$"
|
||||
|
@ -1 +1 @@
|
||||
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_checkplayer \[[A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3}( \(.+\)|) REMOTE\]" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer) \[.+\]"
|
||||
5 "" !="bis_fnc_execvm \[\[.+\],\"initPlayerServer.sqf\"]" !="bis_fnc_effectkilled(airdestruction|secondaries) \[.+\]" !="epoch_server_checkplayer \[[A-Z]{1} [A-Za-z]{4,10} [0-9]{1,3}-[0-9]{1,3}:[0-9]{1,3}( \(.+\)|) REMOTE\]" !="epoch_server_(save(_vehicles|building)|(lock|pack)Storage|(upgrade|remove|paint|maint)build) \[.+\]" !="epoch_server_((load|respawn|dead|invite|revive|teleport)Player|(upgrade|updateplayer|create|delete)Group) \[.+\]" !="epoch_server_(deadplayerdetonate|triggerantagonist|playersetvariable) \[.+\]" !="epoch_server_(knockDownTree|mineRocks|lootAnimal|handle_(say3d|switchmove|sapperObjs)) \[.+\]" !="epoch_server_((repair|fill|lock)Vehicle|(loot|fill)Container|(store|take)Crypto|make(NPC|)Trade) \[.+\]" !="epoch_server_(tradeRequest|equippeditem|packJack|create(object|AirDrop)|airDropCrate|destroytrash|unpackBackpack) \[.+\]" !="epoch_(localcleanup|fnc_saveplayer) \[.+\]"
|
||||
|
@ -36,7 +36,7 @@
|
||||
7 createUnit !="_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, \"FORM\"];" !="_driver = _grp createUnit[\"I_UAV_AI\", position _unit, [], 0, \"CAN_COLLIDE\"];" !="axeGeneral = grpVIPGeneral createUnit ["I_officer_F", axeGeneralPos, [], 1, "CAN_COLLIDE"];"
|
||||
7 createAgent !="_unit = createAgent[_unitClass, _targetPos, [], 256, \"FORM\"];" !="_unit = createAgent [_unitClass, _targetPos, [], 120, \"FORM\"];" !="_animal = createAgent[_randomAIClass, _animalPos, [], 5, \"NONE\"];" !="_unit = createAgent [\"Epoch_Cloak_F\", _pos, [], 0, \"CAN_COLLIDE\"];" !="_unit = createAgent [\"Epoch_Sapper_F\", _targetPos, [], 180, \"FORM\"];" !="_sapper = createAgent ["Epoch_Sapper_F", getPos _cage2, [], 0, "FORM"];"
|
||||
7 createTeam
|
||||
7 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog \"TapOut\";" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';"
|
||||
7 createDialog !="createDialog \"rmx_dynamenu\";" !="createDialog \"rmx_craftingUI\";" !="createDialog \"QuickUpgrade\";" !="createDialog \"QuickTake\";" !="createDialog \"InteractBank\";" !="createdialog \"SelectGender\";" !="_handled = createdialog _dialog;" !="if !(createdialog \"InteractItem\") exitWith {};" !="createDialog _tapDiag;" !="if !(createdialog \"Trade\") exitWith {};" !="_ok = createdialog \"Interact\";" !="_ok = createdialog \"TradeNPCMenu\";" !="createDialog \"Epoch_myGroup\";" !="createDialog (if ((Epoch_my_GroupUID == \"\") && (Epoch_my_Group isEqualTo [])) then {\"EPOCH_createGrp\"} else {\"Epoch_myGroup\"});" !="createDialog \"GroupRequests\";" !="_ok = createdialog \"MissionSelect\";" !="createDialog 'Skaronator_AdminMenu';"
|
||||
7 createDisplay !="createDisplay \"rmx_dynamenu\";" !="_parent createdisplay _displayClass;"
|
||||
7 deleteMarker
|
||||
7 setMarker !="CBA_fnc_setMarkerPersistent\"" !="\\fnc_setMarkerPersistent" !="\"setMarkerPersistent"
|
||||
@ -55,9 +55,9 @@
|
||||
7 displayRemoveAllEventHandlers !="_display displayRemoveAllEventHandlers _x;" !="if !(isMultiplayer) then { { (findDisplay 46) displayRemoveAllEventHandlers _x } forEach [\"KeyUp\", \"KeyDown\"] };"
|
||||
7 removeAllMissionEventHandlers
|
||||
7 ctrlRemoveAllEventHandlers !="(uiNamespace getVariable 'ESP_map') ctrlRemoveAllEventHandlers 'Draw';" !="ctrlAddEventHandler ['MouseButtonDown'"
|
||||
7 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !"_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler"
|
||||
7 removeEventHandler !="displayRemoveEventHandler" !="player removeEventHandler ['Fired', 0];" !"_currentTarget removeEventHandler[\"EpeContactStart\", _onContactEH]" !" [_adminVar,objnull];\npublicvariable _adminVar;\nplayer removeeventhandler [\"respawn\",_respawn];" !="_plyr removeEventHandler [\"FiredNear\", _smokeEH];" !="player removeEventHandler [_ehKey, 0];" !="player removeEventHandler [_x, 0];" !="\"CBA_fnc_removeEventHandler\"" !="\\fnc_removeEventHandler" !="\"removeEventHandler"
|
||||
7 displayRemoveEventHandler !"BIS_fnc_guiMessage_status" !="(findDisplay 46) displayRemoveEventHandler [_key, _id];"
|
||||
7 switchCamera !="vehicle player switchCamera"
|
||||
7 switchCamera !="vehicle player switchCamera" !="_antagonist switchCamera \"Internal\";"
|
||||
7 remoteControl !"fn_moduleRemoteControl.sqf" !="\"BIS_fnc_moduleRemoteControl"\"
|
||||
7 drawIcon3D !="drawIcon3D[\"\x\addons\a3_epoch_code\Data\Member.paa\",_color,_pos,1,1,0,_text,1,0.025,\"PuristaMedium\"];\n}forEach EPOCH_ESP_TARGETS;" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_stability],_color,(getPosATL EPOCH_stabilityTarget),5,5,0,\"\",1,0.05,\"PuristaMedium\"];" !"drawIcon3D[format[\"\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa\",_num],_color,_pos,4,4,0,\"\",1,0.05,\"PuristaMedium\"];" !"EPOCH_drawIcon3dStability" !"EPOCH_drawIcon3d" !"if (_condition) then {\ndrawIcon3D [_icon, _color, _position, _sizeX, _sizeY, _angle, _text," !="drawIcon3D [\"\A3\UI_F_MP_Mark\Data\Tasks\Misc\background.paa\"" !="drawIcon3D[\"x\addons\a3_epoch_code\Data\UI\snap_ca.paa\""
|
||||
7 drawLine3D !"{\nfor [{_i = 1}, {_i < count _x}, {_i = _i + 1}] do {\ndrawLine3D [_x select (_i - 1), _x select _i, ((BIS_tracedShooter getVari"
|
||||
|
@ -1 +1 @@
|
||||
5 "" !=(Offer|Accept|BUILD_SLOT|TRADE_ACTIVE|last_targeter) !="bis_fnc_objectvar_var" !="bis_fnc_selectrespawntemplate_respawned"
|
||||
5 "" !=(Offer|Accept|BUILD_SLOT|TRADE_ACTIVE|last_targeter|epoch_(antagobj|antagBomb)) !="bis_fnc_objectvar_var" !="bis_fnc_selectrespawntemplate_respawned"
|
||||
|
@ -22,16 +22,29 @@ _grp = createGroup RESISTANCE;
|
||||
_grp setBehaviour "COMBAT";
|
||||
_grp setCombatMode "RED";
|
||||
|
||||
// TODO: make configized
|
||||
_arrUnits = ["I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"];
|
||||
_minAISkill = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "minAISkill");
|
||||
_arrUnits = getArray (getMissionConfig "CfgEpochUAVSupport" >> "unitTypes");
|
||||
_unitCount = getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxUnitNum");
|
||||
_arrSkills = ["aimingAccuracy","aimingShake","aimingSpeed","endurance","spotDistance","spotTime","courage","reloadSpeed","commanding","general"];
|
||||
_arrVals = [
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingAccuracy"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingShake"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxAimingSpeed"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxEndurance"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxSpotDistance"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxSpotTime"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxCourage"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxReloadSpeed"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxCommanding"),
|
||||
getNumber (getMissionConfig "CfgEpochUAVSupport" >> "maxGeneral")
|
||||
];
|
||||
_units = [];
|
||||
for "_i" from 0 to ((count _arrUnits)-1) do {
|
||||
for "_i" from 0 to (_unitCount - 1) do {
|
||||
|
||||
_unit = _grp createUnit[(_arrUnits select _i), _pos, [], 0, "FORM"];
|
||||
_unit = _grp createUnit[selectRandom _arrUnits, _pos, [], 0, "FORM"];
|
||||
_units pushBack _unit;
|
||||
|
||||
_unit setSkill 0.6;
|
||||
//_unit setSkill 0.6;
|
||||
_unit setRank "Private";
|
||||
|
||||
_unit enableAI "TARGET";
|
||||
@ -41,9 +54,9 @@ for "_i" from 0 to ((count _arrUnits)-1) do {
|
||||
_unit disableAI "FSM";
|
||||
|
||||
for "_i" from 0 to ((count _arrSkills)-1) do {
|
||||
_aiskill = ((floor(random 10))+1)/10;
|
||||
if (_aiskill<0.6) then {_aiskill=0.6};
|
||||
_unit setSkill [_arrSkills select _i,_aiskill];
|
||||
_aiskill = floor random (_arrVals select _i);
|
||||
if (_aiskill<_minAISkill) then {_aiskill=_minAISkill};
|
||||
_unit setSkill [_arrSkills select _i,_arrVals select _i];
|
||||
};
|
||||
|
||||
if (_i == 0) then {
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
Contributors: Andrew Gregory
|
||||
|
||||
Description:
|
||||
Antagonist spawn function
|
||||
@ -12,15 +12,19 @@
|
||||
Github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_code/compile/EPOCH_unitSpawn.sqf
|
||||
*/
|
||||
private ["_unit","_sapperNum","_config","_bomb","_targetPos","_grp","_driver","_index","_nonJammer","_nonTrader","_jammers","_jammerRange","_restricted","_disableAI"];
|
||||
params ["_unitClass"];
|
||||
|
||||
private ["_unit","_sapperNum","_config","_targetPos","_grp","_driver","_index","_nonJammer","_nonTrader","_jammers","_jammerRange","_restricted","_disableAI"];
|
||||
params ["_unitClass","_trgt","_doVariable"];
|
||||
private _bomb = objNull;
|
||||
if(isNil "_doVariable")then{_doVariable=false;};
|
||||
if(isNil "_trgt")then{_trgt=player;};
|
||||
diag_log format["Epoch: ADMIN: Antagonist %1 Spawning on %2. Do variable: %3.", _unitClass, _trgt, _doVariable];
|
||||
if(random 100 < 6)then{
|
||||
[] execFSM "\x\addons\a3_epoch_code\System\Event_Air_Drop.fsm";
|
||||
};
|
||||
if(_doVariable)then{_unitClass call EPOCH_unitSpawnIncrease;};//Assumes Antagonist is required.
|
||||
|
||||
_index = EPOCH_spawnIndex find _unitClass;
|
||||
if (count(player nearEntities[_unitClass, 800]) >= (EPOCH_playerSpawnArray select _index)) exitWith{};
|
||||
if (!_doVariable && (count(_trgt nearEntities[_unitClass, 800]) >= (EPOCH_playerSpawnArray select _index))) exitWith{};
|
||||
|
||||
_nonJammer = ["CfgEpochClient", "nonJammerAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F"]] call EPOCH_fnc_returnConfigEntryV2;
|
||||
_nonTrader = ["CfgEpochClient", "nonTraderAI", ["B_Heli_Transport_01_F","PHANTOM","Epoch_Cloak_F","GreatWhite_F"]] call EPOCH_fnc_returnConfigEntryV2;
|
||||
@ -28,18 +32,22 @@ _nonTraderAIRange = ["CfgEpochClient", "nonTraderAIRange", 150] call EPOCH_fnc_r
|
||||
|
||||
_unit = objNull;
|
||||
|
||||
_targetPos = getPosATL player;
|
||||
_targetPos = getPosATL _trgt;
|
||||
_targetPos set [2,0];
|
||||
|
||||
_jammers = [];
|
||||
_config = 'CfgEpochClient' call EPOCH_returnConfig;
|
||||
_jammerRange = getNumber(_config >> "buildingJammerRange");
|
||||
_jammers = nearestObjects[_targetPos, ["PlotPole_EPOCH"], _jammerRange];
|
||||
if(count _jammers > 0 && (_unitClass in _nonJammer))exitWith{};
|
||||
if(count _jammers > 0 && (_unitClass in _nonJammer))exitWith{
|
||||
if(_doVariable)then{["<t size='1.6' color='#99ffffff'>Not allowed near a base - Please respawn !</t>", 5] call Epoch_dynamicText;};
|
||||
};
|
||||
|
||||
_restricted = [];
|
||||
_restricted = nearestObjects [_targetPos, ["ProtectionZone_Invisible_F"], _nonTraderAIRange];
|
||||
if(count _restricted > 0 && (_unitClass in _nonTrader))exitWith{};
|
||||
if(count _restricted > 0 && (_unitClass in _nonTrader))exitWith{
|
||||
if(_doVariable)then{["<t size='1.6' color='#99ffffff'>Not allowed near a trader - Please respawn !</t>", 5] call Epoch_dynamicText;};
|
||||
};
|
||||
|
||||
_disableAI = {
|
||||
{_this disableAI _x}forEach["TARGET","AUTOTARGET","FSM"];
|
||||
@ -49,11 +57,11 @@ switch _unitClass do {
|
||||
case "Epoch_Cloak_F": {
|
||||
_unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
|
||||
_unit call _disableAI;
|
||||
[_unit] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm";
|
||||
[_unit,_trgt] execFSM "\x\addons\a3_epoch_code\System\cloak.fsm";
|
||||
};
|
||||
case "GreatWhite_F": {
|
||||
if (surfaceIsWater _targetPos) then{
|
||||
if (((_targetPos vectorDiff getPosASL player) select 2) > 25) then{
|
||||
if (((_targetPos vectorDiff getPosASL _trgt) select 2) > 25) then{
|
||||
_unit = createAgent[_unitClass, _targetPos, [], 120, "FORM"];
|
||||
_unit call _disableAI;
|
||||
[_unit] execFSM "\x\addons\a3_epoch_code\System\Shark_Brain.fsm";
|
||||
@ -61,19 +69,19 @@ switch _unitClass do {
|
||||
};
|
||||
};
|
||||
case "Epoch_Sapper_F": {
|
||||
if(random 100 < 6)then{
|
||||
if(random 100 < 6 && isNull _trgt)then{
|
||||
_config = 'CfgEpochSapper' call EPOCH_returnConfig;
|
||||
_sapperNum = 8;
|
||||
if(getNumber(_config >> "sapperMigrationCount") > 0)then{
|
||||
_sapperNum = getNumber(_config >> "sapperMigrationCount");
|
||||
};
|
||||
[player,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf";
|
||||
[_trgt,_sapperNum] execVM "epoch_code\compile\EPOCH_callSapperMigration.sqf";
|
||||
}else{
|
||||
_unit = createAgent[_unitClass, _targetPos, [], 256, "FORM"];
|
||||
_bomb = createVehicle ["Sapper_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"];
|
||||
_bomb attachTo [_unit, [0,0,0],"Pelvis"];
|
||||
_unit call _disableAI;
|
||||
sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm";
|
||||
sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain.fsm";
|
||||
_unit addEventHandler ["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"];
|
||||
_unit addEventHandler ["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"];
|
||||
};
|
||||
@ -83,12 +91,12 @@ switch _unitClass do {
|
||||
_bomb = createVehicle["SapperB_Charge_Ammo", _targetPos, [], 0, "CAN_COLLIDE"];
|
||||
_bomb attachTo[_unit, [0, 0, 0], "Pelvis"];
|
||||
_unit call _disableAI;
|
||||
sapperHndl = [_unit, _bomb] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm";
|
||||
sapperHndl = [_unit, _bomb, _trgt] execFSM "\x\addons\a3_epoch_code\System\Sapper_Brain2.fsm";
|
||||
_unit addEventHandler["FiredNear", "sapperHndl setFSMVariable [""_sFiredNear"",[_this select 1, _this select 2]];"];
|
||||
_unit addEventHandler["Hit", "sapperHndl setFSMVariable [""_sHit"",[_this select 1, _this select 2]];"];
|
||||
};
|
||||
case "I_UAV_01_F": {
|
||||
_targetPos = getPosATL player;
|
||||
_targetPos = getPosATL _trgt;
|
||||
_targetPos = [_targetPos, 600, 1200, 5, 0, 400, 0] call BIS_fnc_findSafePos;
|
||||
_targetPos set[2, 600];
|
||||
_unit = createVehicle["I_UAV_01_F", _targetPos, [], 0, "FLY"];
|
||||
@ -97,7 +105,7 @@ switch _unitClass do {
|
||||
_grp = createGroup RESISTANCE;
|
||||
_driver = _grp createUnit["I_UAV_AI", position _unit, [], 0, "CAN_COLLIDE"];
|
||||
_driver moveInAny _unit;
|
||||
[_unit, player] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm";
|
||||
[_unit, _trgt] execFSM "\x\addons\a3_epoch_code\System\Copter_brain.fsm";
|
||||
};
|
||||
case "PHANTOM": {
|
||||
[] execFSM "\x\addons\a3_epoch_code\System\Phantom_Brain.fsm";
|
||||
@ -107,6 +115,12 @@ switch _unitClass do {
|
||||
};
|
||||
};
|
||||
|
||||
if(_doVariable && (!isNull _unit) && (!isNull _trgt))then{
|
||||
_trgt setVariable ["EPOCH_antagObj", _unit, true];
|
||||
if!(isNull _bomb)then{
|
||||
_trgt setVariable ["EPOCH_antagBomb", _bomb, true];
|
||||
};
|
||||
};
|
||||
if !(isNull _unit) then {
|
||||
// send to server
|
||||
[_unit] remoteExec ["EPOCH_localCleanup",2];
|
||||
|
@ -4,7 +4,7 @@
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Epoch cursorTarget anywhere
|
||||
Direction from one object to another plus a degree value to chose a random direction within.
|
||||
|
||||
Licence:
|
||||
Arma Public License Share Alike (APL-SA) - https://www.bistudio.com/community/licenses/arma-public-license-share-alike
|
||||
@ -18,7 +18,7 @@
|
||||
Parameter(s):
|
||||
_this select 0: (ARRAY or OBJECT) - position1
|
||||
_this select 1: (ARRAY or OBJECT) - position2
|
||||
_this select 2: NUMBER - random spread [optional: default 32]
|
||||
_this select 2: NUMBER - random spread [optional: default 32] max 360
|
||||
|
||||
Returns:
|
||||
SCALAR - (direction 0-360)
|
||||
|
@ -0,0 +1,65 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Switch player camera to antagonist. Currently only for use after player death. Return to player body when finished or revived.
|
||||
|
||||
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/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerAttachToAntagonist.sqf
|
||||
|
||||
Example:
|
||||
[_antagonistObj,_plyrObj] call EPOCH_fnc_playerAttachToAntagonist;
|
||||
|
||||
Parameter(s):
|
||||
_this select 0: OBJECT - Antagonist Object
|
||||
_this select 1: OBJECT - Player Object
|
||||
|
||||
Returns:
|
||||
|
||||
*/
|
||||
params ["_player", "_antagonist", "_bomb","_killer"];
|
||||
private _tapDiag = "TapOut";
|
||||
if (visibleMap) then {openMap [false, true];};
|
||||
_antagonist switchCamera "Internal";
|
||||
if(isNil "_bomb")then{_bomb = objNull;};
|
||||
if(typeOf _antagonist == "Epoch_Sapper_F" || typeOf _antagonist == "Epoch_SapperB_F")then{_tapDiag = "TapOut3";};
|
||||
createDialog _tapDiag;
|
||||
|
||||
diag_log format["Epoch: DEBUG: Attaching player %1 to %2, bomb found: %3",_player,_antagonist,_bomb];
|
||||
[_antagonist,_tapDiag,_player,_killer] spawn{
|
||||
_antagonist2 = _this select 0;
|
||||
_tapDiag2 = _this select 1;
|
||||
_player2 = _this select 2;
|
||||
_killer2 = _this select 3;
|
||||
private _doingGroan = false;
|
||||
private _doingBoom = false;
|
||||
private _groanTime = diag_tickTime;
|
||||
while {!alive _player2} do {
|
||||
if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; };
|
||||
if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;};
|
||||
if (isObjectHidden _player2) exitWith {[_player2,Epoch_personalToken,_killer2, "EPOCH_antagObj", objNull, true] remoteExec ["EPOCH_server_playerSetVariable",2];closeDialog 2;};//revivial
|
||||
if((!alive _antagonist2)) exitWith {
|
||||
[_player2,Epoch_personalToken,_killer2, "EPOCH_antagObj", objNull, true] remoteExec ["EPOCH_server_playerSetVariable",2];
|
||||
uiSleep 3;(findDisplay 46) closeDisplay 0;};
|
||||
if(_player2 getVariable["EPOCH_callGroan",false])then{
|
||||
_player2 setVariable["EPOCH_callGroan",false];
|
||||
_doingGroan = true;
|
||||
_groanTime = diag_tickTime;
|
||||
[_player2,Epoch_personalToken,_killer2, "EPOCH_callGroan", true, false] remoteExec ["EPOCH_server_playerSetVariable",2];
|
||||
};
|
||||
if(_player2 getVariable["EPOCH_callBoom",false])then{
|
||||
_player2 setVariable["EPOCH_callBoom",false];
|
||||
_doingBoom = true;
|
||||
[_player2,Epoch_personalToken,_killer2, "EPOCH_callBoom", true, false] remoteExec ["EPOCH_server_playerSetVariable",2];
|
||||
};
|
||||
if(_doingGroan && ctrlEnabled 1602)then{ctrlEnable[1602,false];};
|
||||
if(_doingGroan && !(ctrlEnabled 1602) && diag_tickTime - _groanTime > 16)then{ctrlEnable[1602,true];_doingGroan=false;};
|
||||
if(_doingBoom && ctrlEnabled 1601)then{ctrlEnable[1601,false];};
|
||||
uiSleep 0.1;
|
||||
};
|
||||
};
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
Contributors: Andrew Gregory
|
||||
|
||||
Description:
|
||||
Player death handler
|
||||
@ -22,6 +22,8 @@
|
||||
Returns:
|
||||
BOOL
|
||||
*/
|
||||
private _tapDiag = "TapOut";
|
||||
private _doRevenge = false;
|
||||
params ["_unit", "_killer"];
|
||||
|
||||
// test ejecting unit from vehicle if dead client side
|
||||
@ -36,21 +38,26 @@ EPOCH_buildMode = 0;
|
||||
EPOCH_snapDirection = 0;
|
||||
EPOCH_Target = objNull;
|
||||
|
||||
if(player != _killer && (isPlayer _killer || isPlayer (effectiveCommander _killer)))then{_tapDiag = "TapOut2";};//TODO: vehicle check may not always be reliable
|
||||
|
||||
if (Epoch_canBeRevived) then {
|
||||
setPlayerRespawnTime 600;
|
||||
createDialog "TapOut";
|
||||
createDialog _tapDiag;
|
||||
} else {
|
||||
setPlayerRespawnTime 15;
|
||||
["<t size='1.6' color='#99ffffff'>You can be just revived once per life!</t>", 5] call Epoch_dynamicText;
|
||||
};
|
||||
|
||||
[] spawn{
|
||||
[_killer, _tapDiag] spawn{
|
||||
_killer2 = _this select 0;
|
||||
_tapDiag2 = _this select 1;
|
||||
while {!alive player} do {
|
||||
|
||||
if (playerRespawnTime <= 1) exitWith{ (findDisplay 46) closeDisplay 0; };
|
||||
if (playerRespawnTime > 15 && !dialog) then {
|
||||
createDialog "TapOut";
|
||||
};
|
||||
if (playerRespawnTime > 15 && !dialog) then {createDialog _tapDiag2;};
|
||||
if (isObjectHidden player) then {closeDialog 2;};
|
||||
if(player getVariable["EPOCH_doBoom",false])exitWith{player setVariable ["EPOCH_doBoom",nil];[player] call EPOCH_fnc_playerDeathDetonate;};
|
||||
if(player getVariable["EPOCH_doMorph",false])exitWith{player setVariable ["EPOCH_doMorph",nil];[selectRandom (getArray (getMissionConfig "CfgEpochClient" >> "deathMorphClass")),player,_killer2] call EPOCH_fnc_playerDeathMorph;};
|
||||
uiSleep 0.1;
|
||||
};
|
||||
};
|
||||
|
@ -0,0 +1,36 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Detonate player body.
|
||||
|
||||
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/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathDetonate.sqf
|
||||
|
||||
Example:
|
||||
[] call EPOCH_fnc_playerDeathDetonate;
|
||||
|
||||
Parameter(s):
|
||||
|
||||
Returns:
|
||||
BOOM
|
||||
*/
|
||||
params ["_player"];
|
||||
openmap [false,false];
|
||||
closeDialog 2;
|
||||
[_player, Epoch_personalToken] remoteExec ["EPOCH_server_deadPlayerDetonate",2];
|
||||
deleteVehicle player;
|
||||
player setVariable ["doneBoom", true];
|
||||
|
||||
[] spawn{
|
||||
while {!alive player} do {
|
||||
//Handle clean up
|
||||
if(player getVariable["doneBoom",false])exitWith{player setVariable ["doneBoom",nil]; uiSleep 5; (findDisplay 46) closeDisplay 0;};
|
||||
uiSleep 0.1;
|
||||
};
|
||||
};
|
@ -0,0 +1,38 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Morph dead player body into an antagonist, called from player death GUI. Dead player camera will attach to antagonist.
|
||||
|
||||
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/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerDeathMorph.sqf
|
||||
|
||||
Example:
|
||||
[] call EPOCH_fnc_playerDeathMorph;
|
||||
|
||||
Parameter(s):
|
||||
_this select 0: STRING - Antagonist class
|
||||
_this select 1: OBJECT - Player (Victim)
|
||||
_this select 2: OBJECT - Target Player (Killer)
|
||||
|
||||
Returns:
|
||||
*/
|
||||
params ["_antagonistClass", "_player", "_killer"];
|
||||
|
||||
openmap [false,false];
|
||||
[_killer,_antagonistClass,true,_player, Epoch_personalToken] remoteExec ["EPOCH_server_triggerAntagonist",2];
|
||||
|
||||
[_killer,_player] spawn{
|
||||
_killer2 = _this select 0;
|
||||
_player2 = _this select 1;
|
||||
while {!alive player} do {
|
||||
if (isObjectHidden _player2) then {closeDialog 2;};
|
||||
if!(isNull (_killer2 getVariable["EPOCH_antagObj",objNull])) exitWith {closeDialog 2;[_player2,(_killer2 getVariable["EPOCH_antagObj",objNull]),(_killer2 getVariable["EPOCH_antagBomb",objNull]),_killer2] call EPOCH_fnc_playerAttachToAntagonist;};
|
||||
uiSleep 0.1;
|
||||
};
|
||||
};
|
@ -0,0 +1,30 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
call setVariable from client. Allows the server to call and set a local variable on an object via a player without broadcasting.
|
||||
|
||||
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/master/Sources/epoch_code/compile/functions/EPOCH_fnc_playerSetVariable.sqf
|
||||
|
||||
Example:
|
||||
[_obj,_var,_value,_local] call EPOCH_fnc_playerSetVariable;
|
||||
|
||||
Parameter(s):
|
||||
_this select 0: OBJECT - Object to attach variable to
|
||||
_this select 1: STRING - Variable Name
|
||||
_this select 2: ANYTHING - Variable Value
|
||||
_this select 3: BOOLEAN - Broadcast ?
|
||||
Returns:
|
||||
|
||||
*/
|
||||
|
||||
params ["_obj", "_var", "_value", "_local"];
|
||||
if(isNil "_local")then{_local = false;};
|
||||
diag_log format["Epoch: ADMIN: Attempting Set variable [%2,%3,%4] on %1.", _obj, _var, _value,_local];
|
||||
_obj setVariable [_var,_value,_local];
|
@ -0,0 +1,27 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors: Aaron Clark
|
||||
|
||||
Description:
|
||||
Send server message to trigger antagonist on another client. Server returns antagonist object where required. Designed to support additional tap out options (Morphing).
|
||||
|
||||
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/master/Sources/epoch_code/compile/functions/EPOCH_fnc_triggerAntagonist.sqf
|
||||
|
||||
Example:
|
||||
[_killer, "Epoch_Sapper_F", player, true] call EPOCH_fnc_triggerAntagonist;
|
||||
|
||||
Parameter(s):
|
||||
_this select 0: Target client to trigger antagonist on. (Killer)
|
||||
_this select 1: Antagonist class to spawn, e.g. "Epoch_Sapper_F", see EPOCH_unitSpawn.sqf for full list
|
||||
_this select 2: On target, set variable containing antagonist object. Allows other players / requesting player to attach to antagonist object.
|
||||
|
||||
Returns:
|
||||
|
||||
*/
|
||||
params ["_target","_antagonist","_doVariable"];
|
||||
[_target,_antagonist,_doVariable,player,Epoch_personalToken] remoteExec ["EPOCH_server_triggerAntagonist",2];
|
@ -112,6 +112,11 @@ class CfgClientFunctions
|
||||
class fnc_findSapperStalkLocation {};
|
||||
class fnc_dirToFuzzy {};
|
||||
class fnc_cursorTarget {};
|
||||
class fnc_triggerAntagonist {};
|
||||
class fnc_playerDeathDetonate {};
|
||||
class fnc_playerDeathMorph {};
|
||||
class fnc_playerSetVariable {};
|
||||
class fnc_playerAttachToAntagonist {};
|
||||
};
|
||||
class environment
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
Contributors:
|
||||
Contributors: Andrew Gregory
|
||||
|
||||
Description:
|
||||
Main Client side configs for the Epoch gamemode
|
||||
@ -13,7 +13,7 @@
|
||||
*/
|
||||
class CfgEpochClient
|
||||
{
|
||||
epochVersion = "0.3.8.0";
|
||||
epochVersion = "0.3.9.0";
|
||||
sapperRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = 1% - 55% if soiled (+ 2% if in city) chance to spawn sapper
|
||||
droneRngChance = 100; // increase number to reduce chances and reduce to increase. Default 100 = // 2% chance (+ 4% chance if in city) (1% - 2% Half if using silencer) to spawn drone if shot fired
|
||||
buildingNearbyMilitary = 0; //1 to allow building nearby
|
||||
@ -23,6 +23,7 @@ class CfgEpochClient
|
||||
buildingJammerRange = 75; // jammer range in meters
|
||||
disableRemoteSensors = true; // disableRemoteSensors true
|
||||
EPOCH_news[] = {"Word is that Sappers have a new boss.","Dogs will often lure them monsters away.","My dog was blown up. I miss him.."};
|
||||
deathMorphClass[] = {"Epoch_Sapper_F","Epoch_SapperB_F","I_UAV_01_F","Epoch_Cloak_F"};//Random selection of these classes when player morphs after death. Currently available: Epoch_Cloak_F, Epoch_SapperB_F, Epoch_Sapper_F, I_UAV_01_F
|
||||
antagonistSpawnIndex[] = {
|
||||
{"Epoch_Cloak_F", 1}, // {"type", limit}
|
||||
{"GreatWhite_F", 2},
|
||||
@ -57,16 +58,16 @@ class CfgEpochClient
|
||||
|
||||
// Event handler code
|
||||
displayAddEventHandler[] = {"keyDown","keyUp"};
|
||||
keyDown = "(_this call EPOCH_KeyDown)";
|
||||
keyUp = "(_this call EPOCH_KeyUp)";
|
||||
keyDown = "(_this call EPOCH_KeyDown)";
|
||||
keyUp = "(_this call EPOCH_KeyUp)";
|
||||
addEventHandler[] = {"Respawn","Put","Take","InventoryClosed","InventoryOpened","Fired","Killed","HandleRating","GetInMan","GetOutMan"};
|
||||
Respawn = "(_this select 0) call EPOCH_clientRespawn";
|
||||
Put = "(_this select 1) call EPOCH_interact;_this call EPOCH_PutHandler";
|
||||
Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck";
|
||||
Fired = "_this call EPOCH_fnc_playerFired;";
|
||||
InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};";
|
||||
Take = "(_this select 1) call EPOCH_interact;_this call EPOCH_UnisexCheck";
|
||||
Fired = "_this call EPOCH_fnc_playerFired;";
|
||||
InventoryClosed = "if !(EPOCH_arr_interactedObjs isEqualTo[]) then {[EPOCH_arr_interactedObjs] remoteExec['EPOCH_server_save_vehicles', 2]; EPOCH_arr_interactedObjs = [];};";
|
||||
InventoryOpened = "_this spawn EPOCH_initUI;_container = _this select 1;_lockedNear = false;if (_container isKindOf 'GroundWeaponHolder' || _container isKindOf 'WeaponHolderSimulated') then {{if (locked _x in [2, 3] ||_x getVariable['EPOCH_Locked', false]) exitWith {_lockedNear = true}} forEach (player nearSupplies 10);};if (locked _container in [2, 3] || _container getVariable['EPOCH_Locked', false] || _lockedNear) then {[] spawn {disableSerialization;waitUntil {!isNull findDisplay 602};_display = findDisplay 602;_ctrl_cargo = _display displayCtrl 6401;_ctrl_ground = _display displayCtrl 6321;_ctrl_cargo ctrlEnable false;ctrlSetFocus _ctrl_ground;ctrlActivate _ctrl_ground;};};";
|
||||
Killed = "_this call EPOCH_fnc_playerDeath;";
|
||||
Killed = "_this call EPOCH_fnc_playerDeath;";
|
||||
HandleRating = "EPOCH_playerKarma = EPOCH_playerKarma + (_this select 1);0";
|
||||
HandleDamage = "";
|
||||
HandleHeal = "";
|
||||
@ -108,6 +109,10 @@ class CfgEpochSapper
|
||||
groanTrig = 16; //Percentage chance of a groan. Min value = 4
|
||||
sRange = 300; //Distance from target over which sapper will dispose. Range within which sapper code will be aware of targets. Distance up to which sapper will attempt to find a spot to hide in. Min Value = 150.
|
||||
smellDist = 24; //Distance up to which sapper can smell. Used to decide if sapper can see target when deciding to charge and influences target selection. Is influenced by wind direction. Min Value = 8.
|
||||
reflexSpeed = 0.25; //Sapper brain will pause for this time when checking for new stimulus during each thought process. Lower number equals a more reactive sapper. (Guide Min 0.25 - Max 2.5).
|
||||
nestChance = 2; //Every time a sapper spawns apply this percentage chance that sapper will create a nest.
|
||||
hideLevel = 72; //(Emotion) Sapper fear increases by several factors, higher number of armed player(s) in area / being shot at. Set fear level (out of 100) at which he will go into a 'hide / evade mode'.. temporarily.
|
||||
chargeLevel = 52; //(Emotion) Sapper anger increases by smelling / sensing players, being shot at / hit, too many players on his turf. Set level (Out of 100) at which he is triggered to charge on the current target.
|
||||
};
|
||||
class CfgEpochUAV
|
||||
{
|
||||
@ -115,6 +120,22 @@ class CfgEpochUAV
|
||||
UAVMaxDist = 180; //Maximum distance to choose next position when roaming. Min Value = 42 / Max Value = 400.
|
||||
UAVHeight = 100; //Set height when roaming, slight randomness is applied to this value. UAV will choose own height when locked onto target. Min Value = 42 / Max Value = 280. UAV can still spot targets from height !
|
||||
};
|
||||
class CfgEpochUAVSupport
|
||||
{
|
||||
unitTypes[] = {"I_Soldier_EPOCH", "I_Soldier2_EPOCH", "I_Soldier3_EPOCH"};//Selects from randomly
|
||||
maxUnitNum = 2; //Maximum number of units spawned when UAV spots target.
|
||||
minAISkill = 0.2; //Minumum AI Skill. Skills are chosen randomly between this minimum overall AI skill value and the following max AI skill values, for each of the next skills:
|
||||
maxAimingAccuracy = 0.7;
|
||||
maxAimingShake = 0.9;
|
||||
maxAimingSpeed = 0.6;
|
||||
maxEndurance = 0.4;
|
||||
maxSpotDistance = 0.4;
|
||||
maxSpotTime = 0.3;
|
||||
maxCourage = 0.3;
|
||||
maxReloadSpeed = 0.5;
|
||||
maxCommanding = 0.4;
|
||||
maxGeneral = 0.4;
|
||||
};
|
||||
class CfgEpochAirDrop
|
||||
{
|
||||
AirDropFreq = 1200; //AirDropChance, to decide if Air drop occurs, will only be checked once per AirDropFreq time period, for each player. Min value = 120.
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
Contributors: Andrew Gregory
|
||||
|
||||
Description:
|
||||
RemoteExec whitelist for Epoch sandbox gamemode. This also blacklists default A3 remoteExec commands.
|
||||
@ -197,6 +197,19 @@ class CfgRemoteExec
|
||||
allowedTargets=2;
|
||||
jip = 0;
|
||||
};
|
||||
class EPOCH_server_triggerAntagonist {
|
||||
allowedTargets=2;
|
||||
jip = 0;
|
||||
};
|
||||
class EPOCH_server_deadPlayerDetonate {
|
||||
allowedTargets=2;
|
||||
jip = 0;
|
||||
};
|
||||
class epoch_server_playersetvariable {
|
||||
allowedTargets=2;
|
||||
jip = 0;
|
||||
};
|
||||
|
||||
};
|
||||
class Commands {mode=0;};
|
||||
};
|
||||
|
@ -1 +1 @@
|
||||
build=439;
|
||||
build=443;
|
||||
|
@ -1 +1 @@
|
||||
build=439;
|
||||
build=443;
|
||||
|
@ -0,0 +1,24 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors: Aaron Clark
|
||||
|
||||
Description:
|
||||
Trigger an antagonist on a client. Option to add antagonist object to target as a variable.
|
||||
|
||||
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/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_triggerAntagonist.sqf
|
||||
*/
|
||||
params ["_target","_antagonistClass","_doVariable","_player","_token"];
|
||||
diag_log format["Epoch: ADMIN: Attempting antagonist (%3) trigger from %1 for %2.", getPlayerUID _player, _target, _antagonistClass];
|
||||
if !([_player,_token]call EPOCH_server_getPToken)exitWith{};
|
||||
|
||||
if(!isNull _target)then{
|
||||
diag_log format["Epoch: ADMIN: Calling antagonist (%3) trigger from %1 for %2.", getPlayerUID _player, _target, _antagonistClass];
|
||||
|
||||
[_antagonistClass, _target, _doVariable] remoteExec ["EPOCH_unitSpawn",_target];
|
||||
//if(!isNull _player)then{hideObjectGlobal _player;};//Do elsewhere, allow revival
|
||||
};
|
@ -73,7 +73,6 @@ for "_i" from 0 to _this do {
|
||||
if (isClass (configFile >> "CfgVehicles" >> _class) && (_damage < 1) && !(_class isKindOf 'Constructions_lockedstatic_F')) then {
|
||||
|
||||
_baseObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
|
||||
|
||||
_baseObj setposATL _location;
|
||||
_baseObj setVectorDirAndUp _worldspace;
|
||||
|
||||
|
@ -43,7 +43,7 @@ _stableCount = 0;
|
||||
_playerUID = _x getVariable["BUILD_OWNER", "-1"];
|
||||
_slot = _x getVariable["EPOCH_secureStorage", "-1"];
|
||||
deleteVehicle _x;
|
||||
_newObj = createVehicle[_class, _objectPos, [], 0, "CAN_COLLIDE"];
|
||||
_newObj = createVehicle[_class, [0,0,0], [], 0, "CAN_COLLIDE"];
|
||||
_newObj setVariable["BUILD_SLOT", _objSlot, true];
|
||||
_newObj setposASL _objectPos;
|
||||
_newObj setVectorDirAndUp[_vDir, _vUP];
|
||||
|
@ -33,7 +33,7 @@ if (_objSlot != -1) then {
|
||||
deleteVehicle _object;
|
||||
_class = _upgrade select 0;
|
||||
|
||||
_newObj = createVehicle [_class, _objectPos, [], 0, "CAN_COLLIDE"];
|
||||
_newObj = createVehicle [_class, [0,0,0], [], 0, "CAN_COLLIDE"];
|
||||
_newObj setVariable ["BUILD_SLOT",_objSlot,true];
|
||||
_newObj call EPOCH_server_buildingInit;
|
||||
_newObj setposATL _objectPos;
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
Contributors: Aaron Clark
|
||||
|
||||
Description:
|
||||
Creates air drop crate
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
Contributors: Aaron Clark
|
||||
|
||||
Description:
|
||||
Creates helicopter air drop
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
Author: Aaron Clark - EpochMod.com
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
Contributors: Aaron Clark
|
||||
|
||||
Description:
|
||||
Server side spawing of shipwreck loots
|
||||
|
@ -0,0 +1,22 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors: Aaron Clark
|
||||
|
||||
Description:
|
||||
Detonate a boss sapper bomb at player position.
|
||||
|
||||
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/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_playerDeathOptions.sqf
|
||||
*/
|
||||
params ["_player", "_token"];
|
||||
diag_log format["Epoch: ADMIN: Attempting player detonate on %1.", getPlayerUID _player];
|
||||
if !([_player,_token]call EPOCH_server_getPToken)exitWith{};
|
||||
|
||||
_pos = getPosATL _player;
|
||||
_bomb = createVehicle["SapperB_Charge_Ammo", _pos, [], 0, "CAN_COLLIDE"];
|
||||
_bomb setDamage 1;
|
||||
hideObjectGlobal _player;
|
@ -0,0 +1,18 @@
|
||||
/*
|
||||
Author: Andrew Gregory - EpochMod.com
|
||||
|
||||
Contributors:
|
||||
|
||||
Description:
|
||||
Call setVariable on specific client.
|
||||
|
||||
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/master/Sources/epoch_server/compile/epoch_antagonists/EPOCH_server_playerSetVariable.sqf
|
||||
*/
|
||||
params ["_player","_token","_obj", "_var", "_value", "_local"];
|
||||
if !([_player,_token]call EPOCH_server_getPToken)exitWith{};
|
||||
diag_log format["Epoch: ADMIN: Attempting Set variable [%2,%3,%4] on %1.", _obj, _var, _value,_local];
|
||||
[_obj, _var,_value,_local] remoteExec ['EPOCH_fnc_playerSetVariable', _obj];
|
@ -71,13 +71,14 @@ class CfgServerFunctions
|
||||
class server_savePlayer {};
|
||||
class server_loadPlayer {};
|
||||
class server_checkPlayer {};
|
||||
// class server_respawnPlayer {};
|
||||
class server_onPlayerDisconnect {};
|
||||
class server_deadPlayer {};
|
||||
class server_revivePlayer {};
|
||||
class server_storeCrypto {};
|
||||
class server_equippedItem {};
|
||||
class server_unpackBackpack {};
|
||||
class server_deadPlayerDetonate{};
|
||||
class server_playerSetVariable{};
|
||||
};
|
||||
class epoch_traders {
|
||||
class server_loadTraders {};
|
||||
@ -132,12 +133,13 @@ class CfgServerFunctions
|
||||
class server_handle_say3D {};
|
||||
class server_handle_switchMove {};
|
||||
class server_handle_sapperObjs {};
|
||||
class server_triggerAntagonist{};
|
||||
};
|
||||
};
|
||||
};
|
||||
class CfgServerVersion
|
||||
{
|
||||
client = "0.3.8.0";
|
||||
config = "0.3.8.0";
|
||||
client = "0.3.9.0";
|
||||
config = "0.3.9.0";
|
||||
hive = "0.5.1.7";
|
||||
};
|
||||
|
@ -12,6 +12,8 @@
|
||||
Github:
|
||||
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server/init/server_securityfunctions.sqf
|
||||
*/
|
||||
private ["_code","_functionName","_remoteExecClientStr","_onLoad","_onUnload","_skn_blockedSpawnMenuUID","_temp","_skn_adminMenuOwner","_case","_skn_adminMenuHigh","_skn_adminMenuLow","_config","_debugClass","_cfg_systemDebug","_skn_systemDebug1","_skn_systemDebug2","_skn_systemDebug3","_skn_systemDebug4","_skn_systemDebug5","_cfg_remoteExecClient","_remoteExecClient_NAMES","_cfg_limits","_skn_playerCryptoLimit","_cfg_learning","_skn_trustedUsers","_str_learningModeCheck","_cfg_quality","_skn_perfMode","_skn_viewDistance","_skn_viewDistanceObects","_skn_terrainGrid","_cfg_blacklistConfig","_skn_badDisplaysArray","_skn_badAnimations","_cfg_variablesConfig","_skn_badVarCheckArray","_skn_nilVarCheckArray","_skn_commandMenuArray","_skn_addEHConfig","_skn_displayAddEHChecks","_skn_addEHArray","_serverSettingsConfig","_skn_enableAntihack","_skn_check_addons","_checkFiles","_skn_check_files","_whitelistPatches","_skn_whitelist_cfgPatches","_skn_adminsOwner","_skn_adminsHigh","_skn_adminsLow","_banReasons","_skn_banReason","_antihack_banDuration","_epoch_banReasons","_kickReasons","_epoch_kickReason","_epoch_kickReasons","_ownerSettings","_skn_adminMenuOwnerSetting","_adminSettings","_skn_adminMenuHighSetting","_lowSettings","_skn_adminMenuLowSetting","_skn_adminMenuMenuKey","_skn_adminMenuInfrontTeleport","_skn_adminMenuBanReasons","_skn_adminMenuCryproCfg","_skn_cfgPatchesCfg","_skn_PVSPrefix","_rndVAR_Count","_skn_rndVA","_skn_PVC_INDEX","_skn_AH_rndVarVehicle","_skn_AH_rndVarPlayer","_skn_AH_rndVarAHInitCheck","_skn_AH_Init","_skn_AH_Code","_skn_AH_Code_CA","_skn_AH_Code_CB","_skn_AH_Ban","_skn_AH_rndVar","_skn_doKickBan","_skn_server_getRealTime","_skn_pv_hackerLog","_skn_pv_adminLog","_skn_server_adminLog","_skn_doAdminRequest","_skn_doAdminLog","_skn_doTokenAuth","_skn_antiTeleportPVC","_skn_Admin_Code","_skn_Admin_Init","_skn_adminRequest_PVC","_skn_adminLog_PVC","_skn_adminLog","_skn_AdminKeyDown","_skn_AdminMenu_Init","_skn_getCtrl","_skn_fnc_Spec","_skn_Update_AdminButtons","_skn_mainMenuCfg","_skn_FillMainMenu","_skn_FillPlayerMenu","_skn_switchMainMenu","_skn_dbClickMainMenu","_skn_spawnMenu","_skn_spawnSpawnMenu","_skn_removespawnMenu","_skn_fillSpawnMenu","_skn_hackerLog","_skn_switchTable","_skn_customBanreason","_skn_flipVehicle","_skn_freeCam","_skn_delete","_skn_deleteMenu","_skn_deleteNow","_skn_doBan","_skn_mapTeleport","_skn_old_esp","_skn_hideAdmin","_skn_old_espMap","_skn_infrontTP","_skn_esp","_skn_godMode","_skn_repairVehicle","_skn_spawnLoot","_skn_mapLootArray","_skn_tg_Spec","_skn_tg_sortOrder","_skn_tg_toggle","_skn_tg_BanPlayer","_skn_tg_delete","_skn_tg_mapTeleport","_skn_tg_spawnTyp","_skn_tg_limitSpawn","_skn_tg_old_espMap","_skn_tg_old_esp","_skn_tg_hideAdmin","_skn_tg_infrontTP","_skn_tg_godMode","_skn_tg_map_player","_skn_tg_map_corpse","_skn_tg_map_loot","_skn_tg_map_vehicle","_skn_tg_map_ai","_skn_tg_map_basebuilding","_skn_t1","_skn_t2","_skn_t3","_skn_t4","_skn_t5","_skn_AH_rndVarAHInitCheckToken","_stringInArray","_displaysArray","_displays","_escapeQuotes","_cfg_displayArray","_skn_adminUIDArray","_skn_adminNAMEArray","_skn_tempuid","_skn_spawnPointCenter","_centerDistance","_sknBanANDSleep","_sknBanANDSleepQuick","_sknPatches","_skn_addonCheckCode","_skn_fileCheckCode","_sknAddActionCheck","_skn_code_ban","_skn_code_init","_skn_code_antihack","_skn_admincode","_skn_admininit"];
|
||||
|
||||
_config = (configFile >> "CfgSecConf");
|
||||
if (isClass _config) then {diag_log "Loading config..."};
|
||||
|
||||
@ -75,7 +77,17 @@ _skn_whitelist_cfgPatches = [_serverSettingsConfig, "antihack_whitelistedCfgPatc
|
||||
_skn_adminsOwner = [_serverSettingsConfig, "adminMenu_Owner", []] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_adminsHigh = [_serverSettingsConfig, "adminMenu_High", []] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_adminsLow = [_serverSettingsConfig, "adminMenu_Low", []] call EPOCH_fnc_returnConfigEntry;
|
||||
_banReasons = [
|
||||
"Mod mismatch, check that the mods you have enabled match server."
|
||||
];
|
||||
_skn_banReason = [_serverSettingsConfig, "antihack_banReason", "EpochMod.com Autoban"] call EPOCH_fnc_returnConfigEntry;
|
||||
_antihack_banDuration = [_serverSettingsConfig, "antihack_banDuration", 5] call EPOCH_fnc_returnConfigEntry;
|
||||
_epoch_banReasons = [_serverSettingsConfig, "antihack_banReasons", _banReasons] call EPOCH_fnc_returnConfigEntry;
|
||||
_kickReasons = [
|
||||
"Mod mismatch, check that mods enabled match server."
|
||||
];
|
||||
_epoch_kickReason = [_serverSettingsConfig, "antihack_kickReason", "EpochMod.com Autokick"] call EPOCH_fnc_returnConfigEntry;
|
||||
_epoch_kickReasons = [_serverSettingsConfig, "antihack_kickReasons", _kickReasons] call EPOCH_fnc_returnConfigEntry;
|
||||
_ownerSettings = ["ESP-PLAYER","ESP-VEHICLE","ESP-LOOT","OLD-ESP","OLD-MAP","PLAYER-TELEPORT","MAP-TELEPORT","INFRONT-TELEPORT","MAP-PLAYER","MAP-CORPSE","MAP-LOOT","MAP-VEHICLE","MAP-AI","MAP-BASEBUILDING","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","TARGET-CRYPTO","TARGET-VEHICLEREPAIR","VEHICLEFLIP","BANPANNEL","SPAWN-MENU","FREE-CAM","INVISIBLE","SPAWNLOOT","GODMODE","HEAL","VEHICLEREPAIR"];
|
||||
_skn_adminMenuOwnerSetting = [_serverSettingsConfig, "adminMenu_OwnerSetting", _ownerSettings] call EPOCH_fnc_returnConfigEntry;
|
||||
_adminSettings = ["PLAYER-TELEPORT","MAP-TELEPORT","TARGET-HEAL","TARGET-AMMO","TARGET-KILL","VEHICLEFLIP","BANPANNEL"];
|
||||
@ -86,30 +98,14 @@ _skn_adminMenuMenuKey = [_serverSettingsConfig, "adminMenu_menuKey", 0x3B] call
|
||||
_skn_adminMenuInfrontTeleport = [_serverSettingsConfig, "adminMenu_infrontTeleport", 0x06] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_adminMenuBanReasons = [_serverSettingsConfig, "adminMenu_BanReasons", ["Traderzone","Hacking","Glitch","Combat Log"]] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_adminMenuCryproCfg = [_serverSettingsConfig, "adminMenu_cryptoCfg", [2500,1000,500,100,50,-1000]] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_cfgPatchesCfg = [_serverSettingsConfig, "antihack_cfgPatchesCfg", [0]] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_cfgPatchesCfg = [_serverSettingsConfig, "antihack_cfgPatchesMode", [2]] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_PVSPrefix = [_serverSettingsConfig, "antihack_PVSPrefix", "EPAH_"] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_customVariablesCheck = [_serverSettingsConfig, "antihack_customVariablesCheck", true] call EPOCH_fnc_returnConfigEntry;
|
||||
_skn_customVariables = [_serverSettingsConfig, "antihack_customVariables", []] call EPOCH_fnc_returnConfigEntry;
|
||||
|
||||
// build array with X number of random strings
|
||||
_rndVAR_Count = 84; // 85 = number of (_skn_rndVA deleteAt 0)
|
||||
_skn_rndVA = call compile('epochserver' callExtension format['810|%1', _rndVAR_Count]);
|
||||
|
||||
EPOCH_hiveWhitelistVarsArray = [];
|
||||
if (_skn_customVariablesCheck) then{
|
||||
_whitelistConfig = _cfg_variablesConfig >> "whitelist";
|
||||
_skn_customVariables append(getArray(_whitelistConfig >> "bis")); //BIS Variables
|
||||
_skn_customVariables append(getArray(_whitelistConfig >> "epoch")); //Epoch Variables
|
||||
_skn_customVariables append(getArray(_whitelistConfig >> "custom")); //Custom Variables
|
||||
// Get any automatically added whitelist vars from Learning feature.
|
||||
_response = ["AH-WhitelistVars", (call EPOCH_fn_InstanceID)] call EPOCH_fnc_server_hiveGETRANGE;
|
||||
if ((_response select 0) == 1 && (_response select 1) isEqualType []) then{
|
||||
if !((_response select 1) isEqualTo[]) then{
|
||||
EPOCH_hiveWhitelistVarsArray = _response select 1;
|
||||
_skn_customVariables append EPOCH_hiveWhitelistVarsArray;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// For client PVC
|
||||
_skn_PVC_INDEX = _skn_rndVA deleteAt 0;
|
||||
@ -150,7 +146,6 @@ if (!_skn_enableAntihack) exitWith {
|
||||
EPOCH_server_isPAdmin = compileFinal ("false");
|
||||
EPOCH_server_Authed = compileFinal ("true");
|
||||
EPOCH_server_disconnect = compileFinal("true");
|
||||
EPOCH_server_kickToLobby = compileFinal("true");
|
||||
};
|
||||
|
||||
// Check AH init code
|
||||
@ -250,21 +245,6 @@ _skn_t3 = _skn_rndVA deleteAt 0;
|
||||
_skn_t4 = _skn_rndVA deleteAt 0;
|
||||
_skn_t5 = _skn_rndVA deleteAt 0;
|
||||
|
||||
_skn_kickToLobby = _skn_rndVA deleteAt 0;
|
||||
_skn_whitelistVars = _skn_rndVA deleteAt 0;
|
||||
|
||||
if (_skn_customVariablesCheck) then{
|
||||
// Gather all random global vars from AH for whitelist var checks
|
||||
_skn_customVariables append [_skn_PVC_INDEX,_skn_whitelistVars,_skn_kickToLobby,toLower(_skn_doKickBan),toLower(_skn_doTokenAuth)];
|
||||
_skn_customVariables append [_skn_AH_Init,_skn_AH_Code,_skn_AH_Code_CA,_skn_AH_Code_CB,_skn_AH_Ban,_skn_antiTeleportPVC,_skn_Admin_Init];
|
||||
_skn_customVariables append [toLower("FW"+_skn_AH_rndVar),toLower("FA"+_skn_AH_rndVar),toLower("FWC"+_skn_AH_rndVar)];
|
||||
|
||||
// Globally brodcast whitelist vars array
|
||||
missionNamespace setVariable [_skn_whitelistVars,_skn_customVariables,true];
|
||||
};
|
||||
|
||||
EPOCH_server_kickToLobby = compileFinal ("if !(isNull _this) then {"+_skn_kickToLobby+" = true;(owner _this) publicVariableClient '"+_skn_kickToLobby+"';};");
|
||||
|
||||
_skn_AH_rndVarAHInitCheckToken = _skn_t1+_skn_t2+_skn_t3+_skn_t4+_skn_t5;
|
||||
EPOCH_server_Authed = compileFinal("_this in "+_skn_AH_rndVarAHInitCheck);
|
||||
EPOCH_server_disconnect = compileFinal("
|
||||
@ -547,19 +527,9 @@ _sknBanANDSleepQuick = _skn_AH_Ban+"; uiSleep 1";
|
||||
_sknPatches = [];
|
||||
"_sknPatches pushBack (configName _x)" configClasses (configFile >> "CfgPatches");
|
||||
{_sknPatches pushBackUnique _x}forEach _skn_whitelist_cfgPatches;
|
||||
_skn_addonCheckCode = if (_skn_check_addons) then {"[] spawn{_config = '!(configName _x in "+str _sknPatches+")' configClasses (configFile >> 'CfgPatches');if !(_config isEqualTo []) then {[format['Disallowed Addon %1',_config],"+str (_skn_cfgPatchesCfg select 0)+"] call "+_skn_AH_Ban+"}};"} else {""};
|
||||
_skn_addonCheckCode = if (_skn_check_addons) then {"[] spawn{_config = '!(configName _x in "+str _sknPatches+")' configClasses (configFile >> 'CfgPatches');if !(_config isEqualTo []) then {[format['Disallowed Addon %1',_config],["+str (_skn_cfgPatchesCfg select 0)+",0]] call "+_skn_AH_Ban+"}};"} else {""};
|
||||
_skn_fileCheckCode = if (_skn_check_files isEqualTo []) then {""} else {"{if (str(compile preprocessFileLineNumbers (_x select 0)) != str(missionNamespace getVariable [_x select 1,'']))exitWith{[format['Modified File %1 (%2/%3)',_x select 1,count toArray str (compile preprocessFileLineNumbers (_x select 0)),count toArray str(missionNamespace getVariable [_x select 1,''])],0] call "+_skn_AH_Ban+"}} forEach "+str _skn_check_files+";"};
|
||||
|
||||
_sknCustomVarCheckModeCode = [_serverSettingsConfig, "antihack_customVariablesCheckMode", 0] call EPOCH_fnc_returnConfigEntry;
|
||||
_sknCustomVarCheckCode = if (_skn_customVariablesCheck) then {"
|
||||
{
|
||||
if !(_x in (missionNamespace getVariable ["+str _skn_whitelistVars+",[]])) then{
|
||||
[format['(WIP) Unknown Variable (missionNamespace): %1', _x], ["+str _sknCustomVarCheckModeCode+",[toArray(_x)]]] call "+_sknBanANDSleepQuick+";
|
||||
}
|
||||
}forEach(allVariables missionNamespace);
|
||||
"} else {""};
|
||||
|
||||
|
||||
_sknAddActionCheck = if ([_serverSettingsConfig, "antihack_addActionCheck", true] call EPOCH_fnc_returnConfigEntry) then{ "
|
||||
if (player == _ActionVehicle) then[{_ActionCount = _ActionCount + 1}, { _ActionVehicle = player; _ActionCount = 0 }];
|
||||
_addCase = player addAction['', '', [], -5, false, true, '', 'false'];
|
||||
@ -604,66 +574,52 @@ call compile("'"+_skn_doTokenAuth+"' addPublicVariableEventHandler {
|
||||
};
|
||||
};");
|
||||
|
||||
|
||||
//[[_case,_time,_name,_uid,_save],[1, 0, 0, 1]]
|
||||
call compile ("'"+_skn_doKickBan+"' addPublicVariableEventHandler {
|
||||
_array = _this select 1;
|
||||
_player =_array select 2;
|
||||
if !([_player,_array select 3] call EPOCH_server_getPToken) exitWith {
|
||||
_array params ['_text','_mode','_player','_token'];
|
||||
if !([_player,_token] call EPOCH_server_getPToken) exitWith {
|
||||
['ahe', format['Token is different [%1,%2] %3',if (!isNull _player) then { _player getVariable ['"+_skn_AH_rndVarPlayer+"','']}else{'PlayerObj NULL'}, _array select 3, _array]] call EPOCH_fnc_server_hiveLog;
|
||||
};
|
||||
_text = toString(_array select 0);
|
||||
|
||||
_mode = _array select 1;
|
||||
_data = [];
|
||||
_text = toString(_text);
|
||||
_reasonIndex = -1;
|
||||
if (_mode isEqualType []) then{
|
||||
_mode = (_array select 1) select 0;
|
||||
_data = (_array select 1) select 1;
|
||||
_mode = _mode select 0;
|
||||
_reasonIndex = _mode select 1;
|
||||
};
|
||||
|
||||
if (_mode == 0) then{
|
||||
['ahb', format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog;
|
||||
"+_skn_pv_hackerLog+" pushBack [[0,call "+_skn_server_getRealTime+",name _player,getPlayerUID _player,_text],[1, 0, 0, 1]];
|
||||
'epochserver' callExtension format['820|%1|"+_skn_banReason+"',getPlayerUID _player];
|
||||
} else {
|
||||
if (_mode == 2) then{
|
||||
_unknownVar = toString(_data select 0);
|
||||
_safeVars = missionNamespace getVariable ["+str _skn_whitelistVars+",[]];
|
||||
_trusted = "+_str_learningModeCheck+";
|
||||
if !(_unknownVar in _safeVars) then{
|
||||
if (_trusted) then {
|
||||
|
||||
_safeVars pushBack _unknownVar;
|
||||
missionNamespace setVariable ["+str _skn_whitelistVars+",_safeVars,true];
|
||||
|
||||
if !(_unknownVar in EPOCH_hiveWhitelistVarsArray) then{
|
||||
EPOCH_hiveWhitelistVarsArray pushBack _unknownVar;
|
||||
['AH-WhitelistVars', (call EPOCH_fn_InstanceID), EPOCH_hiveWhitelistVarsArray] call EPOCH_fnc_server_hiveSET;
|
||||
};
|
||||
|
||||
['ahl', format['LEARNING: %1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog;
|
||||
"+_skn_pv_hackerLog+" pushBack[[1, call "+_skn_server_getRealTime+", name _player, getPlayerUID _player, format['LEARNING: %1',_text]], []];
|
||||
} else {
|
||||
['ahb', format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog;
|
||||
"+_skn_pv_hackerLog+" pushBack [[0,call "+_skn_server_getRealTime+",name _player,getPlayerUID _player,_text],[1, 0, 0, 1]];
|
||||
_banID = 1;
|
||||
'epochserver' callExtension format['820|%1|"+_skn_banReason+" #V%2',getPlayerUID _player,_banID];
|
||||
};
|
||||
_reason = '';
|
||||
_logName = 'ahl';
|
||||
_logMode = 1;
|
||||
_logColor = [1,1,1,1];
|
||||
switch _mode do {
|
||||
case 0: {
|
||||
_logName = 'ahb';
|
||||
_logColor = [1,0,0,1];
|
||||
_logMode = 0;
|
||||
if (_reasonIndex != -1) then {
|
||||
_reason = "+str(_epoch_banReasons)+" select _reasonIndex;
|
||||
};
|
||||
}else {
|
||||
['ahl', format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog;
|
||||
"+_skn_pv_hackerLog+" pushBack[[1, call "+_skn_server_getRealTime+", name _player, getPlayerUID _player, _text], []];
|
||||
['ban', _player , format['"+_skn_banReason+" %1',_reason], "+str(_antihack_banDuration)+"] call EPOCH_serverCommand;
|
||||
};
|
||||
case 2: {
|
||||
_logName = 'ahk';
|
||||
_logColor = [0,0,1,1];
|
||||
if (_reasonIndex != -1) then {
|
||||
_reason = "+str(_epoch_kickReasons)+" select _reasonIndex;
|
||||
};
|
||||
['kick', _player , format['"+_epoch_kickReason+" %1',_reason]] call EPOCH_serverCommand;
|
||||
};
|
||||
};
|
||||
"+_skn_pv_hackerLog+" pushBack[[_logMode, call "+_skn_server_getRealTime+", name _player, getPlayerUID _player, _text], _logColor];
|
||||
[_logName, format['%1 (%2): %3', name _player, getPlayerUID _player, _text]] call EPOCH_fnc_server_hiveLog;
|
||||
{
|
||||
if (_x call EPOCH_server_isPAdmin) then {
|
||||
(owner _x) publicVariableClient '"+_skn_pv_hackerLog+"';
|
||||
};
|
||||
}forEach playableUnits;
|
||||
}forEach allPlayers;
|
||||
};");
|
||||
//0 = BAN
|
||||
//1 = LOG
|
||||
//[2,varname] = Self-learning vars from trusted users.
|
||||
//2 = KICK
|
||||
|
||||
_skn_code_ban = compileFinal ("
|
||||
_this set [0,toArray (_this select 0)];
|
||||
@ -679,7 +635,7 @@ _skn_code_init = compileFinal ("
|
||||
_start = diag_tickTime;
|
||||
waitUntil {!isNil '"+_skn_AH_Code+"' || (diag_tickTime-_start > 20)};
|
||||
if (isNil '"+_skn_AH_Code+"') exitWith {
|
||||
"+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],1,player,Epoch_personalToken];
|
||||
"+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],2,player,Epoch_personalToken];
|
||||
publicVariableServer '"+_skn_doKickBan+"';
|
||||
(findDisplay 46) closeDisplay 0
|
||||
};
|
||||
@ -694,7 +650,7 @@ _skn_code_init = compileFinal ("
|
||||
};
|
||||
uiSleep 5;
|
||||
if ((isNil '"+_skn_AH_Code_CA+"') || (isNil '"+_skn_AH_Code_CB+"')) then {
|
||||
"+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],1,player,Epoch_personalToken];
|
||||
"+_skn_doKickBan+" = [format['Cannot Load AH [%1,%2]',!isNil '"+_skn_AH_Code_CA+"',!isNil '"+_skn_AH_Code_CB+"'],2,player,Epoch_personalToken];
|
||||
publicVariableServer '"+_skn_doKickBan+"';
|
||||
(findDisplay 46) closeDisplay 0
|
||||
};
|
||||
@ -964,7 +920,6 @@ _skn_code_antihack = compileFinal ("
|
||||
[format['Changed %1 >> onUnload >> %2', _display, getText(configFile>>_display>>'onUnload')],0] call "+_sknBanANDSleep+";
|
||||
}
|
||||
}forEach "+str _cfg_displayArray+";
|
||||
"+_sknCustomVarCheckCode+"
|
||||
uiSleep ((random 10)+10);
|
||||
};
|
||||
};
|
||||
@ -972,9 +927,6 @@ _skn_code_antihack = compileFinal ("
|
||||
"+_skn_doTokenAuth+" = [_t,player,Epoch_personalToken];
|
||||
publicVariableServer '"+_skn_doTokenAuth+"';
|
||||
"+_skn_doTokenAuth+" = nil;
|
||||
'"+_skn_kickToLobby+"' addPublicVariableEventHandler {
|
||||
[] spawn {waitUntil {(findDisplay 46) closeDisplay 0; false}}
|
||||
};
|
||||
"+_skn_AH_Code_CB+" = true;
|
||||
true
|
||||
");
|
||||
@ -1006,7 +958,7 @@ call compile ("
|
||||
if (_x call EPOCH_server_isPAdmin) then {
|
||||
(owner _x) publicVariableClient '"+_skn_pv_adminLog+"';
|
||||
};
|
||||
}forEach playableUnits;
|
||||
}forEach allPlayers;
|
||||
true
|
||||
};
|
||||
");
|
||||
|
@ -1 +1 @@
|
||||
build=439;
|
||||
build=443;
|
||||
|
@ -1,4 +1,4 @@
|
||||
if (sunOrMoon >= 0.99) then { // adjust this lower to change sooner. Note: "0.99 value, the twilight is still quite dark" https://community.bistudio.com/wiki/sunOrMoon
|
||||
if (sunOrMoon < 0.99) then { // adjust this lower to change sooner. Note: "0.99 value, the twilight is still quite dark" https://community.bistudio.com/wiki/sunOrMoon
|
||||
setTimeMultiplier 13 // adjust this value for slower or faster night cycle ( 24 hours will take 1 hour )
|
||||
} else {
|
||||
setTimeMultiplier 5 // adjust this value for slower or faster day cycle ( 12 hours will take 1 hour )
|
||||
|
@ -1 +1 @@
|
||||
build=439;
|
||||
build=443;
|
||||
|
@ -20,7 +20,7 @@ class CfgPatches {
|
||||
units[] = {};
|
||||
weapons[] = {};
|
||||
requiredVersion = 0.1;
|
||||
epochVersion = "0.3.8.0";
|
||||
epochVersion = "0.3.9.0";
|
||||
requiredAddons[] = {};
|
||||
#include "build.hpp"
|
||||
};
|
||||
|
@ -81,8 +81,8 @@ echo build=%BUILDNUMBER%; > !serverBuildInc!
|
||||
SET SOURCE_PATH=%MAIN_PATH%\Sources\epoch_server
|
||||
SET OUTPUT_PATH=%MAIN_PATH%\Server_Install_Pack\@EpochHive\addons
|
||||
SET TEMP_PATH=x\addons\a3_epoch_server
|
||||
rd /s/q p:\!TEMP_PATH!
|
||||
xcopy /s/e/y/q/i "!SOURCE_PATH!" p:\!TEMP_PATH!
|
||||
rd /s/q P:\!TEMP_PATH!
|
||||
xcopy /s/e/y/q/i "!SOURCE_PATH!" P:\!TEMP_PATH!
|
||||
START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!TEMP_PATH!" "!OUTPUT_PATH!" -clear -prefix="!TEMP_PATH!" -project="P:\!TEMP_PATH!" -include=!AB_includes_path!
|
||||
if '%choice%'=='5' (
|
||||
call :settings
|
||||
@ -95,8 +95,8 @@ echo build=%BUILDNUMBER%; > !settingsBuildInc!
|
||||
SET SOURCE_PATH=%MAIN_PATH%\Sources\epoch_server_settings
|
||||
SET OUTPUT_PATH=%MAIN_PATH%\Server_Install_Pack\@EpochHive\addons
|
||||
SET TEMP_PATH=a3_epoch_server_settings
|
||||
rd /s/q p:\!TEMP_PATH!
|
||||
xcopy /s/e/y/q/i "!SOURCE_PATH!" p:\!TEMP_PATH!
|
||||
rd /s/q P:\!TEMP_PATH!
|
||||
xcopy /s/e/y/q/i "!SOURCE_PATH!" P:\!TEMP_PATH!
|
||||
START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!TEMP_PATH!" "!OUTPUT_PATH!" -packonly -clear -prefix="!TEMP_PATH!" -project="P:\!TEMP_PATH!" -include=!AB_includes_path!
|
||||
if '%choice%'=='5' (
|
||||
call :core
|
||||
@ -109,8 +109,8 @@ echo build=%BUILDNUMBER%; > !coreBuildInc!
|
||||
SET SOURCE_PATH=%MAIN_PATH%\Sources\epoch_server_core
|
||||
SET OUTPUT_PATH=%MAIN_PATH%\Server_Install_Pack\@EpochHive\addons
|
||||
SET TEMP_PATH=epoch_server_core
|
||||
rd /s/q p:\!TEMP_PATH!
|
||||
xcopy /s/e/y/q/i "!SOURCE_PATH!" p:\!TEMP_PATH!
|
||||
rd /s/q P:\!TEMP_PATH!
|
||||
xcopy /s/e/y/q/i "!SOURCE_PATH!" P:\!TEMP_PATH!
|
||||
START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!TEMP_PATH!" "!OUTPUT_PATH!" -clear -prefix="!TEMP_PATH!" -project="P:\!TEMP_PATH!" -include=!AB_includes_path!
|
||||
if '%choice%'=='5' (
|
||||
call :allmaps
|
||||
@ -127,10 +127,10 @@ for /f "tokens=*" %%G in ('dir /b /s /a:d "!SOURCE_PATH!\mpmissions\epoch.*"') d
|
||||
echo building !MISSION! pbo
|
||||
rd /s/q p:\!MISSION!
|
||||
rem Moving files into temp folder
|
||||
xcopy /s/e/y/q/i/d "!SOURCE_PATH!\mpmissions\!MISSION!" p:\!MISSION!
|
||||
xcopy /s/y/q/i/f "!SOURCE_PATH!\description.ext" p:\!MISSION!
|
||||
xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_code" p:\!MISSION!\epoch_code
|
||||
xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_config" p:\!MISSION!\epoch_config
|
||||
xcopy /s/e/y/q/i/d "!SOURCE_PATH!\mpmissions\!MISSION!" P:\!MISSION!
|
||||
xcopy /s/y/q/i/f "!SOURCE_PATH!\description.ext" P:\!MISSION!
|
||||
xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_code" P:\!MISSION!\epoch_code
|
||||
xcopy /s/e/y/q/i/d "!SOURCE_PATH!\epoch_config" P:\!MISSION!\epoch_config
|
||||
START "" /min /WAIT "!TOOLS_PATH!\AddonBuilder.exe" "P:\!MISSION!" "!OUTPUT_PATH!" -clear -prefix=\ -project=P:\ -include=!AB_includes_path!
|
||||
)
|
||||
goto end
|
||||
|
Loading…
Reference in New Issue
Block a user