0.3.7.011

This commit is contained in:
vbawol 2016-01-07 22:32:52 -06:00
parent b8dac3481e
commit f7f5d25af4
15 changed files with 29119 additions and 85 deletions

View File

@ -14,9 +14,13 @@
[ADDED-WIP] Tin Bars (ItemTinBar,ItemTinBar10oz).
[ADDED-WIP] Plywood sheets in small and large stacks (ItemPlywood,ItemPlywoodPack).
[Changed] Change all publicVariableServer calls to use remoteExec calls for better performance.
[Fixed] Incorrectly being able to sell/buy items from a dead trader.
[Fixed] Snakes now require line of sight to bite player.
[Fixed] Custom epoch swing animations for Hatchet and sledge now work correctly.
[Fixed] Boss Sapper incorrectly cleaned up before detonation.
**Server**
[Added] Setting to control random magazine ammo counts in loot spawner. CfgEpochClient -> randomizeMagazineAmmoCount (default: true)
[Changed] Earthquakes with mineral veins spawn chances increased with less players.
[Changed] Driver or passengers of a driverless can now control vehicle locks. Also only the owner can control locks from outside of a occupied vehicle.
[Changed] Commented out Halloween masks from loot tables.
[Updated] New Battleye remoteExec.txt for added remoteExec calls.

View File

