diff --git a/MPMissions/DayZ_Epoch_11.Chernarus/description.ext b/MPMissions/DayZ_Epoch_11.Chernarus/description.ext index 2f361c10a..de4802aad 100644 --- a/MPMissions/DayZ_Epoch_11.Chernarus/description.ext +++ b/MPMissions/DayZ_Epoch_11.Chernarus/description.ext @@ -7,7 +7,8 @@ OnLoadMissionTime = False; disabledAI = true; disableChannels[]={0,1,2,6}; enableItemsDropping = 0; -onPauseScript = "onpause.sqf"; +onPauseScript = "\z\addons\dayz_code\compile\player_onPause.sqf"; + loadScreen = "\z\addons\dayz_code\gui\dayz_logo_ca.paa"; class Header diff --git a/MPMissions/DayZ_Epoch_11.Chernarus/onpause.sqf b/MPMissions/DayZ_Epoch_11.Chernarus/onpause.sqf deleted file mode 100644 index 0c1a52824..000000000 --- a/MPMissions/DayZ_Epoch_11.Chernarus/onpause.sqf +++ /dev/null @@ -1,34 +0,0 @@ -private["_display","_btnRespawn","_btnAbort","_timeOut","_timeMax"]; -disableSerialization; -_display = _this select 0; -_btnRespawn = _display displayCtrl 1010; -_btnAbort = _display displayCtrl 104; -_btnRespawn ctrlEnable false; -_btnAbort ctrlEnable false; -_timeOut = 0; -_timeMax = 30; - -while {!isNull _display} do { - switch true do { - case ({isPlayer _x} count (player nearEntities ["AllVehicles", 6]) > 1) : { - _btnAbort ctrlEnable false; - cutText ["Cannot Abort near another player!", "PLAIN DOWN"]; - }; - case (_timeOut < _timeMax && count (player nearEntities ["zZombie_Base", 50]) > 0) : { - _btnAbort ctrlEnable false; - cutText [format ["Can Abort in %1", (_timeMax - _timeOut)], "PLAIN DOWN"]; - _timeOut = _timeOut + 1; - - }; - case (player getVariable["combattimeout", 0] >= time) : { - _btnAbort ctrlEnable false; - cutText ["Cannot Abort while in combat!", "PLAIN DOWN"]; - }; - default { - _btnAbort ctrlEnable true; - cutText ["", "PLAIN DOWN"]; - }; - }; - sleep 1; -}; -cutText ["", "PLAIN DOWN"]; \ No newline at end of file diff --git a/MPMissions/DayZ_Epoch_3.Shapur_BAF/description.ext b/MPMissions/DayZ_Epoch_3.Shapur_BAF/description.ext index 6fe5a2bc4..9f543b107 100644 --- a/MPMissions/DayZ_Epoch_3.Shapur_BAF/description.ext +++ b/MPMissions/DayZ_Epoch_3.Shapur_BAF/description.ext @@ -7,7 +7,8 @@ OnLoadMissionTime = False; disabledAI = true; disableChannels[]={0,1,2,6}; enableItemsDropping = 0; -onPauseScript = "onpause.sqf"; +onPauseScript = "\z\addons\dayz_code\compile\player_onPause.sqf"; + loadScreen = "\z\addons\dayz_code\gui\dayz_logo_ca.paa"; class Header diff --git a/MPMissions/DayZ_Epoch_3.Shapur_BAF/onpause.sqf b/MPMissions/DayZ_Epoch_3.Shapur_BAF/onpause.sqf deleted file mode 100644 index 0c1a52824..000000000 --- a/MPMissions/DayZ_Epoch_3.Shapur_BAF/onpause.sqf +++ /dev/null @@ -1,34 +0,0 @@ -private["_display","_btnRespawn","_btnAbort","_timeOut","_timeMax"]; -disableSerialization; -_display = _this select 0; -_btnRespawn = _display displayCtrl 1010; -_btnAbort = _display displayCtrl 104; -_btnRespawn ctrlEnable false; -_btnAbort ctrlEnable false; -_timeOut = 0; -_timeMax = 30; - -while {!isNull _display} do { - switch true do { - case ({isPlayer _x} count (player nearEntities ["AllVehicles", 6]) > 1) : { - _btnAbort ctrlEnable false; - cutText ["Cannot Abort near another player!", "PLAIN DOWN"]; - }; - case (_timeOut < _timeMax && count (player nearEntities ["zZombie_Base", 50]) > 0) : { - _btnAbort ctrlEnable false; - cutText [format ["Can Abort in %1", (_timeMax - _timeOut)], "PLAIN DOWN"]; - _timeOut = _timeOut + 1; - - }; - case (player getVariable["combattimeout", 0] >= time) : { - _btnAbort ctrlEnable false; - cutText ["Cannot Abort while in combat!", "PLAIN DOWN"]; - }; - default { - _btnAbort ctrlEnable true; - cutText ["", "PLAIN DOWN"]; - }; - }; - sleep 1; -}; -cutText ["", "PLAIN DOWN"]; \ No newline at end of file diff --git a/dayz_code/actions/object_pickup.sqf b/dayz_code/actions/object_pickup.sqf index 59877f686..eed909cf9 100644 --- a/dayz_code/actions/object_pickup.sqf +++ b/dayz_code/actions/object_pickup.sqf @@ -32,7 +32,6 @@ _config = (configFile >> _type >> _classname); _isOk = [player,_config] call BIS_fnc_invAdd; if (_isOk) then { deleteVehicle _holder; -/* if (_classname in ["MeleeHatchet","MeleeCrowbar"]) then { if (_type == "cfgWeapons") then { @@ -45,7 +44,6 @@ if (_isOk) then { }; }; }; -*/ } else { _holder setVariable["claimed",0,true]; cutText [localize "STR_DAYZ_CODE_2", "PLAIN DOWN"]; diff --git a/dayz_code/actions/trade_backpacks.sqf b/dayz_code/actions/trade_backpacks.sqf index 174617179..b3d158d09 100644 --- a/dayz_code/actions/trade_backpacks.sqf +++ b/dayz_code/actions/trade_backpacks.sqf @@ -16,6 +16,13 @@ _bos = 0; if(_buy_o_sell == "buy") then { _qty = {_x == _part_in} count magazines player; } else { + + // SELL ONLY check if item is bulk + _bulkItem = "bulk_" + _part_in; + _bulkqty = {_x == _bulkItem} count magazines player; + + diag_log format["DEBUG bulk: %1", _bulkItem]; + _bos = 1; _qty = 0; _bag = unitBackpack player; @@ -25,44 +32,120 @@ if(_buy_o_sell == "buy") then { }; }; -if (_qty >= _qty_in) then { +if (_bulkqty >= 1) then { + + + // TODO: optimize for one db call only + + _part_in = "bulk_" + _part_in; + player removeMagazine _part_in; + diag_log format["DEBUG remove magazine %1", _part_in]; - ["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure; + // increment trader for each + for "_x" from 1 to 12 do { + ["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure; + + waitUntil {!isNil "dayzTradeResult"}; - diag_log format["DEBUG Starting to wait for answer: %1", dayzTradeObject]; + if(dayzTradeResult == "PASS") then { + diag_log format["DEBUG Complete Trade: %1", dayzTradeResult]; + }; + }; - waitUntil {!isNil "dayzTradeResult"}; + _qty_out = _qty_out * 12; - diag_log format["DEBUG Complete Trade: %1", dayzTradeResult]; + // gold = 36 copper + // gold = 6 silver + // - if(dayzTradeResult == "PASS") then { - - if(_buy_o_sell == "buy") then { - for "_x" from 1 to _qty_in do { - player removeMagazine _part_in; + if (_part_out == "ItemSilverBar") then { + + if (_qty_out >= 6) then { + + // find number of gold + _gold_out = _qty_out / 6; + + // whole number of gold bars + _gold_qty_out = floor _gold_out; + + _part_out = "ItemGoldBar"; + for "_x" from 1 to _gold_qty_out do { + player addMagazine _part_out; }; - removeBackpack player; - player addBackpack _part_out; + + // Find remainder + _partial_qty_out = (_gold_out - _gold_qty_out) * 6; + + // whole number of gold bars + _silver_qty_out = floor _partial_qty_out; + + _part_out = "ItemSilverBar"; + for "_x" from 1 to _silver_qty_out do { + player addMagazine _part_out; + }; + + } else { - // Sell + for "_x" from 1 to _qty_out do { player addMagazine _part_out; - }; - removeBackpack player; - // player addBackpack _part_out; + }; }; - cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; + } else { + + for "_x" from 1 to _qty_out do { + player addMagazine _part_out; + }; + }; - {player removeAction _x} forEach s_player_parts;s_player_parts = []; - s_player_parts_crtl = -1; + cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; + + dayzTradeResult = nil; + + +} else { + + + if (_qty >= _qty_in) then { + + ["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure; + + diag_log format["DEBUG Starting to wait for answer: %1", dayzTradeObject]; + + waitUntil {!isNil "dayzTradeResult"}; + + diag_log format["DEBUG Complete Trade: %1", dayzTradeResult]; + + if(dayzTradeResult == "PASS") then { + + if(_buy_o_sell == "buy") then { + for "_x" from 1 to _qty_in do { + player removeMagazine _part_in; + }; + removeBackpack player; + player addBackpack _part_out; + } else { + // Sell + for "_x" from 1 to _qty_out do { + player addMagazine _part_out; + }; + removeBackpack player; + // player addBackpack _part_out; + }; + + cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; + + {player removeAction _x} forEach s_player_parts;s_player_parts = []; + s_player_parts_crtl = -1; + + } else { + cutText [format[("Insufficient Stock %1"),_textPartOut] , "PLAIN DOWN"]; + }; + dayzTradeResult = nil; } else { - cutText [format[("Insufficient Stock %1"),_textPartOut] , "PLAIN DOWN"]; + _needed = _qty_in - _qty; + cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; }; - dayzTradeResult = nil; - -} else { - _needed = _qty_in - _qty; - cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; }; \ No newline at end of file diff --git a/dayz_code/actions/trade_weapons.sqf b/dayz_code/actions/trade_weapons.sqf index f0a3e7151..858f5a172 100644 --- a/dayz_code/actions/trade_weapons.sqf +++ b/dayz_code/actions/trade_weapons.sqf @@ -17,52 +17,140 @@ if(_buy_o_sell == "buy") then { _qty = {_x == _part_in} count magazines player; } else { + // SELL ONLY check if item is bulk + _bulkItem = "bulk_" + _part_in; + _bulkqty = {_x == _bulkItem} count magazines player; + + diag_log format["DEBUG bulk: %1", _bulkItem]; + + _qty = {_x == _part_in} count weapons player; _bos = 1; }; -if (_qty >= _qty_in) then { - - - - ["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure; - - waitUntil {!isNil "dayzTradeResult"}; - - diag_log format["DEBUG Complete Trade: %1", dayzTradeResult]; - - if(dayzTradeResult == "PASS") then { - - for "_x" from 1 to _qty_in do { - if(_buy_o_sell == "buy") then { - player removeMagazine _part_in; - } else { - player removeWeapon _part_in; - }; - }; +if (_bulkqty >= 1) then { - for "_x" from 1 to _qty_out do { - if(_buy_o_sell == "buy") then { - player addWeapon _part_out; - } else { + + // TODO: optimize for one db call only + + _part_in = "bulk_" + _part_in; + player removeMagazine _part_in; + diag_log format["DEBUG remove magazine %1", _part_in]; + + // increment trader for each + for "_x" from 1 to 12 do { + ["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure; + + waitUntil {!isNil "dayzTradeResult"}; + + if(dayzTradeResult == "PASS") then { + diag_log format["DEBUG Complete Trade: %1", dayzTradeResult]; + }; + }; + + + + _qty_out = _qty_out * 12; + + // gold = 36 copper + // gold = 6 silver + // + + if (_part_out == "ItemSilverBar") then { + + if (_qty_out >= 6) then { + + // find number of gold + _gold_out = _qty_out / 6; + + // whole number of gold bars + _gold_qty_out = floor _gold_out; + + _part_out = "ItemGoldBar"; + for "_x" from 1 to _gold_qty_out do { + player addMagazine _part_out; + }; + + // Find remainder + _partial_qty_out = (_gold_out - _gold_qty_out) * 6; + + // whole number of gold bars + _silver_qty_out = floor _partial_qty_out; + + _part_out = "ItemSilverBar"; + for "_x" from 1 to _silver_qty_out do { + player addMagazine _part_out; + }; + + + } else { + + for "_x" from 1 to _qty_out do { player addMagazine _part_out; }; }; - - - // [player,"repair",0,false] call dayz_zombieSpeak; - cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; - - {player removeAction _x} forEach s_player_parts;s_player_parts = []; - s_player_parts_crtl = -1; } else { - cutText [format[("Insufficient Stock %1"),_textPartOut] , "PLAIN DOWN"]; + + for "_x" from 1 to _qty_out do { + player addMagazine _part_out; + }; }; + + + + + + + cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; + dayzTradeResult = nil; } else { - _needed = _qty_in - _qty; - cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; + + + if (_qty >= _qty_in) then { + + ["dayzTradeObject",[_activatingPlayer,_traderID,_bos]] call callRpcProcedure; + + waitUntil {!isNil "dayzTradeResult"}; + + diag_log format["DEBUG Complete Trade: %1", dayzTradeResult]; + + if(dayzTradeResult == "PASS") then { + + for "_x" from 1 to _qty_in do { + if(_buy_o_sell == "buy") then { + player removeMagazine _part_in; + } else { + player removeWeapon _part_in; + }; + }; + + for "_x" from 1 to _qty_out do { + if(_buy_o_sell == "buy") then { + player addWeapon _part_out; + } else { + player addMagazine _part_out; + }; + }; + + + // [player,"repair",0,false] call dayz_zombieSpeak; + cutText [format[("Traded %1 %2 for %3 %4"),_qty_in,_textPartIn,_qty_out,_textPartOut], "PLAIN DOWN"]; + + {player removeAction _x} forEach s_player_parts;s_player_parts = []; + s_player_parts_crtl = -1; + + } else { + cutText [format[("Insufficient Stock %1"),_textPartOut] , "PLAIN DOWN"]; + }; + dayzTradeResult = nil; + + + } else { + _needed = _qty_in - _qty; + cutText [format[("Need %1 More %2"),_needed,_textPartIn] , "PLAIN DOWN"]; + }; }; \ No newline at end of file diff --git a/dayz_code/cfgVehicles.hpp b/dayz_code/cfgVehicles.hpp index 4b6de2b1a..76e1a3096 100644 --- a/dayz_code/cfgVehicles.hpp +++ b/dayz_code/cfgVehicles.hpp @@ -470,7 +470,7 @@ class Citizen1; // External class reference }; class Rocker2; class Rocker2_DZ: Rocker2 { - displayName = "Rocker Outfit"; + displayName = "Rocker"; side = 1; weapons[] = {"Throw","Put"}; backpack = ""; @@ -481,10 +481,10 @@ class Citizen1; // External class reference canHideBodies = 1; canCarryBackPack = 1; }; - - class BAF_Soldier_W; - class Soldier1_DZ: BAF_Soldier_W { - displayName = "Soldier"; + + class TK_INS_Warlord_EP1; + class TK_INS_Warlord_EP1_DZ: TK_INS_Warlord_EP1 { + displayName = "Takistani Warlord"; side = 1; weapons[] = {"Throw","Put"}; backpack = ""; @@ -494,6 +494,85 @@ class Citizen1; // External class reference weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; canHideBodies = 1; }; + + class TK_INS_Soldier_EP1; + class TK_INS_Soldier_EP1_DZ: TK_INS_Soldier_EP1 { + displayName = "Takistani Soldier"; + side = 1; + weapons[] = {"Throw","Put"}; + backpack = ""; + magazines[] = {}; + respawnWeapons[] = {"Throw","Put"}; + respawnMagazines[] = {}; + weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; + canHideBodies = 1; + }; + + class CZ_Special_Forces_GL_DES_EP1; + class CZ_Special_Forces_GL_DES_EP1_DZ: CZ_Special_Forces_GL_DES_EP1 { + displayName = "Special Forces"; + side = 1; + weapons[] = {"Throw","Put"}; + backpack = ""; + magazines[] = {}; + respawnWeapons[] = {"Throw","Put"}; + respawnMagazines[] = {}; + weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; + canHideBodies = 1; + }; + + class Drake_Light; + class Drake_Light_DZ: Drake_Light { + displayName = "Desert Camo"; + side = 1; + weapons[] = {"Throw","Put"}; + backpack = ""; + magazines[] = {}; + respawnWeapons[] = {"Throw","Put"}; + respawnMagazines[] = {}; + weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; + canHideBodies = 1; + }; + class Soldier_Bodyguard_AA12_PMC; + class Soldier_Bodyguard_AA12_PMC_DZ: Soldier_Bodyguard_AA12_PMC { + displayName = "Bodyguard"; + side = 1; + weapons[] = {"Throw","Put"}; + backpack = ""; + magazines[] = {}; + respawnWeapons[] = {"Throw","Put"}; + respawnMagazines[] = {}; + weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; + canHideBodies = 1; + }; + class Soldier_Sniper_PMC; + class Soldier_Sniper_PMC_DZ: Soldier_Sniper_PMC { + displayName = "Marksman"; + side = 1; + weapons[] = {"Throw","Put"}; + backpack = ""; + magazines[] = {}; + respawnWeapons[] = {"Throw","Put"}; + respawnMagazines[] = {}; + weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; + canHideBodies = 1; + }; + class Soldier_TL_PMC; + class Soldier_TL_PMC_DZ: Soldier_TL_PMC { + displayName = "Team Leader"; + side = 1; + weapons[] = {"Throw","Put"}; + backpack = ""; + magazines[] = {}; + respawnWeapons[] = {"Throw","Put"}; + respawnMagazines[] = {}; + weaponSlots = "1 + 4 + 12* 256 + 2* 4096 + 2 + 8* 16 + 12*131072"; + canHideBodies = 1; + }; + + + + class BAF_Soldier_SniperH_W; class Sniper1_DZ: BAF_Soldier_SniperH_W { displayName = "Sniper"; diff --git a/dayz_code/compile/fn_selfActions.sqf b/dayz_code/compile/fn_selfActions.sqf index d1a9ce143..316ec77eb 100644 --- a/dayz_code/compile/fn_selfActions.sqf +++ b/dayz_code/compile/fn_selfActions.sqf @@ -19,7 +19,9 @@ _hasmuttonRaw = "FoodmuttonRaw" in magazines player; _haschickenRaw = "FoodchickenRaw" in magazines player; _hasrabbitRaw = "FoodrabbitRaw" in magazines player; _hasbaconRaw = "FoodbaconRaw" in magazines player; -_hasRawMeat = _hasSteakRaw or _hasmuttonRaw or _hasrabbitRaw or _hasbaconRaw; +//Define all Raw food +_hasRawMeat = _hasSteakRaw or _hasmuttonRaw or _haschickenRaw or _hasrabbitRaw or _hasbaconRaw; + _hasKnife = "ItemKnife" in items player; _hasToolbox = "ItemToolbox" in items player; //_hasTent = "ItemTent" in items player; @@ -169,7 +171,7 @@ if (!isNull cursorTarget and !_inVehicle and (player distance cursorTarget < 4)) }; }; //Fireplace Actions check - if(inflamed cursorTarget and (_hasSteakRaw or _hasmuttonRaw or _hasrabbitRaw or _hasbaconRaw) and _canDo) then { + if(inflamed cursorTarget and (_hasSteakRaw or _hasmuttonRaw or _haschickenRaw or _hasrabbitRaw or _hasbaconRaw) and _canDo) then { if (s_player_cook < 0) then { s_player_cook = player addAction [localize "str_actions_self_05", "\z\addons\dayz_code\actions\cook.sqf",cursorTarget, 3, true, true, "", ""]; }; diff --git a/dayz_code/compile/player_onPause.sqf b/dayz_code/compile/player_onPause.sqf new file mode 100644 index 000000000..886bafe57 --- /dev/null +++ b/dayz_code/compile/player_onPause.sqf @@ -0,0 +1,44 @@ +private["_display","_btnRespawn","_btnAbort","_timeOut","_timeMax","_isDead"]; + disableSerialization; + waitUntil { + _display = findDisplay 49; + !isNull _display; + }; + _btnRespawn = _display displayCtrl 1010; + _btnAbort = _display displayCtrl 104; + _btnRespawn ctrlEnable false; + _btnAbort ctrlEnable false; + _timeOut = 0; + _timeMax = 30; + _isDead = !alive player; + + if(r_fracture_legs) exitWith {_btnRespawn ctrlEnable true;}; + if(_isDead) exitwith {_btnAbort ctrlEnable true;}; + + sleep 1; + while {!isNull _display} do { + switch true do { + case ({isPlayer _x} count (player nearEntities ["AllVehicles", 6]) > 1) : { + _btnAbort ctrlEnable false; + cutText ["Cannot Abort near another player!", "PLAIN DOWN"]; + }; + /* + case (_timeOut < _timeMax && count (player nearEntities ["zZombie_Base", 50]) > 0) : { + _btnAbort ctrlEnable false; + cutText [format ["Can Abort in %1", (_timeMax - _timeOut)], "PLAIN DOWN"]; + _timeOut = _timeOut + 1; + + }; + */ + case (player getVariable["combattimeout", 0] >= time) : { + _btnAbort ctrlEnable false; + cutText ["Cannot Abort while in combat!", "PLAIN DOWN"]; + }; + default { + _btnAbort ctrlEnable true; + cutText ["", "PLAIN DOWN"]; + }; + }; + sleep 3; + }; + cutText ["", "PLAIN DOWN"]; \ No newline at end of file diff --git a/dayz_code/config.cpp b/dayz_code/config.cpp index 5591c55e3..4c3476755 100644 --- a/dayz_code/config.cpp +++ b/dayz_code/config.cpp @@ -33,7 +33,7 @@ class CfgMods hidePicture = 0; hideName = 0; action = "http://www.dayepoch.com"; - version = "0.84"; + version = "0.85"; hiveVersion = 0.96; //0.93 }; }; @@ -52,6 +52,19 @@ class CfgAddons }; }; +class CfgAISkill { + aimingaccuracy[] = {0, 0, 1, 1}; + aimingshake[] = {0, 0, 1, 1}; + aimingspeed[] = {0, 0, 1, 1}; + commanding[] = {0, 0, 1, 1}; + courage[] = {0, 0, 1, 1}; + endurance[] = {0, 0, 1, 1}; + general[] = {0, 0, 1, 1}; + reloadspeed[] = {0, 0, 1, 1}; + spotdistance[] = {0, 0, 1, 1}; + spottime[] = {0, 0, 1, 1}; +}; + class CfgInGameUI { class PeripheralVision @@ -71,19 +84,19 @@ class CfgInGameUI colorCiv[] = {0,0,0,0}; //{0.8,0.8,0.8,1}; colorRes[] = {0,0,0,0}; //{0.7,0.7,0.95,1}; font = "EtelkaNarrowMediumPro"; - size = "0"; //"( 21 / 408 )"; + size = "( 21 / 408 )"; //"( 21 / 408 )"; class Columns { class Order { - width = 0; //0.046; - colorBg[] = {0,0,0,0}; //{0.1,0.27,0.1,0.8}; + width = 0.046; //0.046; + colorBg[] = {0.1,0.27,0.1,0.8}; //{0.1,0.27,0.1,0.8}; doubleLine = 0; }; class Player { - width = 0; //0.25; - colorBg[] = {0,0,0,0}; //{0.1,0.23,0.1,0.8}; + width = 0.25; //0.25; + colorBg[] = {0.1,0.23,0.1,0.8}; //{0.1,0.23,0.1,0.8}; doubleLine = 0; }; class KillsInfantry @@ -123,10 +136,10 @@ class CfgInGameUI }; class KillsTotal { - width = 0; //0.1; + width = 0.1; //0.1; doubleLine = 0; - colorBg[] = {0,0,0,0}; //{0.1,0.35,0.1,0.9}; - picture = ""; //"\ca\ui\data\stats_total_ca.paa"; + colorBg[] = {0.1,0.35,0.1,0.9}; //{0.1,0.35,0.1,0.9}; + picture = "\ca\ui\data\stats_total_ca.paa"; //"\ca\ui\data\stats_total_ca.paa"; }; }; }; @@ -195,14 +208,19 @@ class CfgSurvival { class Cow02: Cow{}; class Cow03: Cow{}; class Cow04: Cow{}; + class Cow01_EP1: Cow{}; class Goat: Default { yield = 4; rawfoodtype = "FoodSteakRaw"; }; + class Goat01_EP1: Goat{}; + class Goat02_EP1: Goat{}; class Sheep: Default { yield = 4; rawfoodtype = "FoodmuttonRaw"; }; + class Sheep01_EP1: Sheep{}; + class Sheep02_EP1: Sheep{}; class WildBoar: Default { yield = 4; rawfoodtype = "FoodbaconRaw"; @@ -211,14 +229,17 @@ class CfgSurvival { yield = 4; rawfoodtype = "FoodchickenRaw"; }; - class Cock: Default { - yield = 4; - rawfoodtype = "FoodchickenRaw"; + class Cock: Hen{}; + class DZ_Fin: Default { + yield = 0; + rawfoodtype = "FoodSteakRaw"; }; + class DZ_Pastor: DZ_Fin{}; class Rabbit: Default { yield = 4; rawfoodtype = "FoodrabbitRaw"; }; + }; class Skins { class Default { @@ -297,6 +318,40 @@ class CfgSurvival { sex = "female"; playerModel = "SurvivorW3_DZ"; }; + class Skin_Soldier_TL_PMC_DZ: Default { + sex = "male"; + playerModel = "Soldier_TL_PMC_DZ"; + }; + + class Skin_Soldier_Sniper_PMC_DZ: Default { + sex = "male"; + playerModel = "Soldier_Sniper_PMC_DZ"; + }; + + class Skin_Soldier_Bodyguard_AA12_PMC_DZ: Default { + sex = "male"; + playerModel = "Soldier_Bodyguard_AA12_PMC_DZ"; + }; + + class Skin_Drake_Light_DZ: Default { + sex = "male"; + playerModel = "Drake_Light_DZ"; + }; + + class Skin_CZ_Special_Forces_GL_DES_EP1_DZ: Default { + sex = "male"; + playerModel = "CZ_Special_Forces_GL_DES_EP1_DZ"; + }; + + class Skin_TK_INS_Soldier_EP1_DZ: Default { + sex = "male"; + playerModel = "TK_INS_Soldier_EP1_DZ"; + }; + + class Skin_TK_INS_Warlord_EP1_DZ: Default { + sex = "male"; + playerModel = "TK_INS_Warlord_EP1_DZ"; + }; @@ -573,7 +628,10 @@ class CfgBuildingLoot { {"G36K_camo","weapon"}, {"100Rnd_762x54_PK","magazine"}, { "Skin_Rocket_DZ","magazine" }, - { "Skin_Soldier1_DZ","magazine" } + { "Skin_Soldier1_DZ","magazine" }, + { "Skin_Soldier_TL_PMC_DZ","magazine" }, + { "Skin_Soldier_Sniper_PMC_DZ","magazine" }, + { "Skin_Soldier_Bodyguard_AA12_PMC_DZ","magazine" }, }; itemChance[] = { 0.02, //{"FN_FAL","weapon"}, @@ -601,7 +659,10 @@ class CfgBuildingLoot { 0.02, //G36K_camo 0.01, //("100Rnd_762x54_PK","magazine"} 0.01, - 0.05 + 0.05, + 0.02, // Skin_Soldier_TL_PMC_DZ + 0.02, // Skin_Soldier_Sniper_PMC_DZ + 0.02, // Skin_Soldier_Bodyguard_AA12_PMC_DZ }; }; class HeliCrash_No50s: Default { @@ -841,6 +902,10 @@ class HeliCrash_No50s: Default { { "Skin_Bandit1_DZ","magazine" }, { "Skin_BanditW1_DZ","magazine" }, { "Skin_BanditW2_DZ","magazine" }, + { "Skin_Drake_Light_DZ","magazine" }, + { "Skin_CZ_Special_Forces_GL_DES_EP1_DZ","magazine" }, + { "Skin_TK_INS_Soldier_EP1_DZ","magazine" }, + { "Skin_TK_INS_Warlord_EP1","magazine" }, }; itemChance[] = { 0.10, @@ -900,6 +965,10 @@ class HeliCrash_No50s: Default { 0.01, 0.01, 0.01, + 0.01, + 0.01, + 0.03, + 0.01, }; }; class Church: Residential { diff --git a/dayz_code/init/compiles.sqf b/dayz_code/init/compiles.sqf index 8e3fb094c..0d3d3d3b4 100644 --- a/dayz_code/init/compiles.sqf +++ b/dayz_code/init/compiles.sqf @@ -219,12 +219,16 @@ if (!isDedicated) then { _success }; - dayz_spaceInterrupt = { private ["_dikCode", "_handled"]; + _DisplayOrDialogOrControl = _this select 0; _dikCode = _this select 1; + _shiftState = _this select 2; + _ctrlState = _this select 3; + _altState = _this select 4; _handled = false; DoRE = ({isPlayer _x} count (player nearEntities ["AllVehicles",500]) > 1); + if (_dikCode in (actionKeys "GetOver")) then { if (canRoll && animationState player in ["amovpercmrunslowwrfldf","amovpercmrunsraswrfldf","amovpercmevaslowwrfldf","amovpercmevasraswrfldf"]) then { canRoll = false; @@ -276,14 +280,13 @@ if (!isDedicated) then { dayz_lastCheckBit = time; [player,15,false,(getPosATL player)] spawn player_alertZombies; }; - /* + if ((_dikCode == 0x38 or _dikCode == 0xB8) and (time - dayz_lastCheckBit > 10)) then { call dayz_forceSave; }; + /* if (_dikCode in actionKeys "IngamePause") then { - call dayz_forceSave; - _id = [] spawn dayz_disableRespawn; - _id = [] spawn dayz_disableAbort; + _idOnPause = [] spawn dayz_onPause; }; */ _handled diff --git a/dayz_code/init/variables.sqf b/dayz_code/init/variables.sqf index 8880de3ed..333c37e0e 100644 --- a/dayz_code/init/variables.sqf +++ b/dayz_code/init/variables.sqf @@ -13,8 +13,25 @@ Camo1_DZ = "Camo1_DZ"; Soldier1_DZ = "Soldier1_DZ"; Rocket_DZ = "Rocket_DZ"; -AllPlayers = ["SurvivorW3_DZ","Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Soldier_Crew_PMC","Sniper1_DZ","Camo1_DZ","Soldier1_DZ","Rocket_DZ","Rocker2_DZ","Priest_DZ","Functionary1_EP1_DZ","GUE_Commander_DZ","Ins_Soldier_GL_DZ","Haris_Press_EP1_DZ","Pilot_EP1_DZ","RU_Policeman_DZ","pz_policeman","pz_suit1","pz_suit2","pz_worker1","pz_worker2","pz_worker3","pz_doctor","pz_teacher","pz_hunter","pz_villager1","pz_villager2","pz_villager3","pz_priest"]; -AllPlayersVehicles = ["SurvivorW3_DZ","Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Soldier_Crew_PMC","Sniper1_DZ","Camo1_DZ","Soldier1_DZ","Rocket_DZ","Rocker2_DZ","Priest_DZ","Functionary1_EP1_DZ","GUE_Commander_DZ","Ins_Soldier_GL_DZ","Haris_Press_EP1_DZ","Pilot_EP1_DZ","RU_Policeman_DZ","pz_policeman","pz_suit1","pz_suit2","pz_worker1","pz_worker2","pz_worker3","pz_doctor","pz_teacher","pz_hunter","pz_villager1","pz_villager2","pz_villager3","pz_priest","AllVehicles"]; +// more models +Rocker2_DZ = "Rocker2_DZ"; +Priest_DZ = "Priest_DZ"; +Functionary1_EP1_DZ = "Functionary1_EP1_DZ"; +GUE_Commander_DZ = "GUE_Commander_DZ"; +Ins_Soldier_GL_DZ = "Ins_Soldier_GL_DZ"; +Haris_Press_EP1_DZ = "Haris_Press_EP1_DZ"; +Pilot_EP1_DZ = "Pilot_EP1_DZ"; +RU_Policeman_DZ = "RU_Policeman_DZ"; +Soldier_TL_PMC_DZ = "Soldier_TL_PMC_DZ"; +Soldier_Sniper_PMC_DZ = "Soldier_Sniper_PMC_DZ"; +Soldier_Bodyguard_AA12_PMC_DZ = "Soldier_Bodyguard_AA12_PMC_DZ"; +Drake_Light_DZ = "Drake_Light_DZ"; +CZ_Special_Forces_GL_DES_EP1_DZ = "CZ_Special_Forces_GL_DES_EP1_DZ"; +TK_INS_Soldier_EP1_DZ = "TK_INS_Soldier_EP1_DZ"; +TK_INS_Warlord_EP1_DZ = "TK_INS_Warlord_EP1_DZ"; + +AllPlayers = ["SurvivorW3_DZ","Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Soldier_Crew_PMC","Sniper1_DZ","Camo1_DZ","Soldier1_DZ","Rocket_DZ","Rocker2_DZ","Priest_DZ","Functionary1_EP1_DZ","GUE_Commander_DZ","Ins_Soldier_GL_DZ","Haris_Press_EP1_DZ","Pilot_EP1_DZ","RU_Policeman_DZ","pz_policeman","pz_suit1","pz_suit2","pz_worker1","pz_worker2","pz_worker3","pz_doctor","pz_teacher","pz_hunter","pz_villager1","pz_villager2","pz_villager3","pz_priest","Soldier_TL_PMC_DZ","Soldier_Sniper_PMC_DZ","Soldier_Bodyguard_AA12_PMC_DZ","Drake_Light_DZ","CZ_Special_Forces_GL_DES_EP1_DZ","TK_INS_Soldier_EP1_DZ","TK_INS_Warlord_EP1_DZ"]; +AllPlayersVehicles = ["SurvivorW3_DZ","Bandit1_DZ","BanditW1_DZ","BanditW2_DZ","Soldier_Crew_PMC","Sniper1_DZ","Camo1_DZ","Soldier1_DZ","Rocket_DZ","Rocker2_DZ","Priest_DZ","Functionary1_EP1_DZ","GUE_Commander_DZ","Ins_Soldier_GL_DZ","Haris_Press_EP1_DZ","Pilot_EP1_DZ","RU_Policeman_DZ","pz_policeman","pz_suit1","pz_suit2","pz_worker1","pz_worker2","pz_worker3","pz_doctor","pz_teacher","pz_hunter","pz_villager1","pz_villager2","pz_villager3","pz_priest","Soldier_TL_PMC_DZ","Soldier_Sniper_PMC_DZ","Soldier_Bodyguard_AA12_PMC_DZ","Drake_Light_DZ","CZ_Special_Forces_GL_DES_EP1_DZ","TK_INS_Soldier_EP1_DZ","TK_INS_Warlord_EP1_DZ","AllVehicles"]; PZombie_VB = "PZombie_VB"; diff --git a/dayz_code/rscTitles.hpp b/dayz_code/rscTitles.hpp index 79404be2b..23fae4755 100644 --- a/dayz_code/rscTitles.hpp +++ b/dayz_code/rscTitles.hpp @@ -87,7 +87,7 @@ class RscDisplayMain : RscStandardDisplay class DAYZ_Version : CA_Version { idc = -1; - text = "DayZ Epoch 0.84 (1.7.5.M1D25)"; + text = "DayZ Epoch 0.85 (1.7.5.M1D25)"; y = "(SafeZoneH + SafeZoneY) - (1 - 0.95)"; }; class CA_TitleMainMenu; diff --git a/dayz_code/system/zombie_agent.fsm b/dayz_code/system/zombie_agent.fsm index 7564b392b..1ea03c056 100644 --- a/dayz_code/system/zombie_agent.fsm +++ b/dayz_code/system/zombie_agent.fsm @@ -6,7 +6,7 @@ item1[] = {"End",1,250,50.000000,-250.000000,150.000000,-200.000000,0.000000,"En item2[] = {"Not_Alive",4,218,0.000000,300.000000,100.000000,350.000000,5.000000,"Not" \n "Alive"}; item3[] = {"Nobody_Near",4,218,0.000000,375.000000,100.000000,425.000000,4.000000,"Nobody" \n "Near"}; item4[] = {"loiter",4,218,-300.000000,0.000000,-200.000000,50.000000,0.000000,"loiter"}; -item5[] = {"Loiter",2,250,-300.000000,75.000000,-200.000000,125.000000,0.000000,"Loiter"}; +item5[] = {"Loiter",2,4346,-300.000000,75.000000,-200.000000,125.000000,0.000000,"Loiter"}; item6[] = {"In_Position",4,218,-175.000000,75.000000,-75.000000,125.000000,1.000000,"In Position"}; item7[] = {"",7,210,-29.000042,321.000000,-20.999958,329.000000,0.000000,""}; item8[] = {"",7,210,-29.000042,395.999939,-20.999958,404.000061,0.000000,""}; @@ -15,7 +15,7 @@ item10[] = {"Begin",2,250,-300.000000,-100.000000,-200.000000,-50.000000,0.00000 item11[] = {"",7,210,-254.000046,-29.000004,-245.999954,-20.999996,0.000000,""}; item12[] = {"",7,210,-204.000046,146.000000,-195.999954,154.000000,0.000000,""}; item13[] = {"Has_Target",4,218,-150.000000,225.000000,-50.000000,275.000000,1.000000,"Has" \n "Target"}; -item14[] = {"Chase",2,4346,-150.000000,300.000000,-50.000000,350.000000,0.000000,"Chase"}; +item14[] = {"Chase",2,250,-150.000000,300.000000,-50.000000,350.000000,0.000000,"Chase"}; item15[] = {"",7,210,-29.000006,146.000000,-20.999996,154.000000,0.000000,""}; item16[] = {"",7,210,-29.000006,196.000000,-20.999996,204.000000,0.000000,""}; item17[] = {"",7,210,-104.000000,196.000000,-95.999992,204.000000,0.000000,""}; @@ -93,14 +93,13 @@ link45[] = {34,5}; link46[] = {35,37}; link47[] = {36,35}; link48[] = {37,31}; -link49[] = {38,17}; -link50[] = {38,39}; -link51[] = {39,22}; -link52[] = {40,28}; -link53[] = {41,5}; -link54[] = {42,1}; +link49[] = {38,39}; +link50[] = {39,22}; +link51[] = {40,28}; +link52[] = {41,5}; +link53[] = {42,1}; globals[] = {25.000000,1,0,0,0,640,480,1,101,6316128,1,-671.713867,363.212036,788.169373,-84.187515,713,601,1}; -window[] = {2,-1,-1,-32000,-32000,865,154,1362,154,3,730}; +window[] = {2,-1,-1,-32000,-32000,799,88,1296,88,3,730}; *//*%FSM*/ class FSM { @@ -169,14 +168,17 @@ class FSM init = /*%FSM*/"_isAlive = alive _agent;" \n "_target = _agent call zombie_findTargetAgent;" \n "" \n + "_agent setBehaviour ""SAFE"";" \n + "_agent setCombatMode ""BLUE"";" \n "_agent forceSpeed 2;" \n + "_agent setSkill 0;" \n "" \n "_newDest = _agent getVariable [""myDest"",getposATL _agent];" \n "if (!isNil ""_newDest"") then {" \n " if (_newDest distance _myDest > 0) then {" \n " _myDest = _newDest;" \n " _agent moveTo _myDest;" \n - " _agent forceSpeed 2;" \n + "// _agent forceSpeed 2;" \n " };" \n "};" \n "" \n @@ -287,6 +289,7 @@ class FSM "" \n "_hasMoved = _doLoiter;" \n "" \n + "" \n "_agent disableAI ""FSM"";" \n "_newDest = getPosATL _agent;" \n "_timeN = time;" \n @@ -339,8 +342,11 @@ class FSM "_isAlive = alive _agent;" \n "_targetPos = getPosATL _target;" \n "" \n + "" \n "//Move to target" \n "" \n + "_agent setBehaviour ""CARELESS"";" \n + "_agent setCombatMode ""RED"";" \n "_agent moveTo _targetPos;" \n "_agent forceSpeed 6;" \n "" \n @@ -404,7 +410,7 @@ class FSM priority = 0.000000; to="Chase"; precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"(time - _timeN) > 1"/*%FSM*/; + condition=/*%FSM*/"(time - _timeN) > 2"/*%FSM*/; action=/*%FSM*/"_losCheck = _losCheck + 1;"/*%FSM*/; }; /*%FSM*/ @@ -508,29 +514,6 @@ class FSM precondition = /*%FSM*/""/*%FSM*/; class Links { - /*%FSM*/ - class Has_Target - { - priority = 1.000000; - to="Chase"; - precondition = /*%FSM*/""/*%FSM*/; - condition=/*%FSM*/"!(isNull _target)"/*%FSM*/; - action=/*%FSM*/"//Leader cries out" \n - "if (_isSomeone) then {" \n - " [_agent,""spotted"",2,true] call dayz_zombieSpeak;" \n - "};" \n - "if (!_hasMoved) then {" \n - " _agent setVariable[""doLoiter"",true,true];" \n - "};" \n - "" \n - "//Enable combat timer." \n - "_target setVariable[""startcombattimer"", 1, true];" \n - "" \n - "_countr = 0;" \n - "_losCheck = 0;" \n - "_cantSee = false;"/*%FSM*/; - }; - /*%FSM*/ /*%FSM*/ class No_target { diff --git a/dayz_equip/config.cpp b/dayz_equip/config.cpp index 454b4c3eb..7bc945e32 100644 --- a/dayz_equip/config.cpp +++ b/dayz_equip/config.cpp @@ -1115,6 +1115,49 @@ class CfgMagazines displayName = "Civilian (female)"; descriptionShort = "Civilian (female)"; }; + + class Skin_TK_INS_Warlord_EP1_DZ: SkinBase + { + scope = 2; + displayName = "Takistani Warlord"; + descriptionShort = "Takistani Warlord"; + }; + class Skin_TK_INS_Soldier_EP1_DZ: SkinBase + { + scope = 2; + displayName = "Takistani Soldier"; + descriptionShort = "Takistani Soldier"; + }; + class Skin_CZ_Special_Forces_GL_DES_EP1_DZ: SkinBase + { + scope = 2; + displayName = "Special Forces"; + descriptionShort = "Special Forces"; + }; + class Skin_Drake_Light_DZ: SkinBase + { + scope = 2; + displayName = "Desert Camo"; + descriptionShort = "Desert Camo"; + }; + class Skin_Soldier_Bodyguard_AA12_PMC_DZ: SkinBase + { + scope = 2; + displayName = "Bodyguard"; + descriptionShort = "Bodyguard"; + }; + class Skin_Soldier_Sniper_PMC_DZ: SkinBase + { + scope = 2; + displayName = "Marksman"; + descriptionShort = "Marksman"; + }; + class Skin_Soldier_TL_PMC_DZ: SkinBase + { + scope = 2; + displayName = "Team Leader"; + descriptionShort = "Team Leader"; + }; @@ -1478,26 +1521,37 @@ class CfgMagazines picture = "\dayz_equip\textures\equip_jerrycan_e_ca.paa"; descriptionShort = "$STR_EQUIP_DESC_39"; }; - class bulk_NVGoggles: CA_Magazine + + class bulk: CA_Magazine { scope = 2; - count = 12; + count = 1; type = "(256 * 6)"; displayName = "Supply Crate"; model = "\dayz_equip\models\supply_crate.p3d"; picture = "\dayz_equip\textures\equip_wooden_crate_ca.paa"; + descriptionShort = "12 x Random Item"; + }; + class bulk_NVGoggles: bulk + { descriptionShort = "12 x NV Goggles"; }; - class bulk_30Rnd_9x19_MP5SD: CA_Magazine + class bulk_DZ_Backpack_EP1: bulk + { + descriptionShort = "12 x DZ_Backpack_EP1"; + }; + class bulk_30Rnd_9x19_MP5SD: bulk { - scope = 2; - count = 12; - type = "(256 * 6)"; - displayName = "Supply Crate"; - model = "\dayz_equip\models\supply_crate.p3d"; - picture = "\dayz_equip\textures\equip_wooden_crate_ca.paa"; descriptionShort = "12 x 30Rnd_9x19_MP5SD"; }; + class bulk_15Rnd_9x19_M9SD: bulk + { + descriptionShort = "12 x 15Rnd_9x19_M9SD"; + }; + class bulk_30Rnd_556x45_StanagSD: bulk + { + descriptionShort = "12 x 30Rnd_556x45_StanagSD"; + }; class ItemGenerator: CA_Magazine { scope = 2; diff --git a/dayz_server/compile/server_playerLogin.sqf b/dayz_server/compile/server_playerLogin.sqf index 34dab9ae4..810595409 100644 --- a/dayz_server/compile/server_playerLogin.sqf +++ b/dayz_server/compile/server_playerLogin.sqf @@ -8,6 +8,8 @@ _playerObj = _this select 1; _playerName = name _playerObj; _worldspace = []; +if (_playerName == '__SERVER__' || _playerID == '' || local player) exitWith {}; + if (count _this > 2) then { dayz_players = dayz_players - [_this select 2]; }; diff --git a/dayz_server/system/server_monitor.sqf b/dayz_server/system/server_monitor.sqf index c8c6d71c9..7ccb5f910 100644 --- a/dayz_server/system/server_monitor.sqf +++ b/dayz_server/system/server_monitor.sqf @@ -2,6 +2,18 @@ dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version"); dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion"); +_script = getText(missionConfigFile >> "onPauseScript"); + +if (_script != "") then +{ + diag_log "MISSION: File Updated"; +} else { + while {true} do + { + diag_log "MISSION: File Needs Updating"; + sleep 1; + }; +}; serverVehicleCounter = [];