Нужна помощь?
Создайте тему в соответствующем разделе
Не нужно писать всё в чат!Загляните на торговую площадку
Там вы можете купить
всё что касается игровых серверовНе хотите бан?
Пожалуйста, ознакомьтесь с нашими правилами
Не нарушайте порядок!Продаёте или покупаете?
Пользуйтесь услугами гаранта
Мы сделаем вашу сделку безопасной
- 0
Проблема с единой валютой 3.0 и Plot Management
Спросил
Marc
-
Наш выбор
-
Создаем свой серверный мод. [DayZ 1.4 to Discontined]
123new опубликовал тему в Версия 1.0 и выше,
-
Увеличение карты х2
vitacite опубликовал тему в Картостроение,
Уважаемы гуру в области скрипто писания прошу помощи.
Проблема заключается в следующем на чистый сервер dayz epoch (1.0.5.1-112555) установлены скрипты по очереди:
1) Antihack 08.03.15 infiSTAR by TheFirstNoob (No CD) Version 3.1
2) [Single Currency v3.0 DEFAULT HIVE] - Единая валюта на сервере по гайду ссылка
3) Plot for Life v2.35 + SnapPro v1.4 + DayzBuildVectors-master по гайду ссылка
Все выше перечисленное работает стабильно, векторы, прилипания, все сохраняется вращается, единая валют тоже работает без нареканий и ошибок в рпт.
Проблема началась после установки менеджера плота на это все дело ставил по гайду ссылка
Проблема заключается в следующем ставлю для теста сейф, локбок, палатку, тачку , 30м плот , пару стенок,
кладу везде по чучуть денег потом также забераю денги проблем нет все работоет до рестарта.
Перед рестом нанашу урон через базу данных постройкам, для теста оплаты в менеджере плота и тут начинается коллапс.(
после реста при попытки снять деньги с сейфа , тачки и тд. Обекты проподаю сейфы, машины, локбоксы
просто исчезают, причем количество денег не изменяется в базе данных после реста объекты возвращаются на свои места ну при попытки повторно снять деньги также исчезаю))
Оплата построек работать тоже странно, можно бесконечно оплачивать постройки деньги снимают, а все равно в базе данных нет изменений, демаг построек как был так и остался))
Понятно деле где-то накосячил, занимаюсь разработкай сервера совсем недавно в скриптах не селен, прошу помоч решить мою проблему мучаюсь уже неделю.((
Вот список файлов в которые были изменен код в ходу установке менеджера плота:
compiles.sqf
/* FUNCTION COMPILES */ //Player only if (!isDedicated) then { MaintainPlot = compile preprocessFileLineNumbers "plotManagement\maintain_area.sqf"; PlotPreview = compile preprocessFileLineNumbers "plotManagement\plotToggleMarkers.sqf"; PlotObjects = compile preprocessFileLineNumbers "plotManagement\plotObjects.sqf"; // NEW /*Plot*/ PlotGetFriends = compile preprocessFileLineNumbers "plotManagement\plotGetFriends.sqf"; PlotNearbyHumans = compile preprocessFileLineNumbers "plotManagement\plotNearbyHumans.sqf"; PlotAddFriend = compile preprocessFileLineNumbers "plotManagement\plotAddFriend.sqf"; PlotRemoveFriend = compile preprocessFileLineNumbers "plotManagement\plotRemoveFriend.sqf"; /*Plot End*/ "filmic" setToneMappingParams [0.07, 0.31, 0.23, 0.37, 0.011, 3.750, 6, 4]; setToneMapping "Filmic"; BIS_Effects_Burn = compile preprocessFile "\ca\Data\ParticleEffects\SCRIPTS\destruction\burn.sqf"; player_zombieCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieCheck.sqf"; //Run on a players computer, checks if the player is near a zombie player_zombieAttack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_zombieAttack.sqf"; //Run on a players computer, causes a nearby zombie to attack them fnc_usec_damageActions = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\fn_damageActions.sqf"; //Checks which actions for nearby casualty fnc_inAngleSector = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_inAngleSector.sqf"; //Checks which actions for nearby casualty fnc_usec_selfActions = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\fn_selfActions.sqf"; //Checks which actions for self fnc_usec_unconscious = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_unconscious.sqf"; player_temp_calculation = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_temperatur.sqf"; //Temperatur System //TeeChange player_weaponFiredNear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_weaponFiredNear.sqf"; player_animalCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_animalCheck.sqf"; player_spawnCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_spawnCheck.sqf"; player_dumpBackpack = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_dumpBackpack.sqf"; building_spawnLoot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\building_spawnLoot.sqf"; building_spawnZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\building_spawnZombies.sqf"; dayz_spaceInterrupt = compile preprocessFileLineNumbers "Custom\Snap_Pro\dayz_spaceInterrupt.sqf"; player_fired = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_fired.sqf"; //Runs when player fires. Alerts nearby Zeds depending on calibre && audial rating player_harvest = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_harvest.sqf"; player_packTent = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\player_packTent.sqf"; player_packVault = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\player_packVault.sqf"; player_unlockVault = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\player_unlockVault.sqf"; player_removeObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\remove.sqf"; player_removeNearby = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_removeNearby.sqf"; player_removeTankTrap = { //Object Array, Range, Error Message (@Skaronator) [["Hedgehog_DZ"], 1,"STR_EPOCH_ACTIONS_14"] call player_removeNearby; }; player_removeNet = { [["DesertCamoNet_DZ","ForestCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ"], 5,"str_epoch_player_8"] call player_removeNearby; }; player_login = { private ["_unit","_detail","_PUID"]; _unit = _this select 0; _detail = _this select 1; _PUID = [player] call FNC_GetPlayerUID; if(_unit == _PUID) then { player setVariable["publish",_detail]; }; }; player_unlockDoor = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_unlockDoor.sqf"; player_changeCombo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_changeCombo.sqf"; player_lockVault = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\player_lockVault.sqf"; player_updateGui = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\player_updateGui.sqf"; player_crossbowBolt = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_crossbowBolt.sqf"; player_music = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_music.sqf"; //Used to generate ambient music player_death = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_death.sqf"; player_switchModel = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_switchModel.sqf"; player_checkStealth = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_checkStealth.sqf"; world_sunRise = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_sunRise.sqf"; world_surfaceNoise = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_surfaceNoise.sqf"; player_humanityMorph = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_humanityMorph.sqf"; player_throwObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_throwObject.sqf"; player_alertZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_alertZombies.sqf"; player_fireMonitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\fire_monitor.sqf"; fn_gearMenuChecks = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_gearMenuChecks.sqf"; //Objects object_roadFlare = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_roadFlare.sqf"; object_setpitchbank = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_setpitchbank.sqf"; object_monitorGear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_monitorGear.sqf"; local_roadDebris = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_roadDebris.sqf"; //Zombies zombie_findTargetAgent = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_findTargetAgent.sqf"; zombie_loiter = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_loiter.sqf"; //Server compile, used for loiter behaviour zombie_generate = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\zombie_generate.sqf"; //Server compile, used for loiter behaviour wild_spawnZombies = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\wild_spawnZombies.sqf"; //Server compile, used for loiter behaviour pz_attack = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\pzombie\pz_attack.sqf"; dog_findTargetAgent = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\dog_findTargetAgent.sqf"; //actions player_countmagazines = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_countmagazines.sqf"; player_addToolbelt = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_addToolbelt.sqf"; player_copyKey = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_copyKey.sqf"; player_reloadMag = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_reloadMags.sqf"; player_loadCrate = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_loadCrate.sqf"; player_craftItem = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_craftItem.sqf"; player_tentPitch = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\tent_pitch.sqf"; player_vaultPitch = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\vault_pitch.sqf"; player_drink = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_drink.sqf"; player_eat = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_eat.sqf"; player_useMeds = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_useMeds.sqf"; player_fillWater = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\water_fill.sqf"; player_makeFire = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_makefire.sqf"; player_harvestPlant = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_harvestPlant.sqf"; player_goFishing = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_goFishing.sqf"; if (DZE_modularBuild) then { player_build = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\modular_build.sqf"; player_build_countNearby = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_countNearby.sqf"; player_build_states = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_states.sqf"; player_build_needNearby = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_needNearby.sqf"; player_build_getConfig = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_getConfig.sqf"; player_build_plotCheck = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_plotCheck.sqf"; player_build_buildReq = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_buildReq.sqf"; player_build_create = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_create.sqf"; player_build_controls = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_controls.sqf"; player_build_publish = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build_publish.sqf"; DZE_snap_build_file = "Custom\Snap_Pro\snap_build.sqf"; // Set as a global variable as it is also referenced in snapbuild.sqf snap_build = compile preprocessFileLineNumbers DZE_snap_build_file; } else { player_build = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\player_build.sqf"; }; FNC_check_owner = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Compile\fn_check_owner.sqf"; fnc_SetPitchBankYaw = compile preprocessFileLineNumbers "Custom\BuildVectors\fnc_SetPitchBankYaw.sqf"; DZE_build_vector_file = "Custom\BuildVectors\build_vectors.sqf"; build_vectors = compile preprocessFileLineNumbers DZE_build_vector_file; player_wearClothes = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_wearClothes.sqf"; object_pickup = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\object_pickup.sqf"; player_flipvehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_flipvehicle.sqf"; player_sleep = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\player_sleep.sqf"; player_antiWall = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_antiWall.sqf"; player_deathBoard = compile preprocessFileLineNumbers "\z\addons\dayz_code\actions\list_playerDeathsAlt.sqf"; player_plotPreview = compile preprocessFileLineNumbers "Custom\A_Plot_for_Life\Action\object_showPlotRadius.sqf"; player_upgradeVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_upgradeVehicle.sqf"; //ui player_selectSlot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_selectSlot.sqf"; player_gearSync = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSync.sqf"; player_gearSet = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_gearSet.sqf"; ui_changeDisplay = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_changeDisplay.sqf"; ui_gear_sound = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\ui_gear_sound.sqf"; //System player_monitor = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_monitor.sqf"; player_spawn_1 = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_spawn_1.sqf"; player_spawn_2 = compile preprocessFileLineNumbers "\z\addons\dayz_code\system\player_spawn_2.sqf"; onPreloadStarted "dayz_preloadFinished = false;"; onPreloadFinished "dayz_preloadFinished = true;"; // helper functions player_hasTools = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_hasTools.sqf"; player_checkItems = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_checkItems.sqf"; player_removeItems = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_removeItems.sqf"; //Trader ["Trader City Name",false,"enter"] - Trader City Name | Show Message | "enter" || "leave" player_traderCity = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderCity.sqf"; // combination of check && remove items player_checkAndRemoveItems = { private ["_items","_b"]; _items = _this; _b = _items call player_checkItems; if (_b) then { _b = _items call player_removeItems; }; _b }; dayz_HungerThirst = { dayz_hunger = dayz_hunger + (_this select 0); dayz_thirst = dayz_thirst + (_this select 1); }; epoch_totalCurrency = { // total currency _total_currency = 0; { _part = (configFile >> "CfgMagazines" >> _x); _worth = (_part >> "worth"); if isNumber (_worth) then { _total_currency = _total_currency + getNumber(_worth); }; } count (magazines player); _total_currency }; epoch_itemCost = { _trade_total = 0; { _part_in_configClass = configFile >> "CfgMagazines" >> (_x select 0); if (isClass (_part_in_configClass)) then { _part_inWorth = (_part_in_configClass >> "worth"); if isNumber (_part_inWorth) then { _trade_total = _trade_total + (getNumber(_part_inWorth) * (_x select 1)); }; }; } count _this; //diag_log format["DEBUG TRADER ITEMCOST: %1", _this]; _trade_total }; epoch_returnChange = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\epoch_returnChange.sqf"; // usage [["partinclassname",4]] call epoch_returnChange; dayz_losChance = { private["_agent","_maxDis","_dis","_val","_maxExp","_myExp"]; _agent = _this select 0; _dis = _this select 1; _maxDis = _this select 2; // diag_log ("VAL: " + str(_this)); _val = (_maxDis - _dis) max 0; _maxExp = ((exp 2) * _maxDis); _myExp = ((exp 2) * (_val)) / _maxExp; _myExp = _myExp * 0.7; _myExp }; ui_initDisplay = { private["_control","_ctrlBleed","_display","_ctrlFracture","_ctrlDogFood","_ctrlDogWater","_ctrlDogWaterBorder", "_ctrlDogFoodBorder"]; disableSerialization; _display = uiNamespace getVariable 'DAYZ_GUI_display'; _control = _display displayCtrl 1204; _control ctrlShow false; if (!r_player_injured) then { _ctrlBleed = _display displayCtrl 1303; _ctrlBleed ctrlShow false; }; if (!r_fracture_legs && !r_fracture_arms) then { _ctrlFracture = _display displayCtrl 1203; _ctrlFracture ctrlShow false; }; _ctrlDogFoodBorder = _display displayCtrl 1501; _ctrlDogFoodBorder ctrlShow false; _ctrlDogFood = _display displayCtrl 1701; _ctrlDogFood ctrlShow false; _ctrlDogWaterBorder = _display displayCtrl 1502; _ctrlDogWaterBorder ctrlShow false; _ctrlDogWater = _display displayCtrl 1702; _ctrlDogWater ctrlShow false }; dayz_losCheck = { private["_target","_agent","_cantSee"]; _target = _this select 0; // PUT THE PLAYER IN FIRST ARGUMENT!!!! _agent = _this select 1; _cantSee = true; if (!isNull _target) then { _tPos = visiblePositionASL _target; _zPos = visiblePositionASL _agent; _tPos set [2,(_tPos select 2)+1]; _zPos set [2,(_zPos select 2)+1]; if ((count _tPos > 0) && (count _zPos > 0)) then { _cantSee = terrainIntersectASL [_tPos, _zPos]; if (!_cantSee) then { _cantSee = lineIntersects [_tPos, _zPos, _agent, vehicle _target]; }; }; }; _cantSee }; dayz_equipCheck = { private ["_empty", "_needed","_diff","_success"]; _config = _this; _empty = [player] call BIS_fnc_invSlotsEmpty; _needed = [_config] call BIS_fnc_invSlotType; _diff = [_empty,_needed] call BIS_fnc_vectorDiff; _success = true; { if (_x > 0) then {_success = false}; } count _diff; hint format["Config: %5\nEmpty: %1\nNeeded: %2\nDiff: %3\nSuccess: %4",_empty,_needed,_diff,_success,_config]; _success }; vehicle_gear_count = { private["_counter"]; _counter = 0; { _counter = _counter + _x; } count _this; _counter }; player_tagFriendlyMsg = { if(player == (_this select 0)) then { cutText[(localize "str_epoch_player_2"),"PLAIN DOWN"]; }; }; player_serverModelChange = { private["_object","_model"]; _object = _this select 0; _model = _this select 1; if (_object == player) then { _model call player_switchModel; }; }; player_guiControlFlash = { private["_control"]; _control = _this; if (ctrlShown _control) then { _control ctrlShow false; } else { _control ctrlShow true; }; }; gearDialog_create = { private ["_i","_dialog"]; if (!isNull (findDisplay 106)) then { (findDisplay 106) closeDisplay 0; }; openMap false; closeDialog 0; if (gear_done) then {sleep 0.001;}; player action ["Gear", player]; if (gear_done) then {sleep 0.001;}; _dialog = findDisplay 106; _i = 0; while {isNull _dialog} do {//DO NOT CHANGE TO A FOR LOOP! _i = _i + 1; _dialog = findDisplay 106; if (gear_done) then {sleep 0.001;}; if (_i in [100,200,299]) then { closeDialog 0; player action ["Gear", player]; }; if (_i > 300) exitWith {}; }; if (gear_done) then {sleep 0.001;}; _dialog = findDisplay 106; if ((parseNumber(_this select 0)) != 0) then { ctrlActivate (_dialog displayCtrl 157); if (gear_done) then { waitUntil {ctrlShown (_dialog displayCtrl 159)}; sleep 0.001; }; }; _dialog }; gear_ui_offMenu = { private["_control","_parent","_menu"]; disableSerialization; _control = _this select 0; _parent = findDisplay 106; if (!(_this select 3)) then { for "_i" from 0 to 9 do { _menu = _parent displayCtrl (1600 + _i); _menu ctrlShow false; }; _grpPos = ctrlPosition _control; _grpPos set [3,0]; _control ctrlSetPosition _grpPos; _control ctrlShow false; _control ctrlCommit 0; }; }; dze_surrender_off = { player setVariable ["DZE_Surrendered", false, true]; DZE_Surrender = false; }; gear_ui_init = { private["_control","_parent","_menu","_dspl","_grpPos"]; disableSerialization; _parent = findDisplay 106; _control = _parent displayCtrl 6902; for "_i" from 0 to 9 do { _menu = _parent displayCtrl (1600 + _i); _menu ctrlShow false; }; _grpPos = ctrlPosition _control; _grpPos set [3,0]; _control ctrlSetPosition _grpPos; _control ctrlShow false; _control ctrlCommit 0; }; dayz_eyeDir = { private["_vval","_vdir"]; _vval = (eyeDirection _this); _vdir = (_vval select 0) atan2 (_vval select 1); if (_vdir < 0) then {_vdir = 360 + _vdir}; _vdir }; DZE_getModelName = { _objInfo = toArray(str(_this)); _lenInfo = count _objInfo - 1; _objName = []; _i = 0; // determine where the object name starts { if (58 == _objInfo select _i) exitWith {}; _i = _i + 1; } count _objInfo; _i = _i + 2; // skip the ": " part for "_k" from _i to _lenInfo do { _objName set [(count _objName), (_objInfo select _k)]; }; _objName = toLower(toString(_objName)); _objName }; dze_isnearest_player = { private ["_notClosest","_playerDistance","_nearPlayers","_obj","_playerNear"]; if(!isNull _this) then { _nearPlayers = _this nearEntities ["CAManBase", 12]; _playerNear = ({isPlayer _x} count _nearPlayers) > 1; _notClosest = false; if (_playerNear) then { // check if another player is closer _playerDistance = player distance _this; { if (_playerDistance > (_x distance _this)) exitWith { _notClosest = true; }; } count _nearPlayers; }; } else { _notClosest = false; }; _notClosest }; // trader menu code if (DZE_ConfigTrader) then { call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuConfig.sqf"; }else{ call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_traderMenuHive.sqf"; }; // recent murders menu code call compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_murderMenu.sqf"; //This is still needed but the fsm should terminate if any errors pop up. [] spawn { private["_timeOut","_display","_control1","_control2"]; disableSerialization; _timeOut = 0; dayz_loadScreenMsg = ""; diag_log "DEBUG: loadscreen guard started."; _display = uiNameSpace getVariable "BIS_loadingScreen"; if (!isNil "_display") then { _control1 = _display displayctrl 8400; _control2 = _display displayctrl 102; }; if (!isNil "dayz_DisplayGenderSelect") then { waitUntil {!dayz_DisplayGenderSelect}; }; // 120 sec timeout (12000 * 0.01) while { _timeOut < 12000 } do { if (dayz_clientPreload && dayz_authed) exitWith { diag_log "PLOGIN: Login loop completed!"; }; if (!isNil "_display") then { if ( isNull _display ) then { waitUntil { !dialog; }; startLoadingScreen ["","RscDisplayLoadCustom"]; _display = uiNameSpace getVariable "BIS_loadingScreen"; _control1 = _display displayctrl 8400; _control2 = _display displayctrl 102; }; if ( dayz_loadScreenMsg != "" ) then { _control1 ctrlSetText dayz_loadScreenMsg; dayz_loadScreenMsg = ""; }; _control2 ctrlSetText format["%1",round(_timeOut*0.01)]; }; _timeOut = _timeOut + 1; if (_timeOut >= 12000) then { 1 cutText [localize "str_player_login_timeout", "PLAIN DOWN"]; sleep 10; endLoadingScreen; endMission "END1"; }; sleep 0.01; }; }; dayz_meleeMagazineCheck = { private["_meleeNum","_magType"]; _magType = ([] + getArray (configFile >> "CfgWeapons" >> _wpnType >> "magazines")) select 0; _meleeNum = ({_x == _magType} count magazines player); if (_meleeNum < 1) then { player addMagazine _magType; }; }; dayz_originalPlayer = player; progressLoadingScreen 0.8; }; //Both BIS_fnc_selectRandom = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_selectRandom.sqf"; BIS_fnc_vectorAdd = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_vectorAdd.sqf"; BIS_fnc_halo = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_halo.sqf"; BIS_fnc_findNestedElement = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_findNestedElement.sqf"; BIS_fnc_param = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\BIS_fnc\fn_param.sqf"; fnc_buildWeightedArray = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_buildWeightedArray.sqf"; //Checks which actions for nearby casualty fnc_usec_damageVehicle = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerVehicle.sqf"; //Event handler run on damage // object_vehicleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_vehicleKilled.sqf"; //Event handler run on damage object_setHitServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setHitServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles) object_setFixServer = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setFixServer.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles) object_getHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_getHit.sqf"; //gets the hit value for a HitPoint (i.e. HitLegs) against the selection (i.e. "legs"), returns the value object_setHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_setHit.sqf"; //process the hit as a NORMAL damage (useful for persistent vehicles) object_processHit = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_processHit.sqf"; //process the hit in the REVO damage system (records && sets hit) object_delLocal = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_delLocal.sqf"; // object_cargoCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_cargoCheck.sqf"; //Run by the player || server to monitor changes in cargo contents fnc_usec_damageHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandler.sqf"; //Event handler run on damage fnc_veh_ResetEH = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\veh_ResetEH.sqf"; //Initialize vehicle // Vehicle damage fix vehicle_handleDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleDamage.sqf"; vehicle_handleKilled = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_handleKilled.sqf"; //fnc_vehicleEventHandler = compile preprocessFileLineNumbers "\z\addons\dayz_code\init\vehicle_init.sqf"; //Initialize vehicle fnc_inString = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_inString.sqf"; fnc_isInsideBuilding = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding; fnc_isInsideBuilding2 = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding2.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding2; fnc_isInsideBuilding3 = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_isInsideBuilding3.sqf"; //_isInside = [_unit,_building] call fnc_isInsideBuilding3; dayz_zombieSpeak = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\object_speak.sqf"; //Used to generate random speech for a unit vehicle_getHitpoints = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\vehicle_getHitpoints.sqf"; local_gutObject = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_gutObject.sqf"; //Generated on the server (|| local to unit) when gutting an object local_lockUnlock = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_lockUnlock.sqf"; //When vehicle is local to unit perform locking vehicle local_gutObjectZ = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_gutObjectZ.sqf"; //Generated on the server (|| local to unit) when gutting an object local_zombieDamage = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_damageHandlerZ.sqf"; //Generated by the client who created a zombie to track damage local_eventKill = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\local_eventKill.sqf"; //Generated when something is killed //player_weaponCheck = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_weaponCheck.sqf"; //Run by the player || server to monitor whether they have picked up a new weapon curTimeStr = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\fn_curTimeStr.sqf"; player_medBandage = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medBandaged.sqf"; player_medInject = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medInject.sqf"; player_medEpi = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medEpi.sqf"; player_medTransfuse = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medTransfuse.sqf"; player_medMorphine = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medMorphine.sqf"; player_breaklegs = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medBreakLegs.sqf"; player_medPainkiller = compile preprocessFileLineNumbers "\z\addons\dayz_code\medical\publicEH\medPainkiller.sqf"; world_isDay = {if ((daytime < (24 - dayz_sunRise)) && (daytime > dayz_sunRise)) then {true} else {false}}; player_humanityChange = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_humanityChange.sqf"; spawn_loot = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\spawn_loot.sqf"; spawn_loot_small = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\spawn_loot_small.sqf"; // player_projectileNear = compile preprocessFileLineNumbers "\z\addons\dayz_code\compile\player_projectileNear.sqf"; FNC_GetPlayerUID = { private ["_object","_version","_PID"]; _object = _this select 0; _version = productVersion select 3; if (DayZ_UseSteamID) then { _PID = GetPlayerUID _object; } else { if (_version >= 125548) then { _PID = call (compile "GetPlayerUIDOld _object"); } else { _PID = GetPlayerUID _object; diag_log format["Your game version, %1, is less than the required for the old UID system; using Steam ID system instead. Update to 1.63.125548 (or latest steam beta)", _version]; }; }; _PID }; FNC_GetSetPos = { //DO NOT USE IF YOU NEED ANGLE COMPENSATION!!!! private "_pos"; _thingy = _this select 0; _pos = getPosASL _thingy; if (surfaceIsWater _pos) then { _thingy setPosASL _pos; } else { _thingy setPosATL (ASLToATL _pos); }; }; FNC_GetPos = { private "_pos"; if (isNil {_this select 0}) exitWith {[0,0,0]}; _thingy = _this select 0; _pos = getPosASL _thingy; if !(surfaceIsWater _pos) then { _pos = ASLToATL _pos; }; _pos }; local_setFuel = { private["_qty","_vehicle"]; _vehicle = _this select 0; _qty = _this select 1; _vehicle setFuel _qty; }; zombie_initialize = { private ["_unit","_position"]; _unit = _this select 0; if (isServer) then { _unit addEventHandler ["local", {_this call zombie_findOwner}]; }; _id = _unit addeventhandler["HandleDamage", { _this call local_zombieDamage }]; _id = _unit addeventhandler["Killed", { [_this, "zombieKills"] call local_eventKill }]; }; dayz_EjectPlayer = { // check if player in vehicle private ["_noDriver","_vehicle","_inVehicle"]; _vehicle = vehicle player; _inVehicle = (_vehicle != player); if(_inVehicle) then { _noDriver = ((_vehicle emptyPositions "driver") > 0); if (_noDriver && (speed _vehicle) != 0) then { player action [ "eject", _vehicle]; }; }; }; player_sumMedical = { private["_character","_wounds","_legs","_arms","_medical"]; _character = _this; _wounds = []; if (_character getVariable["USEC_injured",false]) then { { if (_character getVariable[_x,false]) then { _wounds set [count _wounds,_x]; }; } count USEC_typeOfWounds; }; _legs = _character getVariable ["hit_legs",0]; _arms = _character getVariable ["hit_arms",0]; _medical = [ _character getVariable["USEC_isDead",false], _character getVariable["NORRN_unconscious", false], _character getVariable["USEC_infected",false], _character getVariable["USEC_injured",false], _character getVariable["USEC_inPain",false], _character getVariable["USEC_isCardiac",false], _character getVariable["USEC_lowBlood",false], _character getVariable["USEC_BloodQty",12000], _wounds, [_legs,_arms], _character getVariable["unconsciousTime",0], _character getVariable["messing",[0,0]] ]; _medical }; //Server Only if (isServer) then { call compile preprocessFileLineNumbers "\z\addons\dayz_server\init\server_functions.sqf"; } else { eh_localCleanup = {}; }; initialized = true;
variables.sqf
disableSerialization; if (isNil "DayZ_UseSteamID") then { DayZ_UseSteamID = true; }; //Model Variables Bandit1_DZ = "Bandit1_DZ"; Bandit2_DZ = "Bandit2_DZ"; BanditW1_DZ = "BanditW1_DZ"; BanditW2_DZ = "BanditW2_DZ"; Survivor1_DZ = "Survivor2_DZ"; Survivor2_DZ = "Survivor2_DZ"; SurvivorW2_DZ = "SurvivorW2_DZ"; SurvivorW3_DZ = "SurvivorW2_DZ"; Sniper1_DZ = "Sniper1_DZ"; Camo1_DZ = "Camo1_DZ"; Soldier1_DZ = "Soldier1_DZ"; Rocket_DZ = "Rocket_DZ"; AllPlayers = ["Survivor2_DZ","SurvivorWcombat_DZ","SurvivorWdesert_DZ","SurvivorWurban_DZ","SurvivorWsequishaD_DZ","SurvivorWsequisha_DZ","SurvivorWpink_DZ","SurvivorW3_DZ","SurvivorW2_DZ","Bandit1_DZ","Bandit2_DZ","BanditW1_DZ","BanditW2_DZ","Soldier_Crew_PMC","Sniper1_DZ","Camo1_DZ","Soldier1_DZ","Rocket_DZ","Rocker1_DZ","Rocker2_DZ","Rocker3_DZ","Rocker4_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","FR_OHara_DZ","FR_Rodriguez_DZ","CZ_Soldier_Sniper_EP1_DZ","Graves_Light_DZ","GUE_Soldier_MG_DZ","GUE_Soldier_Sniper_DZ","GUE_Soldier_Crew_DZ","GUE_Soldier_CO_DZ","GUE_Soldier_2_DZ","TK_Special_Forces_MG_EP1_DZ","TK_Soldier_Sniper_EP1_DZ","TK_Commander_EP1_DZ","RU_Soldier_Crew_DZ","INS_Lopotev_DZ","INS_Soldier_AR_DZ","INS_Soldier_CO_DZ","INS_Bardak_DZ","INS_Worker2_DZ"]; MeleeWeapons = ["MeleeFishingPole","MeleeCrowbar","MeleeBaseBallBatNails","MeleeBaseBallBatBarbed","MeleeBaseBallBat","Crossbow_DZ","MeleeSledge","MeleeMachete","MeleeHatchet_DZE"]; gear_done = false; //Cooking meatraw = [ "FoodSteakRaw", "FoodmeatRaw", "FoodbeefRaw", "FoodmuttonRaw", "FoodchickenRaw", "FoodrabbitRaw", "FoodbaconRaw", "ItemTrout", "ItemSeaBass", "ItemTuna" ]; exceptionsraw = ["ItemTuna"]; meatcooked = [ "FoodSteakCooked", "FoodmeatCooked", "FoodbeefCooked", "FoodmuttonCooked", "FoodchickenCooked", "FoodrabbitCooked", "FoodbaconCooked", "ItemTroutCooked", "ItemSeaBassCooked", "ItemTunaCooked" ]; //Eating no_output_food = ["FoodMRE", "FoodPistachio", "FoodNutmix","FoodBioMeat"]+meatcooked+meatraw; // Food with increased chance for infection. badfood = ["FoodBioMeat","FoodCanUnlabeled"]; food_with_output=[ "FoodCanBakedBeans", "FoodCanSardines", "FoodCanFrankBeans", "FoodCanPasta", "FoodCanGriff", "FoodCanBadguy", "FoodCanBoneboy", "FoodCanCorn", "FoodCanCurgon", "FoodCanDemon", "FoodCanFraggleos", "FoodCanHerpy", "FoodCanOrlok", "FoodCanPowell", "FoodCanTylers", "FoodCanUnlabeled" ]; food_output = [ "TrashTinCan", "TrashTinCan", "TrashTinCan", "TrashTinCan", "FoodCanGriffEmpty", "FoodCanBadguyEmpty", "FoodCanBoneboyEmpty", "FoodCanCornEmpty", "FoodCanCurgonEmpty", "FoodCanDemonEmpty", "FoodCanFraggleosEmpty", "FoodCanHerpyEmpty", "FoodCanOrlokEmpty", "FoodCanPowellEmpty", "FoodCanTylersEmpty", "FoodCanUnlabeledEmpty" ]; //Drinking no_output_drink = ["ItemWaterbottle", "ItemWaterbottleBoiled"]; drink_with_output = [ "ItemSoda", //just to define item for ItemSodaEmpty "ItemSodaRbull", "ItemSodaOrangeSherbet", "ItemSodaCoke", "ItemSodaPepsi", "ItemSodaMdew", "ItemSodaMtngreen", "ItemSodaR4z0r", "ItemSodaClays", "ItemSodaSmasht", "ItemSodaDrwaste", "ItemSodaLemonade", "ItemSodaLvg", "ItemSodaMzly", "ItemSodaRabbit" ]; drink_output = [ "ItemSodaEmpty", "ItemSodaEmpty", "ItemSodaEmpty", "ItemSodaCokeEmpty", "ItemSodaPepsiEmpty", "ItemSodaMdewEmpty", "ItemSodaMtngreenEmpty", "ItemSodaR4z0rEmpty", "ItemSodaClaysEmpty", "ItemSodaSmashtEmpty", "ItemSodaDrwasteEmpty", "ItemSodaLemonadeEmpty", "ItemSodaLvgEmpty", "ItemSodaMzlyEmpty", "ItemSodaRabbitEmpty" ]; boil_tin_cans = [ "TrashTinCan", "FoodCanGriffEmpty", "FoodCanBadguyEmpty", "FoodCanBoneboyEmpty", "FoodCanCornEmpty", "FoodCanCurgonEmpty", "FoodCanDemonEmpty", "FoodCanFraggleosEmpty", "FoodCanHerpyEmpty", "FoodCanOrlokEmpty", "FoodCanPowellEmpty", "FoodCanTylersEmpty", "FoodCanUnlabeledEmpty", "ItemSodaEmpty", "ItemSodaCokeEmpty", "ItemSodaPepsiEmpty", "ItemSodaMdewEmpty", "ItemSodaMtngreenEmpty", "ItemSodaR4z0rEmpty", "ItemSodaClaysEmpty", "ItemSodaSmashtEmpty", "ItemSodaDrwasteEmpty", "ItemSodaLemonadeEmpty", "ItemSodaLvgEmpty", "ItemSodaMzlyEmpty", "ItemSodaRabbitEmpty" ]; dayz_combination = ""; dayz_humanitytarget = ""; dayz_combatLog = ""; canRoll = true; canbuild = true; //Hunting Variables dayZ_partClasses = [ "PartFueltank", "PartWheel", //"PartGeneric", //No need to add, it is default for everything "PartEngine" ]; dayZ_explosiveParts = [ "palivo", "motor" ]; //Survival Variables SleepFood = 2160; //minutes (48 hours) SleepWater = 1440; //minutes (24 hours) SleepTemperatur = 90 / 100; //Firs Value = Minutes untill Player reaches the coldest Point at night (without other effects! night factor expected to be -1) //TeeChange //Server Variables allowConnection = false; isSinglePlayer = false; PVDZE_serverObjectMonitor = []; PlayerDeaths = []; //Streaming Variables (player only) dayz_Locations = []; dayz_locationsActive = []; //GUI Dayz_GUI_R = 0.38; // 0.7 Dayz_GUI_G = 0.63; // -0.63 Dayz_GUI_B = 0.26; // -0.26 if (isNil "Dayz_Dark_UI") then { Dayz_Dark_UI = false; }; //Player self-action handles dayz_resetSelfActions = { s_player_plotManagement = -1; s_givemoney_dialog = -1; s_bank_dialog = -1; s_bank_dialog2 = -1; s_player_toggleDegree = -1; s_player_toggleDegrees=[]; degreeActions = -1; s_player_toggleVector = -1; s_player_toggleVectors=[]; vectorActions = -1; s_player_fire = -1; s_player_cook = -1; s_player_boil = -1; s_player_fireout = -1; s_player_butcher = -1; s_player_packtent = -1; s_player_packvault = -1; s_player_lockvault = -1; s_player_unlockvault = -1; s_player_fillwater = -1; s_player_fillwater2 = -1; s_player_fillfuel = -1; s_player_grabflare = -1; s_player_dropflare = -1; s_player_callzombies = -1; s_player_showname = -1; s_player_debuglootpos = -1; s_player_pzombiesattack = -1; s_player_pzombiesvision = -1; s_player_pzombiesfeed = -1; s_player_removeflare = -1; s_player_painkiller = -1; s_player_studybody = -1; s_player_tamedog = -1; s_player_madsci_crtl = -1; s_player_parts_crtl = -1; s_build_Sandbag1_DZ = -1; s_build_Hedgehog_DZ = -1; s_build_Wire_cat1 = -1; s_player_deleteBuild = -1; s_player_forceSave = -1; s_player_checkGear = -1; s_player_flipveh = -1; s_player_stats = -1; s_player_sleep = -1; s_player_movedog = -1; s_player_speeddog = -1; s_player_calldog = -1; s_player_feeddog = -1; s_player_waterdog = -1; s_player_staydog = -1; s_player_trackdog = -1; s_player_barkdog = -1; s_player_warndog = -1; s_player_followdog = -1; s_player_repair_crtl = -1; s_player_information = -1; s_player_fuelauto = -1; s_player_fuelauto2 = -1; s_player_fillgen = -1; s_player_upgrade_build = -1; s_player_maint_build = -1; s_player_downgrade_build = -1; s_player_towing = -1; s_halo_action = -1; s_player_SurrenderedGear = -1; s_player_maintain_area = -1; s_player_maintain_area_preview = -1; s_player_heli_lift = -1; s_player_heli_detach = -1; s_player_lockUnlock_crtl = -1; s_player_toggleSnap = -1; s_player_toggleSnapSelect = -1; s_player_toggleSnapSelectPoint=[]; snapActions = -1; s_player_plot_boundary_on = -1; s_player_plot_boundary_off = -1; s_player_plot_take_ownership = -1; }; call dayz_resetSelfActions; //Engineering variables s_player_lastTarget = [objNull,objNull,objNull,objNull,objNull]; s_player_repairActions = []; s_player_lockunlock = []; // Custom s_player_madsci = []; s_player_parts = []; s_player_combi = []; //Modular player_build snapGizmos = []; snapGizmosNearby = []; //Initialize Medical Variables r_interrupt = false; r_doLoop = false; r_self = false; r_self_actions = []; r_drag_sqf = false; r_action = false; r_action_unload = false; r_player_handler = false; r_player_handler1 = false; r_player_dead = false; r_player_unconscious = false; r_player_infected = false; r_player_injured = false; r_player_inpain = false; r_player_loaded = false; r_player_cardiac = false; r_fracture_legs = false; r_fracture_arms = false; r_player_vehicle = player; r_player_blood = 12000; r_player_lowblood = false; r_player_timeout = 0; r_player_bloodTotal = r_player_blood; r_public_blood = r_player_blood; r_player_bloodDanger = r_player_bloodTotal * 0.2; r_player_actions = []; r_handlerCount = 0; r_action_repair = false; r_action_targets = []; r_pitchWhine = false; r_isBandit = false; isInTraderCity = false; NORRN_dropAction = -1; DZE_PROTOBOX = objNull; //ammo routine r_player_actions2 = []; r_action2 = false; r_player_lastVehicle = objNull; r_player_lastSeat = []; r_player_removeActions2 = { if (!isNull r_player_lastVehicle) then { { r_player_lastVehicle removeAction _x; } count r_player_actions2; r_player_actions2 = []; r_action2 = false; }; }; USEC_woundHit = [ "", "body", "hands", "legs", "head_hit" ]; DAYZ_woundHit = [ [ "body", "hands", "legs", "head_hit" ], [ 0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,2,2,3] ]; DAYZ_woundHit_ok = [ [ "body", "hands", "legs" ], [0,0,0,0,0,1,1,1,2,2] ]; DAYZ_woundHit_dog = [ [ "body", "hands", "legs" ], [0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2] ]; USEC_MinorWounds = [ "hands", "legs" ]; USEC_woundPoint = [ ["Pelvis","aimpoint"], ["aimpoint"], //,"RightShoulder","LeftShoulder" ["lelbow","relbow"], ["RightFoot","LeftFoot"], ["neck","pilot"] ]; USEC_typeOfWounds = [ "Pelvis", "aimpoint", "lelbow","relbow", "RightFoot","LeftFoot", "neck","pilot" ]; DZE_vehicleZwounds = [ "sklo predni L", "sklo predni P", "sklo zadni", "sklo zadni L", "sklo zadni P", "sklo P", "Glass1", "Glass2", "Glass3", "Glass4", "Glass5", "Glass6" ]; DZE_HeliAllowTowFrom = [ "CH_47F_EP1_DZE", "CH_47F_EP1_DZ", "CH_47F_BAF", "CH_47F_EP1", "BAF_Merlin_DZE", "CH53_DZE" ]; DZE_HeliAllowToTow = [ "hilux1_civil_1_open", "HMMWV_Base", "Lada_base", "Offroad_DSHKM_base", "Pickup_PK_base", "SkodaBase", "tractor", "VWGolf", "Volha_TK_CIV_Base_EP1", "S1203_TK_CIV_EP1", "SUV_Base_EP1", "ArmoredSUV_Base_PMC", "UAZ_Base", "LandRover_Base", "Ship" ]; //Initialize Zombie Variables dayz_zombieTargetList = [ ["SoldierWB",50], ["Air",500], ["LandVehicle",200] ]; PVDZE_plr_Hit = []; PVDZE_obj_Publish = []; //used for eventhandler to spawn a mirror of players tent PVDZE_plr_HideBody = objNull; dayz_selectedVault = objNull; dayz_selectedDoor = objNull; PVDZE_veh_Publish = []; // for vehicle traders PVDZE_obj_Trade = []; // For all traders increment qty PVDZE_plr_TradeMenu = []; // For all traders PVDZE_plr_DeathB = []; //DayZ settings dayz_dawn = 6; dayz_dusk = 18; DAYZ_agentnumber = 0; dayz_animalDistance = 800; dayz_zSpawnDistance = 1000; dayz_maxMaxModels = 80; // max quantity of Man models (player || Z, dead || alive) around players. Below this limit we can spawn Z // max quantity of loot piles around players. Below this limit we can spawn some loot dayz_spawnArea = 200; // radius around player where we can spawn loot & Z dayz_cantseeDist = 150; // distance from which we can spawn a Z in front of any player without ray-tracing && angle checks dayz_cantseefov = 70; // half player field-of-view. Visible Z won't be spawned in front of any near players dayz_canDelete = 300; // Z, further than this distance from its "owner", will be deleted if(isNil "DZE_SelfTransfuse") then { DZE_SelfTransfuse = false; }; if(isNil "dayz_maxAnimals") then { dayz_maxAnimals = 5; }; if(isNil "timezoneswitch") then { timezoneswitch = 0; }; if(isNil "dayz_maxLocalZombies") then { dayz_maxLocalZombies = 15; }; if(isNil "dayz_maxGlobalZombiesInit") then { dayz_maxGlobalZombiesInit = 15; }; if(isNil "dayz_maxGlobalZombiesIncrease") then { dayz_maxGlobalZombiesIncrease = 5; }; if(isNil "dayz_maxZeds") then { dayz_maxZeds = 500; }; if (isNil "DZE_PlayerZed") then { DZE_PlayerZed = true; }; if (isNil "DZE_GodModeBase") then { DZE_GodModeBase = false; }; if(isNil "DZEdebug") then { DZEdebug = false; }; if (isNil "DZE_Debug_Damage") then { DZE_Debug_Damage = true; }; if(isNil "DZE_TRADER_SPAWNMODE") then { DZE_TRADER_SPAWNMODE = false; }; if(isNil "dayz_tameDogs") then { dayz_tameDogs = false; }; if(isNil "dayz_sellDistance_vehicle") then { dayz_sellDistance_vehicle = 10; }; if(isNil "dayz_sellDistance_boat") then { dayz_sellDistance_boat = 30; }; if(isNil "dayz_sellDistance_air") then { dayz_sellDistance_air = 40; }; if(isNil "dayz_paraSpawn") then { dayz_paraSpawn = false; }; if(isNil "dayz_minpos") then { dayz_minpos = -20000; }; if(isNil "dayz_maxpos") then { dayz_maxpos = 20000; }; if(isNil "DZE_BuildingLimit") then { DZE_BuildingLimit = 150; }; if(isNil "DZE_HumanityTargetDistance") then { DZE_HumanityTargetDistance = 25; }; if(isNil "DZE_FriendlySaving") then { DZE_FriendlySaving = true; }; if(isNil "DZE_BuildOnRoads") then { DZE_BuildOnRoads = false; }; if(isNil "DZE_MissionLootTable") then { DZE_MissionLootTable = false; }; if(isNil "DZE_ConfigTrader") then { DZE_ConfigTrader = false; }; if(isNil "DZE_LootSpawnTimer") then { DZE_LootSpawnTimer = 10; }; if(isNil "DZE_HeliLift") then { DZE_HeliLift = true; }; if(isNil "DZE_DamageBeforeMaint") then { DZE_DamageBeforeMaint = 0.09; }; if(isNil "DZE_StaticConstructionCount") then { DZE_StaticConstructionCount = 0; }; if (isNil "DZE_selfTransfuse_Values") then { DZE_selfTransfuse_Values = [12000, 15, 300]; }; if (isNil "helperDetach") then { helperDetach = false; }; if (isNil "DZE_modularBuild") then { DZE_modularBuild = false; }; if (isNil "DZE_snapExtraRange") then { DZE_snapExtraRange = 0; }; if (isNil "DZE_APlotforLife") then { DZE_APlotforLife = false; }; if (isNil "DZE_PlotOwnership") then { DZE_PlotOwnership = false; }; if (isNil "DZE_checkNearbyRadius") then { DZE_checkNearbyRadius = 30; }; // needed on server if(isNil "DZE_PlotPole") then { DZE_PlotPole = [30,45]; }; if(isNil "DZE_maintainRange") then { DZE_maintainRange = ((DZE_PlotPole select 0)+20); }; DZE_snap_build_file = ""; DZE_REPLACE_WEAPONS = [["Crossbow","ItemMatchbox","ItemHatchet"],["Crossbow_DZ","ItemMatchbox_DZE","ItemHatchet_DZE"]]; if(isNil "dayz_zedSpawnVehCount") then { dayz_zedSpawnVehCount = dayz_maxLocalZombies / 2; }; if(isNil "dayz_spawnAirCount") then { dayz_spawnAirCount = 0; }; if(isNil "dayz_zedsAttackVehicles") then { dayz_zedsAttackVehicles = true; }; // update objects dayz_updateObjects = ["Plane","Tank","Car", "Helicopter", "Motorcycle", "Ship", "TentStorage", "VaultStorage","LockboxStorage","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","GunRack_DZ","WoodCrate_DZ","Scaffolding_DZ"]; dayz_disallowedVault = ["TentStorage", "BuiltItems","ModularItems","DZE_Base_Object"]; dayz_reveal = ["AllVehicles","WeaponHolder","Land_A_tent","BuiltItems","ModularItems","DZE_Base_Object"]; dayz_allowedObjects = ["TentStorage","TentStorageDomed","TentStorageDomed2", "VaultStorageLocked", "Hedgehog_DZ", "Sandbag1_DZ","BagFenceRound_DZ","TrapBear","Fort_RazorWire","WoodGate_DZ","Land_HBarrier1_DZ","Land_HBarrier3_DZ","Land_HBarrier5_DZ","Fence_corrugated_DZ","M240Nest_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","Plastic_Pole_EP1_DZ","Generator_DZ","StickFence_DZ","LightPole_DZ","FuelPump_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","SandNest_DZ","DeerStand_DZ","MetalPanel_DZ","WorkBench_DZ","WoodFloor_DZ","WoodLargeWall_DZ","WoodLargeWallDoor_DZ","WoodLargeWallWin_DZ","WoodSmallWall_DZ","WoodSmallWallWin_DZ","WoodSmallWallDoor_DZ","LockboxStorageLocked","WoodFloorHalf_DZ","WoodFloorQuarter_DZ","WoodStairs_DZ","WoodStairsSans_DZ","WoodStairsRails_DZ","WoodSmallWallThird_DZ","WoodLadder_DZ","Land_DZE_GarageWoodDoor","Land_DZE_LargeWoodDoor","Land_DZE_WoodDoor","Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallHalf_DZ","CinderWall_DZ","CinderWallDoorway_DZ","CinderWallDoor_DZ","CinderWallDoorLocked_DZ","CinderWallSmallDoorway_DZ","CinderWallDoorSmall_DZ","CinderWallDoorSmallLocked_DZ","MetalFloor_DZ","WoodRamp_DZ","GunRack_DZ","FireBarrel_DZ","WoodCrate_DZ","Scaffolding_DZ"]; DZE_LockableStorage = ["VaultStorage","VaultStorageLocked","LockboxStorageLocked","LockboxStorage"]; DZE_LockedStorage = ["VaultStorageLocked","LockboxStorageLocked"]; DZE_UnLockedStorage = ["VaultStorage","LockboxStorage"]; DZE_maintainClasses = ["ModularItems","DZE_Housebase","LightPole_DZ","BuiltItems","Plastic_Pole_EP1_DZ","Fence_corrugated_DZ","CanvasHut_DZ","ParkBench_DZ","MetalGate_DZ","StickFence_DZ","DesertCamoNet_DZ","ForestCamoNet_DZ","DesertLargeCamoNet_DZ","ForestLargeCamoNet_DZ","DeerStand_DZ","Scaffolding_DZ","FireBarrel_DZ"]; DZE_DoorsLocked = ["Land_DZE_GarageWoodDoorLocked","Land_DZE_LargeWoodDoorLocked","Land_DZE_WoodDoorLocked","CinderWallDoorLocked_DZ","CinderWallDoorSmallLocked_DZ"]; // List of removable items that require crowbar DZE_isRemovable = ["Fence_corrugated_DZ","M240Nest_DZ","ParkBench_DZ","Plastic_Pole_EP1_DZ","FireBarrel_DZ","Scaffolding_DZ"]; DZE_isWreck = ["SKODAWreck","HMMWVWreck","UralWreck","datsun01Wreck","hiluxWreck","datsun02Wreck","UAZWreck","Land_Misc_Garb_Heap_EP1","Fort_Barricade_EP1","Rubbish2"]; DZE_isWreckBuilding = ["Land_wreck_cinder","Land_wood_wreck_quarter","Land_wood_wreck_floor","Land_wood_wreck_third","Land_wood_wreck_frame","Land_iron_vein_wreck","Land_silver_vein_wreck","Land_gold_vein_wreck","Land_ammo_supply_wreck"]; DZE_isNewStorage = ["VaultStorage","OutHouse_DZ","Wooden_shed_DZ","WoodShack_DZ","StorageShed_DZ","GunRack_DZ","WoodCrate_DZ"]; // These work with just a running generator dayz_fuelpumparray = ["FuelPump_DZ","Land_A_FuelStation_Feed","Land_Ind_FuelStation_Feed_EP1","Land_FuelStation_Feed_PMC","FuelStation","Land_ibr_FuelStation_Feed","Land_fuelstation_army","Land_fuelstation","land_fuelstation_w","Land_benzina_schnell"]; DZE_fueltruckarray = ["KamazRefuel_DZ","UralRefuel_TK_EP1_DZ","MtvrRefuel_DES_EP1_DZ","V3S_Refuel_TK_GUE_EP1_DZ","MtvrRefuel_DZ","KamazRefuel_DZE","UralRefuel_TK_EP1_DZE","MtvrRefuel_DES_EP1_DZE","V3S_Refuel_TK_GUE_EP1_DZE","MtvrRefuel_DZE"]; // Standard Fuel sources dayz_fuelsources = ["Land_Ind_TankSmall","Land_fuel_tank_big","Land_fuel_tank_stairs","Land_fuel_tank_stairs_ep1","Land_wagon_tanker","Land_fuelstation","Land_fuelstation_army","land_fuelstation_w","Land_benzina_schnell"]; DZE_Lock_Door = ""; if (isNil "DZE_plotOwnershipExclusions") then { DZE_plotTakeOwnershipItems = dayz_allowedObjects - (DZE_LockableStorage + ["Plastic_Pole_EP1_DZ","TentStorage","TentStorageDomed","TentStorageDomed2"]); }; //init global arrays for Loot Chances call compile preprocessFileLineNumbers "\z\addons\dayz_code\init\loot_init.sqf"; if(isServer) then { dayz_players = []; dead_bodyCleanup = []; needUpdate_objects = []; DZE_DYN_AntiStuck = 0; DZE_DYN_AntiStuck2nd = 0; DZE_DYN_AntiStuck3rd = 0; if(isNil "dayz_fullMoonNights") then { dayz_fullMoonNights = false; }; if(isNil "EpochEvents") then { EpochEvents = []; }; if(isNil "DZE_vehicleAmmo") then { DZE_vehicleAmmo = 0; }; if(isNil "DZE_BackpackGuard") then { DZE_BackpackGuard = true; }; if(isNil "DZE_CleanNull") then { DZE_CleanNull = false; }; if (isNil "DZE_DeathMsgGlobal") then { DZE_DeathMsgGlobal = false; }; if (isNil "DZE_DeathMsgSide") then { DZE_DeathMsgSide = false; }; if (isNil "DZE_DeathMsgTitleText") then { DZE_DeathMsgTitleText = false; }; DZE_safeVehicle = ["ParachuteWest","ParachuteC"]; }; if(!isDedicated) then { dayz_spawnPos = getPosATL player; dayz_buildingMonitor = []; //Buildings to check dayz_bodyMonitor = []; // weather control var zeroPreviousWeather = [0,0,[0,0],0]; zeroCurrentWeather = [0,0,[0,0],0]; if (DZE_MissionLootTable) then { dayz_baseTypes = getArray (missionConfigFile >> "CfgBuildingLoot" >> "Default" >> "zombieClass"); } else { dayz_baseTypes = getArray (configFile >> "CfgBuildingLoot" >> "Default" >> "zombieClass"); }; //temperature variables dayz_temperatur = 36; //TeeChange dayz_temperaturnormal = 36; //TeeChange dayz_temperaturmax = 42; //TeeChange dayz_temperaturmin = 27; //TeeChange //player special variables dayZ_lastPlayerUpdate = 0; dayZ_everyonesTents = []; dayz_hunger = 0; dayz_thirst = 0; dayz_combat = 0; dayz_preloadFinished = false; dayz_statusArray = [1,1]; dayz_disAudial = 0; dayz_disVisual = 0; dayz_firedCooldown = 0; dayz_DeathActioned = false; dayz_canDisconnect = true; dayz_damageCounter = time; dayz_lastSave = time; dayz_isSwimming = true; dayz_isKneeling = false; dayz_isCrawling = false; dayz_PreviousTown = "Wilderness"; dayz_currentDay = 0; dayz_hasLight = false; dayz_surfaceNoise = 0; dayz_surfaceType = "None"; dayz_noPenalty = []; dayz_heavenCooldown = 0; deathHandled = false; dayz_lastHumanity = 0; dayz_guiHumanity = -90000; dayz_firstGroup = group player; dayz_originalPlayer = player; dayz_sourceBleeding = objNull; dayz_clientPreload = false; dayz_authed = false; dayz_panicCooldown = 0; dayz_areaAffect = 2.5; dayz_heartBeat = false; dayzClickTime = 0; //Current local dayz_spawnZombies = 0; dayz_swarmSpawnZombies = 0; //Max local dayz_CurrentNearByZombies = 0; //Max NearBy if (isNil "dayz_maxNearByZombies") then { dayz_maxNearByZombies = 60; // max quantity of Z controlled by local gameclient, used by player_spawnCheck. Below this limit we can spawn Z //Current total }; dayz_currentGlobalZombies = 0; //Max global zeds. if (isNil "dayz_maxGlobalZeds") then { dayz_maxGlobalZeds = 3000; }; if (isNil "dayz_spawnDelay") then { dayz_spawnDelay = 120; }; dayz_spawnWait = -(dayz_spawnDelay); if (isNil "dayz_lootDelay") then { dayz_lootDelay = 3; }; dayz_lootWait = -300; //used to count global zeds around players dayz_CurrentZombies = 0; //Used to limit overall zed counts dayz_tickTimeOffset = 0; dayz_currentWeaponHolders = 0; dayz_maxMaxWeaponHolders = 80; dayz_maxCurrentZeds = 0; dayz_inVehicle = false; dayz_Magazines = []; dayzGearSave = false; dayz_unsaved = false; dayz_scaleLight = 0; dayzDebug = false; dayzState = -1; //uiNamespace setVariable ['DAYZ_GUI_display',displayNull]; //if (uiNamespace getVariable ['DZ_displayUI', 0] == 2) then { // dayzDebug = true; //}; DZE_ActionInProgress = false; // DayZ Epoch Client only variables if(isNil "DZE_AllowForceSave") then { DZE_AllowForceSave = false; }; if(isNil "DZE_AllowCargoCheck") then { DZE_AllowCargoCheck = true; }; if(isNil "DZE_ForceNameTags") then { DZE_ForceNameTags = false; }; if(isNil "DZE_ForceNameTagsOff") then { DZE_ForceNameTagsOff = false; }; if(isNil "DZE_ForceNameTagsInTrader") then { DZE_ForceNameTagsInTrader = false; }; if(isNil "DZE_HaloJump") then { DZE_HaloJump = true; }; if(isNil "DZE_AntiWallLimit") then { DZE_AntiWallLimit = 3; }; if(isNil "DZE_requireplot") then { DZE_requireplot = 1; }; if(isNil "DZE_R3F_WEIGHT") then { DZE_R3F_WEIGHT = true; }; DZE_AntiWallCounter = 0; DZE_FreshSpawn = false; DZE_myHaloVehicle = objNull; dayz_myLiftVehicle = objNull; DZE_Friends = []; DZE_CanPickup = true; DZE_Q = false; DZE_Z = false; DZE_Q_alt = false; DZE_Z_alt = false; DZE_Q_ctrl = false; DZE_Z_ctrl = false; DZE_5 = false; DZE_4 = false; DZE_6 = false; DZE_F = false; DZE_cancelBuilding = false; DZE_PZATTACK = false; DZE_trees = ["t_picea2s_snow.p3d","b_corylus.p3d","t_quercus3s.p3d","t_larix3s.p3d","t_pyrus2s.p3d","str_briza_kriva.p3d","dd_borovice.p3d","les_singlestrom_b.p3d","les_singlestrom.p3d","smrk_velky.p3d","smrk_siroky.p3d","smrk_maly.p3d","les_buk.p3d","str krovisko vysoke.p3d","str_fikovnik_ker.p3d","str_fikovnik.p3d","str vrba.p3d","hrusen2.p3d","str dub jiny.p3d","str lipa.p3d","str briza.p3d","p_akat02s.p3d","jablon.p3d","p_buk.p3d","str_topol.p3d","str_topol2.p3d","p_osika.p3d","t_picea3f.p3d","t_picea2s.p3d","t_picea1s.p3d","t_fagus2w.p3d","t_fagus2s.p3d","t_fagus2f.p3d","t_betula1f.p3d","t_betula2f.p3d","t_betula2s.p3d","t_betula2w.p3d","t_alnus2s.p3d","t_acer2s.p3d","t_populus3s.p3d","t_quercus2f.p3d","t_sorbus2s.p3d","t_malus1s.p3d","t_salix2s.p3d","t_picea1s_w.p3d","t_picea2s_w.p3d","t_ficusb2s_ep1.p3d","t_populusb2s_ep1.p3d","t_populusf2s_ep1.p3d","t_amygdalusc2s_ep1.p3d","t_pistacial2s_ep1.p3d","t_pinuse2s_ep1.p3d","t_pinuss3s_ep1.p3d","t_prunuss2s_ep1.p3d","t_pinusn2s.p3d","t_pinusn1s.p3d","t_pinuss2f.p3d","t_poplar2f_dead_pmc.p3d","misc_torzotree_pmc.p3d","misc_burnspruce_pmc.p3d","brg_cocunutpalm8.p3d","brg_umbrella_acacia01b.p3d","brg_jungle_tree_canopy_1.p3d","brg_jungle_tree_canopy_2.p3d","brg_cocunutpalm4.p3d","brg_cocunutpalm3.p3d","palm_01.p3d","palm_02.p3d","palm_03.p3d","palm_04.p3d","palm_09.p3d","palm_10.p3d","brg_cocunutpalm2.p3d","brg_jungle_tree_antiaris.p3d","brg_cocunutpalm1.p3d","str habr.p3d"]; DZE_TEMP_treedmg = 1; DZE_Surrender = false; DZE_Quarantine = false; DZE_InRadiationZone = false; DZE_SaveTime = 30; };
fn_selfActions.sqf
remove.sqf
/* delete object from db with extra waiting by [VB]AWOL parameters: _obj */ private ["_activatingPlayer","_obj","_objectID","_objectUID","_started","_finished","_animState","_isMedic","_isOk","_proceed","_counter","_limit","_objType","_sfx","_dis","_itemOut","_countOut","_selectedRemoveOutput","_friendlies","_nearestPole","_ownerID","_refundpart","_isWreck","_findNearestPoles","_findNearestPole","_IsNearPlot","_brokenTool","_removeTool","_isDestructable","_isRemovable","_objOwnerID","_isOwnerOfObj","_preventRefund","_ipos","_item","_radius","_isWreckBuilding","_nameVehicle","_isModular","_playerUID"]; if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_88") , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; player removeAction s_player_deleteBuild; s_player_deleteBuild = 1; _obj = _this select 3; _activatingPlayer = player; _objOwnerID = _obj getVariable["ownerPUID","0"]; if (DZE_APlotforLife) then { _playerUID = [player] call FNC_GetPlayerUID; _isOwnerOfObj = (_objOwnerID == _playerUID); }else{ _playerUID = dayz_characterID; _isOwnerOfObj = (_objOwnerID == dayz_characterID); }; if (_obj in DZE_DoorsLocked) exitWith { DZE_ActionInProgress = false; cutText [(localize "STR_EPOCH_ACTIONS_20"), "PLAIN DOWN"];}; if(_obj getVariable ["GeneratorRunning", false]) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_89"), "PLAIN DOWN"];}; _objectID = _obj getVariable ["ObjectID","0"]; _objectUID = _obj getVariable ["ObjectUID","0"]; _isOk = true; _proceed = false; _objType = typeOf _obj; // Chance to break tools _isDestructable = _obj isKindOf "BuiltItems"; _isWreck = _objType in DZE_isWreck; _isRemovable = _objType in DZE_isRemovable; _isWreckBuilding = _objType in DZE_isWreckBuilding; _isMine = _objType in ["Land_iron_vein_wreck","Land_silver_vein_wreck","Land_gold_vein_wreck"]; _isModular = _obj isKindOf "ModularItems"; _limit = 3; if (DZE_StaticConstructionCount > 0) then { _limit = DZE_StaticConstructionCount; } else { if (isNumber (configFile >> "CfgVehicles" >> _objType >> "constructioncount")) then { _limit = getNumber(configFile >> "CfgVehicles" >> _objType >> "constructioncount"); }; }; _findNearestPoles = nearestObjects[player, ["Plastic_Pole_EP1_DZ"], 30]; _findNearestPole = []; {if (alive _x) then {_findNearestPole set [(count _findNearestPole),_x];};} count _findNearestPoles; _IsNearPlot = count (_findNearestPole); if(_IsNearPlot >= 1) then { _nearestPole = _findNearestPole select 0; // Find owner _ownerID = _nearestPole getVariable["ownerPUID","0"]; // check if friendly to owner if(_playerUID != _ownerID) then { _friendlies = _nearestPole getVariable ["plotfriends",[]]; _fuid = []; { _friendUID = _x select 0; _fuid = _fuid + [_friendUID]; } forEach _friendlies; _builder = getPlayerUID player; // check if friendly to owner if(_builder in _fuid) then { _canBuildOnPlot = true; }; }; }; _nameVehicle = getText(configFile >> "CfgVehicles" >> _objType >> "displayName"); cutText [format[(localize "str_epoch_player_162"),_nameVehicle], "PLAIN DOWN"]; if (_isModular) then { //allow previous cutText to show, then show this if modular. cutText [(localize "STR_EPOCH_ACTIONS_21"), "PLAIN DOWN"]; }; // Alert zombies once. [player,50,true,(getPosATL player)] spawn player_alertZombies; _brokenTool = false; // Start de-construction loop _counter = 0; while {_isOk} do { // if object no longer exits this should return true. if(isNull(_obj)) exitWith { _isOk = false; _proceed = false; }; [1,1] call dayz_HungerThirst; player playActionNow "Medic"; _dis=20; [player,_dis,true,(getPosATL player)] spawn player_alertZombies; r_interrupt = false; _animState = animationState player; r_doLoop = true; _started = false; _finished = false; while {r_doLoop} do { _animState = animationState player; _isMedic = ["medic",_animState] call fnc_inString; if (_isMedic) then { _started = true; }; if (_started && !_isMedic) then { r_doLoop = false; _finished = true; _sfx = "repair"; [player,_sfx,0,false,_dis] call dayz_zombieSpeak; }; if (r_interrupt) then { r_doLoop = false; }; sleep 0.1; }; if(!_finished) exitWith { _isOk = false; _proceed = false; }; if(_finished) then { _counter = _counter + 1; // 10% chance to break a required tool each pass if((_isDestructable || _isRemovable) && !_isOwnerOfObj) then { if((random 10) <= 1) then { _brokenTool = true; }; }; }; if(_brokenTool) exitWith { _isOk = false; _proceed = false; }; cutText [format[(localize "str_epoch_player_163"), _nameVehicle, _counter,_limit], "PLAIN DOWN"]; if(_counter == _limit) exitWith { _isOk = false; _proceed = true; }; }; if(_brokenTool) then { if(_isWreck) then { _removeTool = "ItemToolbox"; } else { _removeTool = ["ItemCrowbar","ItemToolbox"] call BIS_fnc_selectRandom; }; if(([player,_removeTool,1] call BIS_fnc_invRemove) > 0) then { cutText [format[(localize "str_epoch_player_164"),getText(configFile >> "CfgWeapons" >> _removeTool >> "displayName"),_nameVehicle], "PLAIN DOWN"]; }; }; // Remove only if player waited if (_proceed) then { // Double check that object is not null if(!isNull(_obj)) then { _ipos = getPosATL _obj; deleteVehicle _obj; if(!_isWreck) then { PVDZE_obj_Delete = [_objectID,_objectUID,_activatingPlayer]; publicVariableServer "PVDZE_obj_Delete"; }; cutText [format[(localize "str_epoch_player_165"),_nameVehicle], "PLAIN DOWN"]; _preventRefund = false; _selectedRemoveOutput = []; if(_isWreck) then { // Find one random part to give back _refundpart = ["PartEngine","PartGeneric","PartFueltank","PartWheel","PartGlass","ItemJerrycan"] call BIS_fnc_selectRandom; _selectedRemoveOutput set [count _selectedRemoveOutput,[_refundpart,1]]; } else { if(_isWreckBuilding) then { _selectedRemoveOutput = getArray (configFile >> "CfgVehicles" >> _objType >> "removeoutput"); } else { _selectedRemoveOutput = getArray (configFile >> "CfgVehicles" >> _objType >> "removeoutput"); _preventRefund = (_objectID == "0" && _objectUID == "0"); }; }; if((count _selectedRemoveOutput) <= 0) then { cutText [(localize "str_epoch_player_90"), "PLAIN DOWN"]; }; if (_ipos select 2 < 0) then { _ipos set [2,0]; }; _radius = 1; if (_isMine) then { if((random 10) <= 4) then { _gems = ["ItemTopaz","ItemObsidian","ItemSapphire","ItemAmethyst","ItemEmerald","ItemCitrine","ItemRuby"]; _gem = _gems select (floor(random (count _gems))); _selectedRemoveOutput set [(count _selectedRemoveOutput),[_gem,1]]; }; }; // give refund items if((count _selectedRemoveOutput) > 0 && !_preventRefund) then { _item = createVehicle ["WeaponHolder", _iPos, [], _radius, "CAN_COLLIDE"]; { _itemOut = _x select 0; _countOut = _x select 1; if (typeName _countOut == "ARRAY") then { _countOut = round((random (_countOut select 1)) + (_countOut select 0)); }; _item addMagazineCargoGlobal [_itemOut,_countOut]; } count _selectedRemoveOutput; _item setposATL _iPos; player reveal _item; player action ["Gear", _item]; }; } else { cutText [(localize "str_epoch_player_91"), "PLAIN DOWN"]; }; } else { r_interrupt = false; if (vehicle player == player) then { [objNull, player, rSwitchMove,""] call RE; player playActionNow "stop"; }; }; DZE_ActionInProgress = false; s_player_deleteBuild = -1;
server_monitor.sqf
private ["_nul","_result","_pos","_wsDone","_dir","_isOK","_countr","_objWpnTypes","_objWpnQty","_dam","_selection","_totalvehicles","_object","_idKey","_type","_ownerID","_worldspace","_inventory","_hitPoints","_fuel","_damage","_key","_vehLimit","_hiveResponse","_objectCount","_codeCount","_data","_status","_val","_traderid","_retrader","_traderData","_id","_lockable","_debugMarkerPosition","_vehicle_0","_bQty","_vQty","_BuildingQueue","_objectQueue","_superkey","_shutdown","_res","_hiveLoaded","_ownerPUID"]; dayz_versionNo = getText(configFile >> "CfgMods" >> "DayZ" >> "version"); dayz_hiveVersionNo = getNumber(configFile >> "CfgMods" >> "DayZ" >> "hiveVersion"); _hiveLoaded = false; waitUntil{initialized}; //means all the functions are now defined diag_log "HIVE: Starting"; waituntil{isNil "sm_done"}; // prevent server_monitor be called twice (bug during login of the first player) // Custom Configs if(isnil "MaxVehicleLimit") then { MaxVehicleLimit = 50; }; if(isnil "MaxDynamicDebris") then { MaxDynamicDebris = 100; }; if(isnil "MaxAmmoBoxes") then { MaxAmmoBoxes = 3; }; if(isnil "MaxMineVeins") then { MaxMineVeins = 50; }; // Custon Configs End if (isServer && isNil "sm_done") then { serverVehicleCounter = []; _hiveResponse = []; for "_i" from 1 to 5 do { diag_log "HIVE: trying to get objects"; _key = format["CHILD:302:%1:", dayZ_instance]; _hiveResponse = _key call server_hiveReadWrite; if ((((isnil "_hiveResponse") || {(typeName _hiveResponse != "ARRAY")}) || {((typeName (_hiveResponse select 1)) != "SCALAR")})) then { if ((_hiveResponse select 1) == "Instance already initialized") then { _superkey = profileNamespace getVariable "SUPERKEY"; _shutdown = format["CHILD:400:%1:", _superkey]; _res = _shutdown call server_hiveReadWrite; diag_log ("HIVE: attempt to kill.. HiveExt response:"+str(_res)); } else { diag_log ("HIVE: connection problem... HiveExt response:"+str(_hiveResponse)); }; _hiveResponse = ["",0]; } else { diag_log ("HIVE: found "+str(_hiveResponse select 1)+" objects" ); _i = 99; // break }; }; _BuildingQueue = []; _objectQueue = []; if ((_hiveResponse select 0) == "ObjectStreamStart") then { // save superkey profileNamespace setVariable ["SUPERKEY",(_hiveResponse select 2)]; _hiveLoaded = true; diag_log ("HIVE: Commence Object Streaming..."); _key = format["CHILD:302:%1:", dayZ_instance]; _objectCount = _hiveResponse select 1; _bQty = 0; _vQty = 0; for "_i" from 1 to _objectCount do { _hiveResponse = _key call server_hiveReadWriteLarge; //diag_log (format["HIVE dbg %1 %2", typeName _hiveResponse, _hiveResponse]); if ((_hiveResponse select 2) isKindOf "ModularItems") then { _BuildingQueue set [_bQty,_hiveResponse]; _bQty = _bQty + 1; } else { _objectQueue set [_vQty,_hiveResponse]; _vQty = _vQty + 1; }; }; diag_log ("HIVE: got " + str(_bQty) + " Epoch Objects and " + str(_vQty) + " Vehicles"); }; // # NOW SPAWN OBJECTS # _totalvehicles = 0; { _idKey = _x select 1; _type = _x select 2; _ownerID = _x select 3; _worldspace = _x select 4; _inventory = _x select 5; _hitPoints = _x select 6; _fuel = _x select 7; _damage = _x select 8; _dir = 0; _pos = [0,0,0]; _wsDone = false; if (count _worldspace >= 2) then { _dir = _worldspace select 0; if (count (_worldspace select 1) == 3) then { _pos = _worldspace select 1; _wsDone = true; } }; if (!_wsDone) then { if (count _worldspace >= 1) then { _dir = _worldspace select 0; }; _pos = [getMarkerPos "center",0,4000,10,0,2000,0] call BIS_fnc_findSafePos; if (count _pos < 3) then { _pos = [_pos select 0,_pos select 1,0]; }; diag_log ("MOVED OBJ: " + str(_idKey) + " of class " + _type + " to pos: " + str(_pos)); }; _vector = [[0,0,0],[0,0,0]]; _vecExists = false; _ownerPUID = "0"; if (count _worldspace >= 3) then{ if(count _worldspace == 3) then{ if(typename (_worldspace select 2) == "STRING")then{ _ownerPUID = _worldspace select 2; }else{ if(typename (_worldspace select 2) == "ARRAY")then{ _vector = _worldspace select 2; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _vecExists = true; }; }; }; }; }else{ //Was not 3 elements, so check if 4 or more if(count _worldspace == 4) then{ if(typename (_worldspace select 3) == "STRING")then{ _ownerPUID = _worldspace select 3; }else{ if(typename (_worldspace select 2) == "STRING")then{ _ownerPUID = _worldspace select 2; }; }; if(typename (_worldspace select 2) == "ARRAY")then{ _vector = _worldspace select 2; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _vecExists = true; }; }; }else{ if(typename (_worldspace select 3) == "ARRAY")then{ _vector = _worldspace select 3; if(count _vector == 2)then{ if(((count (_vector select 0)) == 3) && ((count (_vector select 1)) == 3))then{ _vecExists = true; }; }; }; }; }else{ //More than 3 or 4 elements found //Might add a search for the vector, ownerPUID will equal 0 }; }; }; if (DZE_APlotforLife) then { if (count _worldspace < 3) then { _worldspace set [count _worldspace, "0"]; }; _ownerPUID = _worldspace select 2; } else { _ownerPUID = _ownerID; }; // diag_log format["Server_monitor: [ObjectID = %1] [ClassID = %2] [_ownerPUID = %3]", _idKey, _type, _ownerPUID]; if (_damage < 1) then { //diag_log format["OBJ: %1 - %2", _idKey,_type]; //Create it _object = createVehicle [_type, _pos, [], 0, "CAN_COLLIDE"]; _object setVariable ["lastUpdate",time]; _object setVariable ["ownerPUID", _ownerPUID, true]; if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then { _object setVariable ["plotfriends", _inventory, true]; }; _object setVariable ["OwnerPUID", _ownerPUID, true]; _lockable = 0; if(isNumber (configFile >> "CfgVehicles" >> _type >> "lockable")) then { _lockable = getNumber(configFile >> "CfgVehicles" >> _type >> "lockable"); }; // fix for leading zero issues on safe codes after restart if (_lockable == 4) then { _codeCount = (count (toArray _ownerID)); if(_codeCount == 3) then { _ownerID = format["0%1", _ownerID]; }; if(_codeCount == 2) then { _ownerID = format["00%1", _ownerID]; }; if(_codeCount == 1) then { _ownerID = format["000%1", _ownerID]; }; }; if (_lockable == 3) then { _codeCount = (count (toArray _ownerID)); if(_codeCount == 2) then { _ownerID = format["0%1", _ownerID]; }; if(_codeCount == 1) then { _ownerID = format["00%1", _ownerID]; }; }; _object setVariable ["CharacterID", _ownerID, true]; clearWeaponCargoGlobal _object; clearMagazineCargoGlobal _object; // _object setVehicleAmmo DZE_vehicleAmmo; _object setdir _dir; if(_vecExists)then{ _object setVectorDirAndUp _vector; }; _object setposATL _pos; _object setDamage _damage; if ((typeOf _object) in dayz_allowedObjects) then { _object setVariable["memDir",_dir,true]; if (DZE_GodModeBase) then { _object addEventHandler ["HandleDamage", {false}]; } else { _object addMPEventHandler ["MPKilled",{_this call object_handleServerKilled;}]; }; // Test disabling simulation server side on buildables only. _object enableSimulation false; // used for inplace upgrades && lock/unlock of safe _object setVariable ["OEMPos", _pos, true]; }; if ((count _inventory > 0) && !(typeOf( _object) == "Plastic_Pole_EP1_DZ")) then { /*ZSC*/ if( count (_inventory) > 3)then{ _object setVariable ["bankMoney", _inventory select 3, true]; }else{ _object setVariable ["bankMoney", 0, true]; }; /*ZSC*/ if (_type in DZE_LockedStorage) then { // Fill variables with loot _object setVariable ["WeaponCargo", (_inventory select 0),true]; _object setVariable ["MagazineCargo", (_inventory select 1),true]; _object setVariable ["BackpackCargo", (_inventory select 2),true]; } else { //Add weapons _objWpnTypes = (_inventory select 0) select 0; _objWpnQty = (_inventory select 0) select 1; _countr = 0; { if(_x in (DZE_REPLACE_WEAPONS select 0)) then { _x = (DZE_REPLACE_WEAPONS select 1) select ((DZE_REPLACE_WEAPONS select 0) find _x); }; _isOK = isClass(configFile >> "CfgWeapons" >> _x); if (_isOK) then { _object addWeaponCargoGlobal [_x,(_objWpnQty select _countr)]; }; _countr = _countr + 1; } count _objWpnTypes; //Add Magazines _objWpnTypes = (_inventory select 1) select 0; _objWpnQty = (_inventory select 1) select 1; _countr = 0; { if (_x == "BoltSteel") then { _x = "WoodenArrow" }; // Convert BoltSteel to WoodenArrow if (_x == "ItemTent") then { _x = "ItemTentOld" }; _isOK = isClass(configFile >> "CfgMagazines" >> _x); if (_isOK) then { _object addMagazineCargoGlobal [_x,(_objWpnQty select _countr)]; }; _countr = _countr + 1; } count _objWpnTypes; //Add Backpacks _objWpnTypes = (_inventory select 2) select 0; _objWpnQty = (_inventory select 2) select 1; _countr = 0; { _isOK = isClass(configFile >> "CfgVehicles" >> _x); if (_isOK) then { _object addBackpackCargoGlobal [_x,(_objWpnQty select _countr)]; }; _countr = _countr + 1; } count _objWpnTypes; }; }; if (_object isKindOf "AllVehicles") then { { _selection = _x select 0; _dam = _x select 1; if (_selection in dayZ_explosiveParts && _dam > 0.8) then {_dam = 0.8}; [_object,_selection,_dam] call object_setFixServer; } count _hitpoints; _object setFuel _fuel; if (!((typeOf _object) in dayz_allowedObjects)) then { //_object setvelocity [0,0,1]; _object call fnc_veh_ResetEH; if(_ownerID != "0" && !(_object isKindOf "Bicycle")) then { _object setvehiclelock "locked"; }; _totalvehicles = _totalvehicles + 1; // total each vehicle serverVehicleCounter set [count serverVehicleCounter,_type]; }; }; //Monitor the object PVDZE_serverObjectMonitor set [count PVDZE_serverObjectMonitor,_object]; }; } forEach (_BuildingQueue + _objectQueue); // # END SPAWN OBJECTS # // preload server traders menu data into cache if !(DZE_ConfigTrader) then { { // get tids _traderData = call compile format["menu_%1;",_x]; if(!isNil "_traderData") then { { _traderid = _x select 1; _retrader = []; _key = format["CHILD:399:%1:",_traderid]; _data = "HiveEXT" callExtension _key; //diag_log "HIVE: Request sent"; //Process result _result = call compile format ["%1",_data]; _status = _result select 0; if (_status == "ObjectStreamStart") then { _val = _result select 1; //Stream Objects //diag_log ("HIVE: Commence Menu Streaming..."); call compile format["ServerTcache_%1 = [];",_traderid]; for "_i" from 1 to _val do { _data = "HiveEXT" callExtension _key; _result = call compile format ["%1",_data]; call compile format["ServerTcache_%1 set [count ServerTcache_%1,%2]",_traderid,_result]; _retrader set [count _retrader,_result]; }; //diag_log ("HIVE: Streamed " + str(_val) + " objects"); }; } forEach (_traderData select 0); }; } forEach serverTraders; }; if (_hiveLoaded) then { // spawn_vehicles _vehLimit = MaxVehicleLimit - _totalvehicles; if(_vehLimit > 0) then { diag_log ("HIVE: Spawning # of Vehicles: " + str(_vehLimit)); for "_x" from 1 to _vehLimit do { [] spawn spawn_vehicles; }; } else { diag_log "HIVE: Vehicle Spawn limit reached!"; }; }; // spawn_roadblocks diag_log ("HIVE: Spawning # of Debris: " + str(MaxDynamicDebris)); for "_x" from 1 to MaxDynamicDebris do { [] spawn spawn_roadblocks; }; // spawn_ammosupply at server start 1% of roadblocks diag_log ("HIVE: Spawning # of Ammo Boxes: " + str(MaxAmmoBoxes)); for "_x" from 1 to MaxAmmoBoxes do { [] spawn spawn_ammosupply; }; // call spawning mining veins diag_log ("HIVE: Spawning # of Veins: " + str(MaxMineVeins)); for "_x" from 1 to MaxMineVeins do { [] spawn spawn_mineveins; }; if(isnil "dayz_MapArea") then { dayz_MapArea = 10000; }; if(isnil "HeliCrashArea") then { HeliCrashArea = dayz_MapArea / 2; }; if(isnil "OldHeliCrash") then { OldHeliCrash = false; }; // [_guaranteedLoot, _randomizedLoot, _frequency, _variance, _spawnChance, _spawnMarker, _spawnRadius, _spawnFire, _fadeFire] if(OldHeliCrash) then { _nul = [3, 4, (50 * 60), (15 * 60), 0.75, 'center', HeliCrashArea, true, false] spawn server_spawnCrashSite; }; if (isDedicated) then { // Epoch Events _id = [] spawn server_spawnEvents; // server cleanup [] spawn { private ["_id"]; sleep 200; //Sleep Lootcleanup, don't need directly cleanup on startup + fix some performance issues on serverstart waitUntil {!isNil "server_spawnCleanAnimals"}; _id = [] execFSM "\z\addons\dayz_server\system\server_cleanup.fsm"; }; // spawn debug box _debugMarkerPosition = getMarkerPos "respawn_west"; _debugMarkerPosition = [(_debugMarkerPosition select 0),(_debugMarkerPosition select 1),1]; _vehicle_0 = createVehicle ["DebugBox_DZ", _debugMarkerPosition, [], 0, "CAN_COLLIDE"]; _vehicle_0 setPos _debugMarkerPosition; _vehicle_0 setVariable ["ObjectID","1",true]; // max number of spawn markers if(isnil "spawnMarkerCount") then { spawnMarkerCount = 10; }; actualSpawnMarkerCount = 0; // count valid spawn marker positions for "_i" from 0 to spawnMarkerCount do { if (!([(getMarkerPos format["spawn%1", _i]), [0,0,0]] call BIS_fnc_areEqual)) then { actualSpawnMarkerCount = actualSpawnMarkerCount + 1; } else { // exit since we did not find any further markers _i = spawnMarkerCount + 99; }; }; diag_log format["Total Number of spawn locations %1", actualSpawnMarkerCount]; endLoadingScreen; }; allowConnection = true; sm_done = true; publicVariable "sm_done"; };
server_updateObject.sqf
/* [_object,_type] spawn server_updateObject; */ private ["_object","_type","_objectID","_uid","_lastUpdate","_needUpdate","_object_position","_object_inventory","_object_damage","_isNotOk","_parachuteWest","_firstTime","_object_killed","_object_repair","_isbuildable"]; _object = _this select 0; if(isNull(_object)) exitWith { diag_log format["Skipping Null Object: %1", _object]; }; _type = _this select 1; _parachuteWest = ((typeOf _object == "ParachuteWest") || (typeOf _object == "ParachuteC")); _isbuildable = (typeOf _object) in dayz_allowedObjects; _isNotOk = false; _firstTime = false; _objectID = _object getVariable ["ObjectID","0"]; _uid = _object getVariable ["ObjectUID","0"]; if ((typeName _objectID != "string") || (typeName _uid != "string")) then { diag_log(format["Non-string Object: ID %1 UID %2", _objectID, _uid]); //force fail _objectID = "0"; _uid = "0"; }; if (!_parachuteWest && !(locked _object)) then { if (_objectID == "0" && _uid == "0") then { _object_position = getPosATL _object; _isNotOk = true; }; }; // do not update if buildable && not ok if (_isNotOk && _isbuildable) exitWith { }; // delete if still not ok if (_isNotOk) exitWith { deleteVehicle _object; diag_log(format["Deleting object %1 with invalid ID at pos [%2,%3,%4]",typeOf _object,_object_position select 0,_object_position select 1, _object_position select 2]); }; _lastUpdate = _object getVariable ["lastUpdate",time]; _needUpdate = _object in needUpdate_objects; // TODO ---------------------- _object_position = { private["_position","_worldspace","_fuel","_key"]; _position = getPosATL _object; _worldspace = [ round(direction _object), _position ]; _fuel = 0; if (_object isKindOf "AllVehicles") then { _fuel = fuel _object; }; _key = format["CHILD:305:%1:%2:%3:",_objectID,_worldspace,_fuel]; //diag_log ("HIVE: WRITE: "+ str(_key)); _key call server_hiveWrite; }; _object_inventory = { private["_inventory","_previous","_key"]; if (typeOf (_object) == "Plastic_Pole_EP1_DZ") then{ _inventory = _object getVariable ["plotfriends", []]; //We're replacing the inventory with UIDs for this item } else { _inventory = [ getWeaponCargo _object, getMagazineCargo _object, getBackpackCargo _object , _object getVariable["bankMoney",0] ]; }; _previous = str(_object getVariable["lastInventory",[]]); if (str(_inventory) != _previous) then { _object setVariable["lastInventory",_inventory]; if (_objectID == "0") then { _key = format["CHILD:309:%1:%2:",_uid,_inventory]; } else { _key = format["CHILD:303:%1:%2:",_objectID,_inventory]; }; //diag_log ("HIVE: WRITE: "+ str(_key)); _key call server_hiveWrite; }; }; _object_damage = { private["_hitpoints","_array","_hit","_selection","_key","_damage"]; _hitpoints = _object call vehicle_getHitpoints; _damage = damage _object; _array = []; { _hit = [_object,_x] call object_getHit; _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name"); if (_hit > 0) then {_array set [count _array,[_selection,_hit]]}; _object setHit ["_selection", _hit]; } count _hitpoints; _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage]; //diag_log ("HIVE: WRITE: "+ str(_key)); _key call server_hiveWrite; _object setVariable ["needUpdate",false,true]; }; _object_killed = { private["_hitpoints","_array","_hit","_selection","_key","_damage"]; _hitpoints = _object call vehicle_getHitpoints; //_damage = damage _object; _damage = 1; _array = []; { _hit = [_object,_x] call object_getHit; _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name"); if (_hit > 0) then {_array set [count _array,[_selection,_hit]]}; _hit = 1; _object setHit ["_selection", _hit]; } count _hitpoints; if (_objectID == "0") then { _key = format["CHILD:306:%1:%2:%3:",_uid,_array,_damage]; } else { _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage]; }; //diag_log ("HIVE: WRITE: "+ str(_key)); _key call server_hiveWrite; _object setVariable ["needUpdate",false,true]; if ((count _this) > 2) then { _killer = _this select 2; _charID = _object getVariable ['CharacterID','0']; _objID = _object getVariable['ObjectID','0']; _objUID = _object getVariable['ObjectUID','0']; _worldSpace = getPosATL _object; if (getPlayerUID _killer != "") then { _name = if (alive _killer) then { name _killer; } else { format["OBJECT %1", _killer]; }; diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6, Killer: %7 (UID: %8)", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace, _name, (getPlayerUID _killer)]; } else { diag_log format["Vehicle killed: Vehicle %1 (TYPE: %2), CharacterID: %3, ObjectID: %4, ObjectUID: %5, Position: %6", _object, (typeOf _object), _charID, _objID, _objUID, _worldSpace]; }; }; }; _object_repair = { private["_hitpoints","_array","_hit","_selection","_key","_damage"]; _hitpoints = _object call vehicle_getHitpoints; _damage = damage _object; _array = []; { _hit = [_object,_x] call object_getHit; _selection = getText (configFile >> "CfgVehicles" >> (typeOf _object) >> "HitPoints" >> _x >> "name"); if (_hit > 0) then {_array set [count _array,[_selection,_hit]]}; _object setHit ["_selection", _hit]; } count _hitpoints; _key = format["CHILD:306:%1:%2:%3:",_objectID,_array,_damage]; //diag_log ("HIVE: WRITE: "+ str(_key)); _key call server_hiveWrite; _object setVariable ["needUpdate",false,true]; }; // TODO ---------------------- _object setVariable ["lastUpdate",time,true]; switch (_type) do { case "all": { call _object_position; call _object_inventory; call _object_damage; }; case "position": { if (!(_object in needUpdate_objects)) then { //diag_log format["DEBUG Position: Added to NeedUpdate=%1",_object]; needUpdate_objects set [count needUpdate_objects, _object]; }; }; case "gear": { call _object_inventory; }; case "damage": { if ( (time - _lastUpdate) > 5) then { call _object_damage; } else { if (!(_object in needUpdate_objects)) then { //diag_log format["DEBUG Damage: Added to NeedUpdate=%1",_object]; needUpdate_objects set [count needUpdate_objects, _object]; }; }; }; case "killed": { call _object_killed; }; case "repair": { call _object_damage; }; };
player_build.sqf
/* DayZ Base Building Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com. */ private ["_location","_dir","_classname","_item","_hasrequireditem","_missing","_hastoolweapon","_cancel","_reason","_started","_finished","_animState","_isMedic","_dis","_sfx","_hasbuilditem","_tmpbuilt","_onLadder","_isWater","_require","_text","_offset","_IsNearPlot","_isOk","_location1","_location2","_counter","_limit","_proceed","_num_removed","_position","_object","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_findNearestPoles","_findNearestPole","_distance","_classnametmp","_ghost","_isPole","_needText","_lockable","_zheightchanged","_rotate","_combination_1","_combination_2","_combination_3","_combination_4","_combination","_combination_1_Display","_combinationDisplay","_zheightdirection","_abort","_isNear","_need","_needNear","_vehicle","_inVehicle","_requireplot","_objHDiff","_isLandFireDZ","_isTankTrap","_playerID", "_playerUID","_ownerID","_buildcheck","_isowner","_isfriendly","_maxBuildDistance","_vector","_buildOffset","_vUp"]; if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_40") , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; // disallow building if too many objects are found within 30m if((count (([player] call FNC_GetPos) nearObjects ["All",30])) >= DZE_BuildingLimit) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_41"), "PLAIN DOWN"];}; _onLadder = (getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1; _isWater = dayz_isSwimming; _cancel = false; _reason = ""; _canBuildOnPlot = false; _vehicle = vehicle player; _inVehicle = (_vehicle != player); _playerUID = [player] call FNC_GetPlayerUID; if (DZE_APlotforLife) then { _playerID = [player] call FNC_GetPlayerUID; }else{ _playerID = dayz_characterID; }; DZE_Q = false; DZE_Z = false; DZE_Q_alt = false; DZE_Z_alt = false; DZE_Q_ctrl = false; DZE_Z_ctrl = false; DZE_5 = false; DZE_4 = false; DZE_6 = false; DZE_cancelBuilding = false; DZE_updateVec = false; DZE_memDir = 0; DZE_memForBack = 0; DZE_memLeftRight = 0; call gear_ui_init; closeDialog 1; if (_isWater) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_26", "PLAIN DOWN"];}; if (_inVehicle) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_42"), "PLAIN DOWN"];}; if (_onLadder) exitWith {DZE_ActionInProgress = false; cutText [localize "str_player_21", "PLAIN DOWN"];}; if (player getVariable["combattimeout", 0] >= time) exitWith {DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_43"), "PLAIN DOWN"];}; _item = _this; // Need Near Requirements _abort = false; _reason = ""; _needNear = getArray (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "neednearby"); { switch(_x) do{ case "fire": { _distance = 3; _isNear = {inflamed _x} count (([player] call FNC_GetPos) nearObjects _distance); if(_isNear == 0) then { _abort = true; _reason = "fire"; }; }; case "workshop": { _distance = 3; _isNear = count (nearestObjects [player, ["Wooden_shed_DZ","WoodShack_DZ","WorkBench_DZ"], _distance]); if(_isNear == 0) then { _abort = true; _reason = "workshop"; }; }; case "fueltank": { _distance = 30; _isNear = count (nearestObjects [player, dayz_fuelsources, _distance]); if(_isNear == 0) then { _abort = true; _reason = "fuel tank"; }; }; }; } forEach _needNear; if(_abort) exitWith { cutText [format[(localize "str_epoch_player_135"),_reason,_distance], "PLAIN DOWN"]; DZE_ActionInProgress = false; }; _classname = getText (configFile >> "CfgMagazines" >> _item >> "ItemActions" >> "Build" >> "create"); _classnametmp = _classname; _require = getArray (configFile >> "cfgMagazines" >> _this >> "ItemActions" >> "Build" >> "require"); _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); _ghost = getText (configFile >> "CfgVehicles" >> _classname >> "ghostpreview"); _lockable = 0; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "lockable")) then { _lockable = getNumber(configFile >> "CfgVehicles" >> _classname >> "lockable"); }; _requireplot = DZE_requireplot; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "requireplot")) then { _requireplot = getNumber(configFile >> "CfgVehicles" >> _classname >> "requireplot"); }; if (_requireplot == 0) then{_requireplot = false}else{_requireplot = true}; _isAllowedUnderGround = 1; if(isNumber (configFile >> "CfgVehicles" >> _classname >> "nounderground")) then { _isAllowedUnderGround = getNumber(configFile >> "CfgVehicles" >> _classname >> "nounderground"); }; _offset = getArray (configFile >> "CfgVehicles" >> _classname >> "offset"); if((count _offset) <= 0) then { _offset = [0,1.5,0]; }; _isPole = (_classname == "Plastic_Pole_EP1_DZ"); _isLandFireDZ = (_classname == "Land_Fire_DZ"); _distance = DZE_PlotPole select 0; _needText = localize "str_epoch_player_246"; if(_isPole) then { _distance = DZE_PlotPole select 1; }; // check for near plot _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; _findNearestPole = []; { if (alive _x) then { _findNearestPole set [(count _findNearestPole),_x]; }; } count _findNearestPoles; _IsNearPlot = count (_findNearestPole); // If item is plot pole && another one exists within 45m if(_isPole && _IsNearPlot > 0) exitWith { DZE_ActionInProgress = false; cutText [(format [localize "str_epoch_player_44", DZE_PlotPole select 1]) , "PLAIN DOWN"]; }; if(_IsNearPlot == 0) then { // Allow building of plotpole or items not requiring a plot pole if(!(_requireplot) || _isLandFireDZ) then { _canBuildOnPlot = true; }; } else { // Since there are plot poles nearby we need to check ownership && friend status // check nearest pole only _nearestPole = _findNearestPole select 0; _buildcheck = [player, _nearestPole] call FNC_check_owner; _isowner = _buildcheck select 0; _isfriendly = _buildcheck select 1; if ((_isowner) || (_isfriendly)) then { _canBuildOnPlot = true; }; }; // _message if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; }; _missing = ""; _hasrequireditem = true; { _hastoolweapon = _x in weapons player; if(!_hastoolweapon) exitWith { _hasrequireditem = false; _missing = getText (configFile >> "cfgWeapons" >> _x >> "displayName"); }; } count _require; _hasbuilditem = _this in magazines player; if (!_hasbuilditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_player_31"),_text,"build"] , "PLAIN DOWN"]; }; if (!_hasrequireditem) exitWith {DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_137"),_missing] , "PLAIN DOWN"]; }; if (_hasrequireditem) then { _location = [0,0,0]; _isOk = true; // get initial players position & set max build range origin. if ((DZE_BuildInPlotRadius) && (_requireplot)) then{ _location1 = [_nearestPole] call FNC_GetPos; _maxBuildDistance = _Distance / 2; diag_log text "Pole initial location."; }else{ _location1 = [player] call FNC_GetPos; _maxBuildDistance = 5; diag_log text "Player initial location."; }; diag_log format["[Player_Build] _location1 = %1, _maxBuildDistance = %2, DZE_BuildInPlotRadius = %3, _requireplot = %4",_location1, _maxBuildDistance, DZE_BuildInPlotRadius, _requireplot]; _dir = getDir player; // if ghost preview available use that instead if (_ghost != "") then { _classname = _ghost; }; _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; _object attachTo [player,_offset]; _position = [_object] call FNC_GetPos; cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"]; _objHDiff = 0; if !(_item in DZE_noRotate) then{ ["","","",["Init","Init",0]] spawn build_vectors; }; while {_isOk} do { _zheightchanged = false; _zheightdirection = ""; _rotate = false; if (DZE_Q) then { DZE_Q = false; _zheightdirection = "up"; _zheightchanged = true; }; if (DZE_Z) then { DZE_Z = false; _zheightdirection = "down"; _zheightchanged = true; }; if (DZE_Q_alt) then { DZE_Q_alt = false; _zheightdirection = "up_alt"; _zheightchanged = true; }; if (DZE_Z_alt) then { DZE_Z_alt = false; _zheightdirection = "down_alt"; _zheightchanged = true; }; if (DZE_Q_ctrl) then { DZE_Q_ctrl = false; _zheightdirection = "up_ctrl"; _zheightchanged = true; }; if (DZE_Z_ctrl) then { DZE_Z_ctrl = false; _zheightdirection = "down_ctrl"; _zheightchanged = true; }; if (DZE_4) then { _rotate = true; DZE_4 = false; if(DZE_dirWithDegrees) then{ DZE_memDir = DZE_memDir - DZE_curDegree; }else{ DZE_memDir = DZE_memDir - 45; }; }; if (DZE_6) then { _rotate = true; DZE_6 = false; if(DZE_dirWithDegrees) then{ DZE_memDir = DZE_memDir + DZE_curDegree; }else{ DZE_memDir = DZE_memDir + 45; }; }; if(DZE_updateVec) then{ [_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; DZE_updateVec = false; }; if(_rotate) then { [_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; }; if(_zheightchanged) then { detach _object; _position = getPosATL _object; if(_zheightdirection == "up") then { _position set [2,((_position select 2)+0.1)]; _objHDiff = _objHDiff + 0.1; }; if(_zheightdirection == "down") then { _position set [2,((_position select 2)-0.1)]; _objHDiff = _objHDiff - 0.1; }; if(_zheightdirection == "up_alt") then { _position set [2,((_position select 2)+1)]; _objHDiff = _objHDiff + 1; }; if(_zheightdirection == "down_alt") then { _position set [2,((_position select 2)-1)]; _objHDiff = _objHDiff - 1; }; if(_zheightdirection == "up_ctrl") then { _position set [2,((_position select 2)+0.01)]; _objHDiff = _objHDiff + 0.01; }; if(_zheightdirection == "down_ctrl") then { _position set [2,((_position select 2)-0.01)]; _objHDiff = _objHDiff - 0.01; }; _object setDir (getDir _object); if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then { _position set [2,0]; }; _object setPosATL _position; //diag_log format["DEBUG Change BUILDING POS: %1", _position]; _object attachTo [player]; [_object,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYaw; }; sleep 0.5; _location2 = getPosATL player; if(DZE_5) exitWith { _isOk = false; detach _object; _dir = getDir _object; _vector = [(vectorDir _object),(vectorUp _object)]; _position = getPosATL _object; //diag_log format["DEBUG BUILDING POS: %1", _position]; deleteVehicle _object; }; if(_location1 distance _location2 > 5) exitWith { _isOk = false; _cancel = true; _reason = "You've moved to far away from where you started building (within 5 meters)"; detach _object; deleteVehicle _object; }; if(abs(_objHDiff) > 5) exitWith { _isOk = false; _cancel = true; _reason = "Cannot move up or down more than 5 meters"; detach _object; deleteVehicle _object; }; if (player getVariable["combattimeout", 0] >= time) exitWith { _isOk = false; _cancel = true; _reason = (localize "str_epoch_player_43"); detach _object; deleteVehicle _object; }; if (DZE_cancelBuilding) exitWith { _isOk = false; _cancel = true; _reason = "Cancelled building."; detach _object; deleteVehicle _object; }; }; //No building on roads unless toggled if (!DZE_BuildOnRoads) then { if (isOnRoad _position) then { _cancel = true; _reason = "Cannot build on a road."; }; }; // No building in trader zones if(!canbuild) then { _cancel = true; _reason = "Cannot build in a city."; }; if ((DZE_BuildOnGround) && !(_requireplot)) then{ _toohigh = false; if (_ispole) then{ if ((_position select 2) > DZE_MaxPlotHeight) then{_toohigh = true}; }else{ if ((_position select 2) > DZE_MaxNoPlotNeededHeight) then{_toohigh = true}; }; if (_toohigh) exitWith { _isOk = false; _cancel = true; _reason = "This item must be built at ground level."; detach _object; deleteVehicle _object; }; }; if(!_cancel) then { _classname = _classnametmp; // Start Build _tmpbuilt = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; _tmpbuilt setdir _dir; // Get position based on object _location = _position; if((_isAllowedUnderGround == 0) && ((_location select 2) < 0)) then { _location set [2,0]; }; _tmpbuilt setVectorDirAndUp _vector; _buildOffset = [0,0,0]; _vUp = _vector select 1; switch (_classname) do { case "MetalFloor_DZ": { _buildOffset = [(_vUp select 0) * .148, (_vUp select 1) * .148,0]; }; }; _location = [ (_location select 0) - (_buildOffset select 0), (_location select 1) - (_buildOffset select 1), (_location select 2) - (_buildOffset select 2) ]; if (surfaceIsWater _location) then { _tmpbuilt setPosASL _location; _location = ASLtoATL _location; //Database uses ATL } else { _tmpbuilt setPosATL _location; }; cutText [format[(localize "str_epoch_player_138"),_text], "PLAIN DOWN"]; _limit = 3; if (DZE_StaticConstructionCount > 0) then { _limit = DZE_StaticConstructionCount; } else { if (isNumber (configFile >> "CfgVehicles" >> _classname >> "constructioncount")) then { _limit = getNumber(configFile >> "CfgVehicles" >> _classname >> "constructioncount"); }; }; _isOk = true; _proceed = false; _counter = 0; while {_isOk} do { [10,10] call dayz_HungerThirst; player playActionNow "Medic"; _dis=20; _sfx = "repair"; [player,_sfx,0,false,_dis] call dayz_zombieSpeak; [player,_dis,true,([player] call FNC_GetPos)] spawn player_alertZombies; r_interrupt = false; r_doLoop = true; _started = false; _finished = false; while {r_doLoop} do { _animState = animationState player; _isMedic = ["medic",_animState] call fnc_inString; if (_isMedic) then { _started = true; }; if (_started && !_isMedic) then { r_doLoop = false; _finished = true; }; if (r_interrupt || (player getVariable["combattimeout", 0] >= time)) then { r_doLoop = false; }; if (DZE_cancelBuilding) exitWith { r_doLoop = false; }; sleep 0.1; }; r_doLoop = false; if(!_finished) exitWith { _isOk = false; _proceed = false; }; if(_finished) then { _counter = _counter + 1; }; cutText [format[(localize "str_epoch_player_139"),_text, _counter,_limit], "PLAIN DOWN"]; if(_counter == _limit) exitWith { _isOk = false; _proceed = true; }; }; if (_proceed) then { _num_removed = ([player,_item] call BIS_fnc_invRemove); if(_num_removed == 1) then { cutText [format[localize "str_build_01",_text], "PLAIN DOWN"]; if (_isPole) then { [] spawn player_plotPreview; }; _tmpbuilt setVariable ["OEMPos",_location,true]; if(_lockable > 1) then { _combinationDisplay = ""; switch (_lockable) do { case 2: { // 2 lockbox _combination_1 = (floor(random 3)) + 100; // 100=red,101=green,102=blue _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; dayz_combination = _combination; if (_combination_1 == 100) then { _combination_1_Display = "Red"; }; if (_combination_1 == 101) then { _combination_1_Display = "Green"; }; if (_combination_1 == 102) then { _combination_1_Display = "Blue"; }; _combinationDisplay = format["%1%2%3",_combination_1_Display,_combination_2,_combination_3]; }; case 3: { // 3 combolock _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; dayz_combination = _combination; _combinationDisplay = _combination; }; case 4: { // 4 safe _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination_4 = floor(random 10); _combination = format["%1%2%3%4",_combination_1,_combination_2,_combination_3,_combination_4]; dayz_combination = _combination; _combinationDisplay = _combination; }; }; _tmpbuilt setVariable ["CharacterID",_combination,true]; _tmpbuilt setVariable ["ownerPUID",_playerID,true]; PVDZE_obj_Publish = [_combination,_tmpbuilt,[_dir,_location,_playerUID,_vector],_classname]; publicVariableServer "PVDZE_obj_Publish"; cutText [format[(localize "str_epoch_player_140"),_combinationDisplay,_text], "PLAIN DOWN", 5]; systemChat format [(localize "str_epoch_player_140"),_combinationDisplay,_text]; } else { _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; _tmpbuilt setVariable ["ownerPUID",_playerID,true]; // fire? if(_tmpbuilt isKindOf "Land_Fire_DZ") then { _tmpbuilt spawn player_fireMonitor; } else { PVDZE_obj_Publish = [dayz_characterID,_tmpbuilt,[_dir,_location,_playerUID,_vector],_classname]; publicVariableServer "PVDZE_obj_Publish"; }; }; } else { deleteVehicle _tmpbuilt; cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"]; }; } else { r_interrupt = false; if (vehicle player == player) then { [objNull, player, rSwitchMove,""] call RE; player playActionNow "stop"; }; deleteVehicle _tmpbuilt; cutText [(localize "str_epoch_player_46") , "PLAIN DOWN"]; }; } else { cutText [format[(localize "str_epoch_player_47"),_text,_reason], "PLAIN DOWN"]; }; }; DZE_ActionInProgress = false;
player_upgrade.sqf
/* DayZ Base Building Upgrades Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com. */ private ["_location","_dir","_classname","_missing","_text","_proceed","_num_removed","_object","_missingQty","_itemIn","_countIn","_qty","_removed","_removed_total","_tobe_removed_total","_objectID","_objectUID","_temp_removed_array","_textMissing","_newclassname","_requirements","_obj","_upgrade","_lockable","_combination_1","_combination_2","_combination_3","_combination","_objectCharacterID","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_distance","_needText","_findNearestPoles","_findNearestPole","_IsNearPlot","_playerUID","_vector"]; if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_52") , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; player removeAction s_player_upgrade_build; s_player_upgrade_build = 1; _distance = 30; _needText = localize "str_epoch_player_246"; // check for near plot _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; _findNearestPole = []; { if (alive _x) then { _findNearestPole set [(count _findNearestPole),_x]; }; } count _findNearestPoles; _IsNearPlot = count (_findNearestPole); _canBuildOnPlot = false; if(_IsNearPlot == 0) then { _canBuildOnPlot = true; } else { // check nearby plots ownership && then for friend status _nearestPole = _findNearestPole select 0; // Find owner _ownerID = _nearestPole getVariable["ownerPUID","0"]; if (DZE_APlotforLife) then { _playerUID = [player] call FNC_GetPlayerUID; }else{ _playerUID = dayz_characterID; }; // diag_log format["DEBUG BUILDING: %1 = %2", dayz_characterID, _ownerID]; // check if friendly to owner if(_playerUID == _ownerID) then { _canBuildOnPlot = true; } else { _friendlies = _nearestPole getVariable ["plotfriends",[]]; _fuid = []; { _friendUID = _x select 0; _fuid = _fuid + [_friendUID]; } forEach _friendlies; _builder = getPlayerUID player; // check if friendly to owner if(_builder in _fuid) then { _canBuildOnPlot = true; }; }; }; // exit if not allowed due to plot pole if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_157"),_needText,_distance] , "PLAIN DOWN"]; }; // get cursortarget from addaction _obj = _this select 3; // Find objectID _objectID = _obj getVariable ["ObjectID","0"]; // Find objectUID _objectUID = _obj getVariable ["ObjectUID","0"]; if(_objectID == "0" && _objectUID == "0") exitWith {DZE_ActionInProgress = false; s_player_upgrade_build = -1; cutText [(localize "str_epoch_player_50"), "PLAIN DOWN"];}; // Get classname _classname = typeOf _obj; // Find display name _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); // Find next upgrade _upgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "upgradeBuilding"); if ((count _upgrade) > 0) then { _newclassname = _upgrade select 0; _lockable = 0; if(isNumber (configFile >> "CfgVehicles" >> _newclassname >> "lockable")) then { _lockable = getNumber(configFile >> "CfgVehicles" >> _newclassname >> "lockable"); }; _requirements = _upgrade select 1; _missingQty = 0; _missing = ""; _proceed = true; { _itemIn = _x select 0; _countIn = _x select 1; _qty = { (_x == _itemIn) || (configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn) } count magazines player; if(_qty < _countIn) exitWith { _missing = _itemIn; _missingQty = (_countIn - _qty); _proceed = false; }; } forEach _requirements; if (_proceed) then { [1,1] call dayz_HungerThirst; player playActionNow "Medic"; [player,20,true,(getPosATL player)] spawn player_alertZombies; _temp_removed_array = []; _removed_total = 0; _tobe_removed_total = 0; { _removed = 0; _itemIn = _x select 0; _countIn = _x select 1; // diag_log format["Recipe Finish: %1 %2", _itemIn,_countIn]; _tobe_removed_total = _tobe_removed_total + _countIn; { if( (_removed < _countIn) && ((_x == _itemIn) || configName(inheritsFrom(configFile >> "cfgMagazines" >> _x)) == _itemIn)) then { _num_removed = ([player,_x] call BIS_fnc_invRemove); _removed = _removed + _num_removed; _removed_total = _removed_total + _num_removed; if(_num_removed >= 1) then { _temp_removed_array set [count _temp_removed_array,_x]; }; }; } forEach magazines player; } forEach _requirements; // all parts removed proceed if (_tobe_removed_total == _removed_total) then { // Get position _location = _obj getVariable["OEMPos",(getposATL _obj)]; // Get direction _dir = getDir _obj; // Get vector _vector = [(vectorDir _obj),(vectorUp _obj)]; // Current charID _objectCharacterID = _obj getVariable ["CharacterID","0"]; _ownerID = _obj getVariable["ownerPUID","0"]; _classname = _newclassname; // Create new object _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; // Set direction _object setDir _dir; _object setVariable["memDir",_dir,true]; // Set vector _object setVectorDirAndUp _vector; // Set location _object setPosATL _location; // Set Owner. _object setVariable ["ownerPUID",_ownerID,true]; if (_lockable == 3) then { _combination_1 = floor(random 10); _combination_2 = floor(random 10); _combination_3 = floor(random 10); _combination = format["%1%2%3",_combination_1,_combination_2,_combination_3]; _objectCharacterID = _combination; cutText [format[(localize "str_epoch_player_158"),_combination,_text], "PLAIN DOWN", 5]; } else { cutText [format[(localize "str_epoch_player_159"),_text], "PLAIN DOWN", 5]; }; _playerUID = [player] call FNC_GetPlayerUID; PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location, _playerUID,_vector],_classname,_obj,player]; publicVariableServer "PVDZE_obj_Swap"; player reveal _object; } else { {player addMagazine _x;} count _temp_removed_array; cutText [format[(localize "str_epoch_player_145"),_removed_total,_tobe_removed_total], "PLAIN DOWN"]; }; } else { _textMissing = getText(configFile >> "CfgMagazines" >> _missing >> "displayName"); cutText [format[(localize "str_epoch_player_146"),_missingQty, _textMissing], "PLAIN DOWN"]; }; } else { cutText [(localize "str_epoch_player_82"), "PLAIN DOWN"]; }; DZE_ActionInProgress = false; s_player_upgrade_build = -1;
player_buildingDowngrade.sqf
/* DayZ Base Building Upgrades Made for DayZ Epoch please ask permission to use/edit/distrubute email vbawol@veteranbastards.com. */ private ["_location","_dir","_classname","_text","_object","_objectID","_objectUID","_newclassname","_refund","_obj","_upgrade","_objectCharacterID","_canBuildOnPlot","_friendlies","_nearestPole","_ownerID","_distance","_needText","_findNearestPoles","_findNearestPole","_IsNearPlot","_i","_invResult","_itemOut","_countOut","_abortInvAdd","_addedItems","_playerUID","_vector"]; if(DZE_ActionInProgress) exitWith { cutText [(localize "str_epoch_player_48") , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; player removeAction s_player_downgrade_build; s_player_downgrade_build = 1; _distance = 30; _needText = localize "str_epoch_player_246"; if (DZE_APlotforLife) then { _playerUID = [player] call FNC_GetPlayerUID; }else{ _playerUID = dayz_characterID; }; // check for near plot _findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance]; _findNearestPole = []; { if (alive _x) then { _findNearestPole set [(count _findNearestPole),_x]; }; } count _findNearestPoles; _IsNearPlot = count (_findNearestPole); _canBuildOnPlot = false; if(_IsNearPlot == 0) then { _canBuildOnPlot = true; } else { // check nearby plots ownership && then for friend status _nearestPole = _findNearestPole select 0; // Find owner _ownerID = _nearestPole getVariable["ownerPUID","0"]; // diag_log format["DEBUG BUILDING: %1 = %2", dayz_characterID, _ownerID]; // check if friendly to owner if(_playerUID == _ownerID) then { _canBuildOnPlot = true; } else { _friendlies = _nearestPole getVariable ["plotfriends",[]]; _fuid = []; { _friendUID = _x select 0; _fuid = _fuid + [_friendUID]; } forEach _friendlies; _builder = getPlayerUID player; // check if friendly to owner if(_builder in _fuid) then { _canBuildOnPlot = true; }; }; }; // exit if not allowed due to plot pole if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "str_epoch_player_141"),_needText,_distance] , "PLAIN DOWN"]; }; // get cursortarget from addaction _obj = _this select 3; // Current charID _objectCharacterID = _obj getVariable ["CharacterID","0"]; _ownerID = _obj getVariable["ownerPUID","0"]; if(DZE_Lock_Door != _objectCharacterID) exitWith { DZE_ActionInProgress = false; cutText [(localize "str_epoch_player_49") , "PLAIN DOWN"]; }; // Find objectID _objectID = _obj getVariable ["ObjectID","0"]; // Find objectUID _objectUID = _obj getVariable ["ObjectUID","0"]; if(_objectID == "0" && _objectUID == "0") exitWith {DZE_ActionInProgress = false; s_player_upgrade_build = -1; cutText [(localize "str_epoch_player_50"), "PLAIN DOWN"];}; // Get classname _classname = typeOf _obj; // Find display name _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName"); // Find next upgrade _upgrade = getArray (configFile >> "CfgVehicles" >> _classname >> "downgradeBuilding"); if ((count _upgrade) > 0) then { _newclassname = _upgrade select 0; _refund = _upgrade select 1; [1,1] call dayz_HungerThirst; player playActionNow "Medic"; [player,20,true,(getPosATL player)] spawn player_alertZombies; _invResult = false; _abortInvAdd = false; _i = 0; _addedItems = []; { _itemOut = _x select 0; _countOut = _x select 1; for "_x" from 1 to _countOut do { _invResult = [player,_itemOut] call BIS_fnc_invAdd; if(!_invResult) exitWith { _abortInvAdd = true; }; if(_invResult) then { _i = _i + 1; _addedItems set [(count _addedItems),[_itemOut,1]]; }; }; if (_abortInvAdd) exitWith {}; } count _refund; // all parts added proceed if(_i != 0) then { // Get position _location = _obj getVariable["OEMPos",(getposATL _obj)]; // Get direction _dir = getDir _obj; // Get vector _vector = [(vectorDir _obj),(vectorUp _obj)]; // Reset the character ID on locked doors before they inherit the newclassname if (_classname in DZE_DoorsLocked) then { _obj setVariable ["CharacterID",dayz_characterID,true]; _objectCharacterID = dayz_characterID; }; _classname = _newclassname; // Create new object _object = createVehicle [_classname, [0,0,0], [], 0, "CAN_COLLIDE"]; // Set direction _object setDir _dir; _object setVariable["memDir",_dir,true]; // Set vector _object setVectorDirAndUp _vector; // Set location _object setPosATL _location; // Set Owner. _object setVariable ["ownerPUID",_ownerID,true]; //diag_log format["Player_buildingdowngrade: [newclassname: %1] [_ownerID: %2] [_objectCharacterID: %2]",_newclassname, _ownerID, _objectCharacterID]; cutText [format[(localize "str_epoch_player_142"),_text], "PLAIN DOWN", 5]; _playerUID = [player] call FNC_GetPlayerUID; PVDZE_obj_Swap = [_objectCharacterID,_object,[_dir,_location,_playerUID,_vector],_classname,_obj,player]; publicVariableServer "PVDZE_obj_Swap"; player reveal _object; } else { cutText [format[(localize "str_epoch_player_143"), _i,(getText(configFile >> "CfgMagazines" >> _itemOut >> "displayName"))], "PLAIN DOWN"]; { [player,(_x select 0),(_x select 1)] call BIS_fnc_invRemove; } count _addedItems; }; } else { cutText [(localize "str_epoch_player_51"), "PLAIN DOWN"]; }; DZE_ActionInProgress = false; s_player_downgrade_build = -1;
Вот мой РПТ
РПТ
Накрайняк вес сервер совсеми потрохами ссылка на скачку сервера с гугла
Поделиться сообщением
Ссылка на сообщение
Поделиться на других сайтах