@ -1,4 +1,4 @@
/*%FSM<COMPILE "C:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sapperAlt">*/
/*%FSM<COMPILE "F:\Program Files (x86)\Bohemia Interactive\Tools\FSM Editor Personal Edition\scriptedFSM.cfg, sapperAlt">*/
/*%FSM<HEAD>*/
/*
item0[] = {"sapper",0,250,-225.000000,-325.000000,-125.000000,-275.000000,0.000000,"sapper"};
@ -35,12 +35,12 @@ item30[] = {"stalking",4,218,-50.000000,50.000000,50.000000,100.000000,5.000000,
item31[] = {"Wait_random",4,218,-225.000000,-200.000000,-125.000000,-150.000000,10.000000,"Wait random"};
item32[] = {"groan",4,218,200.000000,375.000000,300.000000,425.000000,5.000000,"groan"};
item33[] = {"detonate",4,218,125.000000,-350.000000,225.000000,-300.000000,70.000000,"detonate"};
item34[] = {"end",1,250,975.000000,0.000000,1075.000000,50.000000,0.000000,"end"};
item35[] = {"Wait_to_delete",4,218,975.000000,150.000000,1075.000000,200.000000,10.000000,"Wait to delete"};
item34[] = {"end",1,250,1050.000000,-25.000000,1150.000000,25.000000,0.000000,"end"};
item35[] = {"Wait_to_delete",4,218,1050.000000,125.000000,1150.000000,175.000000,10.000000,"Wait to delete"};
item36[] = {"handle_dispose",2,250,525.000000,125.000000,625.000000,175.000000,0.000000,"handle dispose"};
item37[] = {"Wait_1_5_sec",4,218,650.000000,300.000000,750.000000,350.000000,0.000000,"Wait" \n "1.5 sec"};
item38[] = {"do_boom",2,4346,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
item39[] = {"_",8,218,800.000000,300.000000,850.000000,325.000000,0.000000,""};
item37[] = {"Wait_1_5_sec",4,218,525.000000,350.000000,625.000000,400.000000,0.000000,"Wait" \n "1.5 sec"};
item38[] = {"do_boom",2,250,650.000000,225.000000,750.000000,275.000000,0.000000,"do boom"};
item39[] = {"_",8,218,800.000000,225.000000,875.000000,275.000000,0.000000,""};
item40[] = {"do_groan",2,250,225.000000,500.000000,325.000000,550.000000,0.000000,"do groan"};
item41[] = {"do_stalk",2,250,-200.000000,50.000000,-100.000000,100.000000,0.000000,"do stalk"};
item42[] = {"do_loiter_big",2,250,350.000000,500.000000,450.000000,550.000000,0.000000,"do loiter big"};
@ -63,7 +63,9 @@ item58[] = {"feeling",4,218,775.000000,-50.000000,875.000000,0.000000,50.000000,
item59[] = {"charging",4,218,-50.000000,225.000000,50.000000,275.000000,5.000000,"charging"};
item60[] = {"stalk",4,218,375.000000,-275.000000,475.000000,-225.000000,20.000000,"stalk"};
item61[] = {"not_shot",4,218,900.000000,125.000000,1000.000000,175.000000,10.000000,"not shot"};
item62[] = {"finished_boom",2,250,900.000000,225.000000,1000.000000,275.000000,0.000000,"finished boom"};
item62[] = {"finished_boom",2,250,900.000000,300.000000,1000.000000,350.000000,0.000000,"finished boom"};
item63[] = {"Wait_for_Explosi",4,218,650.000000,350.000000,750.000000,400.000000,0.000000,"Wait for Explosion"};
item64[] = {"Remove_corpse",2,4346,775.000000,300.000000,875.000000,350.000000,0.000000,"Remove corpse"};
link0[] = {0,31};
link1[] = {1,2};
link2[] = {2,3};
@ -126,7 +128,7 @@ link58[] = {35,34};
link59[] = {36,57};
link60[] = {36,61};
link61[] = {37,38};
link62[] = {38,39};
link62[] = {38,63};
link63[] = {39,62};
link64[] = {40,6};
link65[] = {41,30};
@ -154,8 +156,10 @@ link86[] = {59,4};
link87[] = {60,2};
link88[] = {61,62};
link89[] = {62,35};
globals[] = {25.000000,1,0,0,16777215,640,480,1,248,6316128,1,-343.543304,1069.998291,679.913574,-353.385406,1000,731,1};
window[] = {2,-1,-1,-1,-1,542,56,1081,17,3,1018};
link90[] = {63,64};
link91[] = {64,39};
globals[] = {25.000000,1,0,0,16777215,640,480,1,253,6316128,1,-209.204178,1204.337524,679.913574,-353.385406,1000,880,1};
window[] = {2,-1,-1,-1,-1,655,130,1155,130,3,1018};
*//*%FSM</HEAD>*/
class FSM
{
@ -1040,25 +1044,19 @@ class FSM
class do_boom
{
name = "do_boom";
init = /*%FSM<STATEINIT""">*/"" \n
"[_sBomb, player, Epoch_personalToken,_sapper,_sapper] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"" \n
"_sBomb = objNull;" \n
"" \n
"deleteVehicle _sapper;" \n
"" \n
init = /*%FSM<STATEINIT""">*/"[_sBomb, player, Epoch_personalToken,_sapper,_sapper] remoteExec [""EPOCH_server_handle_sapperObjs"",2];" \n
"_doneBoom = true;" \n
""/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
/*%FSM<LINK "Wait_for_Explosi">*/
class Wait_for_Explosi
{
priority = 0.000000;
to="finished_boom";
to="Remove_corpse";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
condition=/*%FSM<CONDITION""">*/"isNull(_sBomb)"/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
@ -1409,11 +1407,32 @@ class FSM
};
};
/*%FSM</STATE>*/
/*%FSM<STATE "Remove_corpse">*/
class Remove_corpse
{
name = "Remove_corpse";
init = /*%FSM<STATEINIT""">*/"deleteVehicle _sapper;"/*%FSM</STATEINIT""">*/;
precondition = /*%FSM<STATEPRECONDITION""">*/""/*%FSM</STATEPRECONDITION""">*/;
class Links
{
/*%FSM<LINK "_">*/
class _
{
priority = 0.000000;
to="finished_boom";
precondition = /*%FSM<CONDPRECONDITION""">*/""/*%FSM</CONDPRECONDITION""">*/;
condition=/*%FSM<CONDITION""">*/""/*%FSM</CONDITION""">*/;
action=/*%FSM<ACTION""">*/""/*%FSM</ACTION""">*/;
};
/*%FSM</LINK>*/
};
};
/*%FSM</STATE>*/
};
initState="sapper";
finalStates[] =
{
"end"
"end",
};
};
/*%FSM</COMPILE>*/
/*%FSM</COMPILE>*/

View File

@ -101,21 +101,20 @@ _unifiedInteract = {
switch _interactOption do {
case 0: {
_magCount = getNumber (_config >> "count");
_magazineSizeMax = getNumber (_config >> "count");
// allow repack for all magazines with greater than 1 bullet
if (_magCount > 1) then {
if (_magazineSizeMax > 1) then {
_ammoTotal = 0;
_magazineSize = 0;
_magazinesAmmoFull = magazinesAmmoFull player;
{
if (_item isEqualTo (_x select 0)) then {
_ammoTotal = _ammoTotal + (_x select 1);
if (!(_x select 2)) then {
_magazineSize = _magazineSize + (_x select 1);
};
};
} forEach _magazinesAmmoFull;
_magazineSize = _ammoTotal;
_magazineSizeMax = _magCount;
// remove all
player removeMagazines _item;
@ -123,12 +122,14 @@ switch _interactOption do {
for "_i" from 1 to floor (_magazineSize / _magazineSizeMax) do
{
player addMagazine [_item, _magazineSizeMax];
//diag_log format ["DEBUG: added full mag %1", _magazineSizeMax];
};
// Add last non full magazine
if ((_magazineSize % _magazineSizeMax) > 0) then {
player addMagazine [_item, floor (_magazineSize % _magazineSizeMax)];
//diag_log format ["DEBUG: added remainder %1", floor (_magazineSize % _magazineSizeMax)];
};
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Ammo Repacked</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
_dt = ["<t size='0.8' shadow='0' color='#99ffffff'>Ammo Repacked</t>", 0, 1, 5, 2, 0, 1] spawn bis_fnc_dynamictext;
};
};
case 1: _unifiedInteract; // Eat 1

View File

@ -53,7 +53,7 @@ if (!isNull EPOCH_currentTarget && vehicle player == player) then {
case 0: {
_stability = 100 - round(damage _currentTarget * 100);
_icon = "\x\addons\a3_epoch_code\Data\UI\loading_bar_%1.paa";
_text = "Press (Inventory)";
_text = "";
if (_stability < 50) then {
_color = [1, 0.5, 0, 0.7];

View File

@ -46,7 +46,7 @@ if !(isNull _this && alive _this) then {
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = true;
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "Snake2_random_EPOCH": {
@ -57,7 +57,7 @@ if !(isNull _this && alive _this) then {
_bleedAmount = 30;
_bloodpAmount = 3;
_soundEffect = "snake_bite0";
_canSee = true;
_canSee = !(lineIntersects[eyePos _this, aimPos player, _this, player]);
_ppEffect = 0;
};
case "GreatWhite_F": {

View File

@ -21,32 +21,6 @@ if (isNull _target) then {
};
if (!isNull _target) then {
if (alive _target) then {
/*
if ((_target isKindOf "LandVehicle") || (_target isKindOf "Air") || (_target isKindOf "Ship") || (_target isKindOf "Tank")) then {
_dialog = "InteractVehicle";
};
if (_ctrl) then {
if (_target isKindOf "Constructions_static_F" || _target isKindOf "Constructions_foundation_F") then {
_dialog = "InteractBaseBuilding";
};
};
*/
/*
if (_target isKindOf "Man") then {
if (_target != player) then {
if (!isPlayer _target) then {
if ((_target getVariable["AI_SLOT", -1]) != -1) then {
_dialog = "InteractNPC";
};
};
};
};
*/
};
if (_forceGear) then {
player action ["Gear", _target];
_handled = true;
@ -57,4 +31,4 @@ if (!isNull _target) then {
};
};
};
_handled
_handled

View File

@ -1,3 +1,5 @@
private["_ok"];
if (isNull _this) exitWith {};
if !(alive _this) exitWith {};
_ok = createdialog "MissionSelect";
if (!_ok) exitWith {};
if (!_ok) exitWith {};

View File

@ -1,14 +1,16 @@
private ["_index","_type","_config","_name","_picture","_qty","_items","_qtys","_ok","_vehicles","_aiItems","_target","_slot"];
_target = cursorTarget;
_slot = _target getVariable ["AI_SLOT",-1];
if (_slot != -1) then {
EPOCH_lastNPCtradeTarget = _target;
closeDialog 0;
_ok = createdialog "TradeNPCMenu";
if (!_ok) exitWith {};
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
{lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
lbSetCurSel[42100, 0];
lbSetCurSel[42101, 0];
};
if (alive _target) then {
_slot = _target getVariable ["AI_SLOT",-1];
if (_slot != -1) then {
EPOCH_lastNPCtradeTarget = _target;
closeDialog 0;
_ok = createdialog "TradeNPCMenu";
if (!_ok) exitWith {};
9992 cutRsc["EpochGameUI2", "PLAIN", 2, false];
((uiNamespace getVariable "EPOCH_EpochGameUI2") displayCtrl 21208) ctrlSetText format["%1", EPOCH_playerCrypto];
{lbAdd[42100,_x];lbAdd[42101,_x]} forEach ["All","Magazines","Items","Vehicles"];
lbSetCurSel[42100, 0];
lbSetCurSel[42101, 0];
};
};

View File

@ -25,9 +25,9 @@ private["_item", "_currQty", "_tradeType", "_itemWorth", "_aiItems", "_itemClass
if (!isNil "EPOCH_TRADE_COMPLETE") exitWith {};
if (!isNil "EPOCH_TRADE_STARTED") exitWith{};
if (!isNull _this) exitWith{};
if (!isNull _this) then {
if (alive _this) then {
_config = 'CfgPricing' call EPOCH_returnConfig;

View File

@ -24,8 +24,8 @@ class CfgActionMenu
dyna_distance = "(player distance dyna_cursorTarget) < 5";
dyna_buildMode = "([10] call EPOCH_fnc_cursorTarget) call EPOCH_checkBuild;";
dyna_isVehicle = "if !(isNull dyna_cursorTarget && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'LandVehicle') || (dyna_cursorTarget isKindOf 'Air') || (dyna_cursorTarget isKindOf 'Ship') || (dyna_cursorTarget isKindOf 'Tank'))} else {false}";
dyna_isTrader = "if !(isNull dyna_cursorTarget && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}";
dyna_isVehicle = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'LandVehicle') || (dyna_cursorTarget isKindOf 'Air') || (dyna_cursorTarget isKindOf 'Ship') || (dyna_cursorTarget isKindOf 'Tank'))} else {false}";
dyna_isTrader = "if (!(isNull dyna_cursorTarget) && alive dyna_cursorTarget) then {((dyna_cursorTarget isKindOf 'Man') && (dyna_cursorTarget != player) && (!isPlayer dyna_cursorTarget) && ((dyna_cursorTarget getVariable['AI_SLOT', -1]) != -1))} else {false}";
dyna_locked = "locked dyna_cursorTarget in [2,3]";
dyna_lockedInVehicle = "locked vehicle player in [2,3]";
};

File diff suppressed because it is too large Load Diff

View File

@ -513,6 +513,13 @@ class Epoch_Sapper_F: Epoch_Sapper_base_F
};
};
};
class Epoch_SapperG_F : Epoch_Sapper_F {
scope = 2;
displayName = "Sapper (Toxic)";
moves = "CfgMovesMaleSdr3";
hiddenSelections[] = {"camo","remains"};
hiddenSelectionsTextures[] = {"x\addons\a3_epoch_assets\textures\sapper\sapper_green_eco.paa",""};
};
class Epoch_SapperB_F : Epoch_Sapper_base_F
{
scope = 2;

View File

@ -115,10 +115,10 @@ class CfgAnimationSourceSounds
class CfgCommands
{
// allowedHTMLLoadURIs[] += // think this adds to an existing array
allowedHTMLLoadURIs[] =
// allowedHTMLLoadURIs[] += // think this adds to an existing array?
allowedHTMLLoadURIs[] +=
{
"https://raw.githubusercontent.com/epochmodteam/epoch/test/changelog.html" //there are some issues with capitalization used in github links
"http://epochmod.com*"
};
};

View File

@ -6,19 +6,23 @@
Improvements and or bugfixes and other contributions are welcome via the github:
https://github.com/EpochModTeam/Epoch/tree/master/Sources/epoch_server_settings/EpochEvents/Earthquake.sqf
*/
private ["_marker","_minerals","_randomIndex","_item","_plyrsNearEpicenter","_position"];
private ["_marker","_minerals","_randomIndex","_item","_plyrsNearEpicenter","_position","_chance"];
_position = [epoch_centerMarkerPosition, 0, EPOCH_dynamicVehicleArea, 10, 0, 1000, 0] call BIS_fnc_findSafePos;
if ((count _position) == 2) then{
_plyrsNearEpicenter = _position nearEntities[["Epoch_Male_F", "Epoch_Female_F"], 1000];
if !(_plyrsNearEpicenter isEqualTo[]) then{
if ((random 1) > 0.5) then{
// decrease chance with more players
_chance = linearConversion [1, 100, (count allPlayers), 0, 0.5, true];
if ((random 1) > _chance) then {
// send earthquake to each player in zone
{
[["earthQuake", _position], (owner _x)] call EPOCH_sendPublicVariableClient;
}forEach _plyrsNearEpicenter;
_minerals = ["MineralDepositCopper_EPOCH", "MineralDepositGold_EPOCH", "MineralDepositSilver_EPOCH"];
_randomIndex = floor(random(count _minerals));
_item = createVehicle[(_minerals select _randomIndex), _position, [], 0.0, "CAN_COLLIDE"];
if (EPOCH_showEarthQuakes) then{
_marker = createMarker[str(_position), _position];