-
Posts
66 -
Joined
-
Last visited
Content Type
Profiles
Forums
Articles
Posts posted by aVa Savagerx
-
-
Ok here you go:
https://www.mediafire.com/folder/kk3hrcwhtmouz/Taviana_Overpoch_Bikeys
You will get the 3 keys needed to play Taviana Overpoch.
Enjoy!
-
Hey man, are you getting a "...are not signed by a key accepted by this server" ? what you need are the Taviana Bikeys and you put them in your Server Files alongside the ones provided for Overwatch and Epoch. I am heading to uni now but when I get back later I will upload them and give you the link.
-
Try using DayzLauncher its like a newer version of Commander. It automatically sets your launch paramaters if you have the required mods downloaded for the server you are trying to join. Otherwise it asks if you would like to download them.
-
I had some discussion with Rimblock about PP4L compatibility here:
I had no luck with merging the scripts but I am not a scripter :)
-
Awesome, thanks to both of you for your help. Will give it a crack sometime soon. :)
-
Normally that means you are not running the required mod or an incorrect version of the mod which does not have the required addons. Not sure how it could relate to a firewall because if the firewall was blocking the required ports you should not have been able to connect to the game server at all?
-
Is there away to tie the procedure to server reboot?
To the best of my knowledge if you use static restart times, such as set times that your server restarts, you can set a trigger in your database to run those events at the same time. The problem is most people use dynamic restarting which would throw this method off somewhat.
For dynamic restarting, my understanding is that they are both separate applications so you would need to create a batch file which runs both the SQL script as well as restarts the server for you. You should be able to do this through BEC so that when it shuts the server down it executes that batch file which then brings everything back up.
I hope this helps. I have just woken up so may not be as coherent as possible, if you need me to explain further feel free to ask.
-
Updated again to include more mods/scripts.
-
I have no clue :) I am assuming that I broke the variable whilst merging the two scripts. Will give it another crack in a day or two.
-
I will give it another crack with infistar disabled. Are you able to check the elevator_build.sqf for me to make sure I am integrating it correctly? I am fairly certain that my issue would lie in there more than with the AH
-
Alrighty, I got some free time and had a few cracks at it. No luck :(
I get the dialog option to build elevator but Infistar bans me. I am fairly certain that I am breaking the script when trying to implement the code.
13:06:12 "infiSTAR.de Log: [aVa] Savage (123456789123456789) | GameFNCbroken: distance (BANNED)"13:06:12 "infiSTAR.de Log: SERVER kicked [aVa] Savage(123456789123456789) @123456"13:06:12 "nil player object attempting PV, :["123456789123456789","[aVa] Savage"]"Server RPT is clean
Client Side RPT has errors
ArmA2OA.RPT
"Elevator script initialized" Error in expression <false]; }; } else { player removeAction s_player_elevator_next; s_player_elevato> Error position: <s_player_elevator_next; s_player_elevato> Error Undefined variable in expression: s_player_elevator_next File mpmissions\__CUR_MP.Tavi\Custom\Elevator\elevator_init.sqf, line 71
Please also take a look at my AP4L Merged elevator build script.
elevator_build.sqf
private ["_args","_option","_obj","_id","_elevatorStop","_dist","_canBuildOnPlot","_distance","_needText","_findNearestPoles","_findNearestPole","_IsNearPlot","_nearestPole","_ownerID","dayz_characterID","_friendlies","_playerUID","_isPole","_requireplot"]; if (DZE_ActionInProgress) exitWith { cutText ["Upgrade already in progress." , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; player removeAction s_player_elevator_upgrade; s_player_elevator_upgrade = 1; player removeAction s_player_elevator_upgrade_stop; s_player_elevator_upgrade_stop = 1; _playerUID = getPlayerUID player; 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 [(localize "str_epoch_player_44") , "PLAIN DOWN"]; }; if(_IsNearPlot == 0) then { // Allow building of plot if(_requireplot == 0 || _isLandFireDZ) then { _canBuildOnPlot = true; }; } else { // Since there are plots nearby we check for ownership && then for friend status // check nearby plots ownership && then for friend status _nearestPole = _findNearestPole select 0; // Find owner _ownerID = _nearestPole getVariable ["ownerPUID","0"]; diag_log format["Player_build start: [PlayerUID = %1] [OwnerID = %2]", _playerUID, _ownerID]; // check if friendly to owner if(_playerUID == _ownerID) then { //Keep ownership // owner can build anything within his plot except other plots diag_log text "Player is owner"; if(!_isPole) then { _canBuildOnPlot = true; }; } else { // disallow building plot if(!_isPole) then { _friendlies = player getVariable ["friendlyTo",[]]; // check if friendly to owner if(_ownerID in _friendlies) then { _canBuildOnPlot = true; }; }; }; }; if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; }; _args = _this select 3; _option = _args select 0; switch (_option) do { case "build": { _obj = _args select 1; _id = [_obj] call ELE_fnc_generateElevatorId; if (_id == "") exitWith { cutText ["invalid elevator ID generated", "PLAIN"] }; if ((ELE_RequiredBuildTools call AC_fnc_hasTools) && {ELE_RequiredBuildItems call AC_fnc_checkAndRemoveRequirements}) then { ["Medic", ELE_MaxRange] call AC_fnc_doAnimationAndAlertZombies; ELE_elevator = [_obj, _id] call AC_fnc_swapObject; titleText ["Elevator Built", "PLAIN"]; }; }; case "build_stop": { _obj = _args select 1; if (isNil "ELE_elevator") exitWith { cutText ["no elevator selected", "PLAIN"] }; _dist = _obj distance ELE_elevator; if (_dist > ELE_MaxRange) exitWith { cutText [format["Elevator Stop is to far away from Elevator (%1 > %2)", _dist, ELE_MaxRange], "PLAIN"] }; _id = [ELE_elevator] call ELE_fnc_getNextStopId; if (_id == "") exitWith { cutText ["Elevator Stop already exists or to many (max. 9 per Elevator)", "PLAIN"] }; if ((ELE_RequiredBuildTools call AC_fnc_hasTools) && {ELE_RequiredBuildStopItems call AC_fnc_checkAndRemoveRequirements}) then { ["Medic", ELE_MaxRange] call AC_fnc_doAnimationAndAlertZombies; _elevatorStop = [_obj, _id, ELE_StopClass] call AC_fnc_swapObject; titleText ["Elevator Stop Built", "PLAIN"]; }; }; }; DZE_ActionInProgress = false; s_player_elevator_upgrade = -1; s_player_elevator_upgrade_stop = -1;
Any ideas where I went wrong?
-
No problem :) glad I could help
-
Hey there, here is the simplest way and it involves stopping them spawning at all...or reducing the spawn rates of boats that you do not want!
Go into
@DayZ_Epoch_Server\addons\dayz_server\missions\DayZ_Epoch_11.Chernarus\dynamic_vehicle.sqf
The format is the vehicle name and then how many can spawn. I have pulled out the boats whose names I recognise...remove them, reduce their spawns or choose which boats you want and do not want. Otherwise you can use the block of code in the spoiler and that will stop all boats from spawning. Note you can still buy them at traders.
["Fishing_Boat",3],
["JetSkiYanahui_Case_Blue",1],
["JetSkiYanahui_Case_Green",1],
["JetSkiYanahui_Case_Red",1],
["JetSkiYanahui_Case_Yellow",1],["PBX",3],
["RHIB",3],
["Smallboat_1",3],
["Smallboat_2",3],
["Zodiac",3],
AllowedVehiclesList = [ ["AH6X_DZ",3], ["AN2_DZ",3], ["ArmoredSUV_PMC_DZE",1], ["ATV_CZ_EP1",3], ["ATV_US_EP1",3], ["C130J_US_EP1_DZ",1], ["car_hatchback",3], ["car_sedan",3], ["CH_47F_EP1_DZE",1], ["CSJ_GyroC",3], ["CSJ_GyroCover",3], ["CSJ_GyroP",3], ["datsun1_civil_1_open",3], ["datsun1_civil_2_covered",3], ["datsun1_civil_3_open",3], //["Fishing_Boat",3], Removed ["GAZ_Vodnik_DZE",1], ["GAZ_Vodnik_MedEvac",1], ["GLT_M300_LT",3], ["GLT_M300_ST",3], ["GNT_C185",1], ["GNT_C185C",1], ["GNT_C185R",1], ["GNT_C185U",1], ["hilux1_civil_1_open",3], ["hilux1_civil_2_covered",3], ["hilux1_civil_3_open_EP1",3], ["HMMWV_Ambulance",1], ["HMMWV_Ambulance_CZ_DES_EP1",1], ["HMMWV_DES_EP1",3], ["HMMWV_DZ",3], ["HMMWV_M1035_DES_EP1",1], ["HMMWV_M1151_M2_CZ_DES_EP1_DZE",1], ["HMMWV_M998A2_SOV_DES_EP1_DZE",1], ["Ikarus",3], ["Ikarus_TK_CIV_EP1",3], //["JetSkiYanahui_Case_Blue",1], Removed //["JetSkiYanahui_Case_Green",1], Removed //["JetSkiYanahui_Case_Red",1], Removed //["JetSkiYanahui_Case_Yellow",1], Removed ["Kamaz",3], ["KamazRefuel_DZ",1], ["Lada1",3], ["Lada1_TK_CIV_EP1",3], ["Lada2",3], ["Lada2_TK_CIV_EP1",3], ["LadaLM",3], ["LandRover_CZ_EP1",3], ["LandRover_MG_TK_EP1_DZE",1], ["LandRover_Special_CZ_EP1_DZE",1], ["LandRover_TK_CIV_EP1",3], ["M1030_US_DES_EP1",3], ["MH6J_DZ",3], ["Mi17_Civilian_DZ",3], ["Mi17_DZE",3], ["MMT_Civ",6], ["MtvrRefuel_DES_EP1_DZ",1], ["MTVR_DES_EP1",3], ["MV22_DZ",1], ["Offroad_DSHKM_Gue_DZE",3], ["Old_bike_TK_INS_EP1",3], ["Old_moto_TK_Civ_EP1",3], //["PBX",3], Removed ["Pickup_PK_GUE_DZE",3], ["Pickup_PK_INS_DZE",3], ["Pickup_PK_TK_GUE_EP1_DZE",3], //["RHIB",3], Removed ["S1203_ambulance_EP1",3], ["S1203_TK_CIV_EP1",3], ["Skoda",3], ["SkodaBlue",3], ["SkodaGreen",3], ["SkodaRed",3], //["Smallboat_1",3], Removed //["Smallboat_2",3], Removed ["SUV_Blue",1], ["SUV_Camo",1], ["SUV_Charcoal",1], ["SUV_Green",1], ["SUV_Orange",1], ["SUV_Pink",1], ["SUV_Red",1], ["SUV_Silver",1], ["SUV_TK_CIV_EP1",1], ["SUV_White",1], ["SUV_Yellow",1], ["tractor",3], ["TT650_Civ",3], ["TT650_Ins",3], ["TT650_TK_CIV_EP1",3], ["UAZ_CDF",3], ["UAZ_INS",3], ["UAZ_MG_TK_EP1_DZE",3], ["UAZ_RU",3], ["UAZ_Unarmed_TK_CIV_EP1",3], ["UAZ_Unarmed_TK_EP1",3], ["UAZ_Unarmed_UN_EP1",3], ["UH1H_DZE",2], ["UH1Y_DZE",2], ["UH60M_EP1_DZE",1], ["UralRefuel_TK_EP1_DZ",1], ["Ural_CDF",3], ["Ural_TK_CIV_EP1",3], ["Ural_UN_EP1",3], ["V3S_Open_TK_CIV_EP1",3], ["V3S_Open_TK_EP1",3], ["V3S_Refuel_TK_GUE_EP1_DZ",1], ["VolhaLimo_TK_CIV_EP1",3], ["Volha_1_TK_CIV_EP1",3], ["Volha_2_TK_CIV_EP1",3], ["VWGolf",3], //["Zodiac",3], Removed ["CH53_DZE",1] ];
-
Very interesting and thought provoking. A bit beyond my level of technical understanding but it makes sense. I was working along the lines of increasing server performance but what you say about offloading things like the object_helpers to clients makes sense (I believe thats how dayz handles zombies too). I know of headless client solutions and others too.
I suppose in the battle to keep mission file sizes down it would be nice to be able to leave a lot of the scripts serverside (like your bike example) where they can live in the server files and have little to no impact on performance and keep others such as SBP locally. Ultimately though I find that your discussion regarding taking only the CUSTOM parts of variables.sqf and compiles.sqf already makes a HUGE difference. Also diffmerging mods that use common files such as playerbuild.sqf for instance.
Some other mods also seem poorly constructed and use several files to do what could be done in one file with an array (I reckon it is because not everyone is a coding wizard :P ) such as the older deployables scripts where you needed a file for every deployable you wished to create etc. Through optimisations of these mods and different version releases for compatibility (Such as Vector building releasing different compatible versions for different mod combinations). I have found that the community is starting to reap some benefit.
The other killer on mission file sizes is custom loading screens, custom audio (intro music ) and also custom textures for clothing or vehicles. A really simple thing but it often goes unnoticed!
-
First off, great video! Your videos may be 1+ hours long but they are always worth it.
I have a question regarding the first part of your video, in particular the way in which the server initialises and uses the MPmission. The format etc you have used is default where init.sqf initialises the custom compiles.sqf and variables.sqf but I have noticed that some groups such as Vilayer and other hosts (also CCG clan) have exceptionally different formatting of their missions. Why is this? Is there any benefit?
I am assuming you can host some of your mission file mods in your server files to prevent clients from being able to access them afterwards (ie theft/copying) but it comes at the cost of server performance because the files are not stored locally on the client pc?
Any insight will be appreciated.
-
Thanks for the reply RimBlock,
I am using the version provided with the section that is preconfigured for compatibility with your mod and Raymix's Snap Build Pro. I am not sure which version that is however. (when I compared them with my standard APfL install (fused with snapbuilds playerbuild.sqf) there were no differences except for the vector build additions so I just used the one provided. Having looked at it I am fairly certain it is the current stable version released.
So in theory, if I use the lines 22 and the block from line 122 -> 182 that you linked, and add that to the elevator_build.sqf it should then do the ownership and tagged friendly check. got it.
Essentially I am trying to prevent a glitch that allows people to build elevators within the boundaries of someone else's plot pole because the elevator build script did not account for this. It is simple in theory but in reality it is the variables that confuse me. I am new to scripting so this one is a challenge but I will take your suggestions and give it a crack!
Thank you for your time
-
In short it is possible,
Search to find where DZE_helilift (whatever it is called) is actually called from and you will be able to find the config for it. I know I have seen it before but I cannot for the life of me remember where. I wish I could be more help but I am swamped with work atm.
If you are still stuck let me know and I will try to help you further
-
-
I am trying to use Plot Pole for Life's plot pole checking functions for the elevator script by Axecop. Essentially I only want plot pole owners and tagged friendlies to be able to build elevators and elevator stops around their bases, not randoms. I have tried and failed and thus am asking for help :) the non plot pole for life version does not work on my server unfortunately as it wont detect my player as being near a plot pole even when I am standing right next to it. I know it has something to do with UIDs, PUIDs etc but I lack the necessary scripting knowledge to solve the problem.
Elevator Build Script
elevator_build.sqf (vanilla)
private ["_args","_option","_obj","_id","_elevatorStop","_dist"]; if (DZE_ActionInProgress) exitWith { cutText ["Upgrade already in progress." , "PLAIN DOWN"]; }; DZE_ActionInProgress = true; player removeAction s_player_elevator_upgrade; s_player_elevator_upgrade = 1; player removeAction s_player_elevator_upgrade_stop; s_player_elevator_upgrade_stop = 1; _args = _this select 3; _option = _args select 0; switch (_option) do { case "build": { _obj = _args select 1; _id = [_obj] call ELE_fnc_generateElevatorId; if (_id == "") exitWith { cutText ["invalid elevator ID generated", "PLAIN"] }; if ((ELE_RequiredBuildTools call AC_fnc_hasTools) && {ELE_RequiredBuildItems call AC_fnc_checkAndRemoveRequirements}) then { ["Medic", ELE_MaxRange] call AC_fnc_doAnimationAndAlertZombies; ELE_elevator = [_obj, _id] call AC_fnc_swapObject; titleText ["Elevator Built", "PLAIN"]; }; }; case "build_stop": { _obj = _args select 1; if (isNil "ELE_elevator") exitWith { cutText ["no elevator selected", "PLAIN"] }; _dist = _obj distance ELE_elevator; if (_dist > ELE_MaxRange) exitWith { cutText [format["Elevator Stop is to far away from Elevator (%1 > %2)", _dist, ELE_MaxRange], "PLAIN"] }; _id = [ELE_elevator] call ELE_fnc_getNextStopId; if (_id == "") exitWith { cutText ["Elevator Stop already exists or to many (max. 9 per Elevator)", "PLAIN"] }; if ((ELE_RequiredBuildTools call AC_fnc_hasTools) && {ELE_RequiredBuildStopItems call AC_fnc_checkAndRemoveRequirements}) then { ["Medic", ELE_MaxRange] call AC_fnc_doAnimationAndAlertZombies; _elevatorStop = [_obj, _id, ELE_StopClass] call AC_fnc_swapObject; titleText ["Elevator Stop Built", "PLAIN"]; }; }; }; DZE_ActionInProgress = false; s_player_elevator_upgrade = -1; s_player_elevator_upgrade_stop = -1;
Solution (for epoch without PP4L)
elevator_build.sqf
private ["_args","_option","_obj","_id","_elevatorStop","_dist","_canBuildOnPlot","_distance","_needText","_findNearestPoles","_findNearestPole","_IsNearPlot","_nearestPole","_ownerID","dayz_characterID","_friendlies"];if (DZE_ActionInProgress) exitWith { cutText ["Upgrade already in progress." , "PLAIN DOWN"]; };DZE_ActionInProgress = true;player removeAction s_player_elevator_upgrade;s_player_elevator_upgrade = 1;player removeAction s_player_elevator_upgrade_stop;s_player_elevator_upgrade_stop = 1;// check for near plot_canBuildOnPlot = false;_distance = DZE_PlotPole select 0;_needText = localize "str_epoch_player_246";_findNearestPoles = nearestObjects [(vehicle player), ["Plastic_Pole_EP1_DZ"], _distance];_findNearestPole = [];{if (alive _x) then {_findNearestPole set [(count _findNearestPole),_x];};} foreach _findNearestPoles;_IsNearPlot = count (_findNearestPole);if(_IsNearPlot == 0) then {_canBuildOnPlot = true;} else {// Since there are plots nearby we check for ownership and then for friend status// check nearby plots ownership and then for friend status_nearestPole = _findNearestPole select 0;// Find owner_ownerID = _nearestPole getVariable["CharacterID","0"];// diag_log format["DEBUG BUILDING: %1 = %2", dayz_characterID, _ownerID];// check if friendly to ownerif(dayz_characterID == _ownerID) then { //Keep ownership// owner can build anything within his plot except other plots_canBuildOnPlot = true;} else {_friendlies = player getVariable ["friendlyTo",[]];// check if friendly to ownerif(_ownerID in _friendlies) then {_canBuildOnPlot = true;};};};if(!_canBuildOnPlot) exitWith { DZE_ActionInProgress = false; cutText [format[(localize "STR_EPOCH_PLAYER_135"),_needText,_distance] , "PLAIN DOWN"]; };_args = _this select 3;_option = _args select 0;switch (_option) do {case "build": {_obj = _args select 1;_id = [_obj] call ELE_fnc_generateElevatorId;if (_id == "") exitWith { cutText ["invalid elevator ID generated", "PLAIN"] };if ((ELE_RequiredBuildTools call AC_fnc_hasTools) && {ELE_RequiredBuildItems call AC_fnc_checkAndRemoveRequirements}) then {["Medic", ELE_MaxRange] call AC_fnc_doAnimationAndAlertZombies;ELE_elevator = [_obj, _id] call AC_fnc_swapObject;titleText ["Elevator Built", "PLAIN"];};};case "build_stop": {_obj = _args select 1;if (isNil "ELE_elevator") exitWith { cutText ["no elevator selected", "PLAIN"] };_dist = _obj distance ELE_elevator;if (_dist > ELE_MaxRange) exitWith { cutText [format["Elevator Stop is to far away from Elevator (%1 > %2)", _dist, ELE_MaxRange], "PLAIN"] };_id = [ELE_elevator] call ELE_fnc_getNextStopId;if (_id == "") exitWith { cutText ["Elevator Stop already exists or to many (max. 9 per Elevator)", "PLAIN"] };if ((ELE_RequiredBuildTools call AC_fnc_hasTools) && {ELE_RequiredBuildStopItems call AC_fnc_checkAndRemoveRequirements}) then {["Medic", ELE_MaxRange] call AC_fnc_doAnimationAndAlertZombies;_elevatorStop = [_obj, _id, ELE_StopClass] call AC_fnc_swapObject;titleText ["Elevator Stop Built", "PLAIN"];};};};DZE_ActionInProgress = false;s_player_elevator_upgrade = -1;s_player_elevator_upgrade_stop = -1;Solution (for epoch with PP4L)
?????????????
Unsure how to properly merge only the owner and tagged friendly pieces of the PP4L player_build.sqf because it uses PUID and other variables and I am not sure exactly how they interact. I use a version of Vector Building which includes snap pro and plot pole for life etc. The player_build.sqf is linked below
player_build.sqf
/* DayZ Base Building Made for DayZ Epoch please ask permission to use/edit/distrubute email [email protected]. */ private ["_helperColor","_objectHelper","_objectHelperDir","_objectHelperPos","_canDo", "_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","_ownerPUID","_playerUID"]; DZE_BuildVector = [[0,0,0],[0,0,0]]; 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 ((getPosATL player) 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 = getPlayerUID player; //snap vars -- temporary fix for errors so variables.sqf can be skipped if (isNil "snapProVariables") then { if (isNil "DZE_snapExtraRange") then { DZE_snapExtraRange = 0; }; s_player_toggleSnap = -1; s_player_toggleSnapSelect = -1; s_player_toggleSnapSelectPoint=[]; snapActions = -1; snapGizmos = []; snapGizmosNearby = []; snapProVariables = true; // will skip this statement from now on. }; // snap vars helperDetach = false; _canDo = (!r_drag_sqf and !r_player_unconscious); _vector = []; fnc_SetPitchBankYawBuild = { private ["_object","_rotations","_aroundX","_aroundY","_aroundZ","_dirX","_dirY","_dirZ","_upX","_upY","_upZ","_dir","_up","_dirXTemp", "_upXTemp"]; _object = _this select 0; _rotations = _this select 1; _aroundX = _rotations select 0; _aroundY = _rotations select 1; _aroundZ = (360 - (_rotations select 2)) - 360; _dirX = 0; _dirY = 1; _dirZ = 0; _upX = 0; _upY = 0; _upZ = 1; if (_aroundX != 0) then { _dirY = cos _aroundX; _dirZ = sin _aroundX; _upY = -sin _aroundX; _upZ = cos _aroundX; }; if (_aroundY != 0) then { _dirX = _dirZ * sin _aroundY; _dirZ = _dirZ * cos _aroundY; _upX = _upZ * sin _aroundY; _upZ = _upZ * cos _aroundY; }; if (_aroundZ != 0) then { _dirXTemp = _dirX; _dirX = (_dirXTemp* cos _aroundZ) - (_dirY * sin _aroundZ); _dirY = (_dirY * cos _aroundZ) + (_dirXTemp * sin _aroundZ); _upXTemp = _upX; _upX = (_upXTemp * cos _aroundZ) - (_upY * sin _aroundZ); _upY = (_upY * cos _aroundZ) + (_upXTemp * sin _aroundZ); }; _dir = [_dirX,_dirY,_dirZ]; _up = [_upX,_upY,_upZ]; _object setVectorDirAndUp [_dir,_up]; DZE_BuildVector = [_dir,_up]; }; 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; 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 (getPosATL player 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"); }; _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 [(localize "str_epoch_player_44") , "PLAIN DOWN"]; }; if(_IsNearPlot == 0) then { // Allow building of plot if(_requireplot == 0 || _isLandFireDZ) then { _canBuildOnPlot = true; }; } else { // Since there are plots nearby we check for ownership && then for friend status // check nearby plots ownership && then for friend status _nearestPole = _findNearestPole select 0; // Find owner _ownerID = _nearestPole getVariable ["ownerPUID","0"]; diag_log format["Player_build start: [PlayerUID = %1] [OwnerID = %2]", _playerUID, _ownerID]; // check if friendly to owner if(_playerUID == _ownerID) then { //Keep ownership // owner can build anything within his plot except other plots diag_log text "Player is owner"; if(!_isPole) then { _canBuildOnPlot = true; }; } else { // disallow building plot if(!_isPole) then { _friendlies = player getVariable ["friendlyTo",[]]; // check if friendly to owner if(_ownerID in _friendlies) 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 inital players position _location1 = getPosATL player; _dir = getDir player; // if ghost preview available use that instead /*if (_ghost != "") then { _classname = _ghost; };*/ _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"]; _object setDir 0; //Build gizmo _objectHelper = "Sign_sphere10cm_EP1" createVehicle _location; _helperColor = "#(argb,8,8,3)color(0,0,0,0,ca)"; _objectHelper setobjecttexture [0,_helperColor]; _objectHelper attachTo [player,_offset]; _object attachTo [_objectHelper,[0,0,0]]; _position = getPosATL _objectHelper; //cutText [(localize "str_epoch_player_45"), "PLAIN DOWN"]; _objHDiff = 0; if (isClass (missionConfigFile >> "SnapBuilding" >> _classname)) then { ["","","",["Init",_object,_classname,_objectHelper]] spawn snap_build; }; DZE_updateVec = false; DZE_memDir = getDir _objectHelper; DZE_memForBack = 0; DZE_memLeftRight = 0; if !(_classname in DZE_noRotate) then{ s_player_setVectorsReset = player addaction ["Reset","Mods\SnapBuildPro\player_vectorChange.sqf","reset"]; s_player_setVectorsForward = player addaction ["Pitch Forward","Mods\SnapBuildPro\player_vectorChange.sqf","forward"]; s_player_setVectorsBack = player addaction ["Pitch Back","Mods\SnapBuildPro\player_vectorChange.sqf","back"]; s_player_setVectorsLeft = player addaction ["Bank Left","Mods\SnapBuildPro\player_vectorChange.sqf","left"]; s_player_setVectorsRight = player addaction ["Bank Right","Mods\SnapBuildPro\player_vectorChange.sqf","right"]; s_player_setVectors1 = player addaction ["Increment by 1 degree","Mods\SnapBuildPro\player_vectorChange.sqf","1"]; s_player_setVectors5 = player addaction ["Increment by 5 degrees","Mods\SnapBuildPro\player_vectorChange.sqf","5"]; s_player_setVectors45 = player addaction ["Increment by 45 degrees","Mods\SnapBuildPro\player_vectorChange.sqf","45"]; s_player_setVectors90 = player addaction ["Increment by 90 degrees","Mods\SnapBuildPro\player_vectorChange.sqf","90"]; }; 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 (helperDetach) then { _dir = -45; DZE_memDir = DZE_memDir - 45; } else { _dir = 180; DZE_memDir = 180; }; }; if (DZE_6) then { _rotate = true; DZE_6 = false; if (helperDetach) then { _dir = 45; DZE_memDir = DZE_memDir + 45; } else { _dir = 0; DZE_memDir = 0; }; }; if(DZE_updateVec) then{ [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYawBuild; DZE_updateVec = false; }; if (DZE_F and _canDo) then { if (helperDetach) then { _objectHelper attachTo [player]; DZE_memDir = DZE_memDir-(getDir player); helperDetach = false; [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYawBuild; } else { _objectHelperPos = getPosATL _objectHelper; detach _objectHelper; DZE_memDir = getDir _objectHelper; [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYawBuild; _objectHelper setPosATL _objectHelperPos; _objectHelper setVelocity [0,0,0]; //fix sliding glitch helperDetach = true; }; DZE_F = false; }; if(_rotate) then { [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYawBuild; }; if(_zheightchanged) then { if (!helperDetach) then { detach _objectHelper; }; _position = getPosATL _objectHelper; 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; }; _objectHelper setDir (getDir _objectHelper); if((_isAllowedUnderGround == 0) && ((_position select 2) < 0)) then { _position set [2,0]; }; _objectHelper setPosATL _position; //diag_log format["DEBUG Change BUILDING POS: %1", _position]; if (!helperDetach) then { _objectHelper attachTo [player]; }; [_objectHelper,[DZE_memForBack,DZE_memLeftRight,DZE_memDir]] call fnc_SetPitchBankYawBuild; }; sleep 0.5; _location2 = getPosATL player; _objectHelperPos = getPosATL _objectHelper; 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; detach _objectHelper; deleteVehicle _objectHelper; }; if(_location1 distance _location2 > 10) exitWith { _isOk = false; _cancel = true; _reason = "You've moved to far away from where you started building (within 10 meters)"; detach _object; deleteVehicle _object; detach _objectHelper; deleteVehicle _objectHelper; }; if(_location1 distance _objectHelperPos > 10) exitWith { _isOk = false; _cancel = true; _reason = "Object is placed to far away from where you started building (within 10 meters)"; detach _object; deleteVehicle _object; detach _objectHelper; deleteVehicle _objectHelper; }; if(abs(_objHDiff) > 10) exitWith { _isOk = false; _cancel = true; _reason = "Cannot move up or down more than 10 meters"; detach _object; deleteVehicle _object; detach _objectHelper; deleteVehicle _objectHelper; }; if (player getVariable["combattimeout", 0] >= time) exitWith { _isOk = false; _cancel = true; _reason = (localize "str_epoch_player_43"); detach _object; deleteVehicle _object; detach _objectHelper; deleteVehicle _objectHelper; }; if (DZE_cancelBuilding) exitWith { _isOk = false; _cancel = true; _reason = "Cancelled building."; detach _object; deleteVehicle _object; detach _objectHelper; deleteVehicle _objectHelper; }; }; if !(_classname in DZE_noRotate) then{ player removeAction s_player_setVectorsReset; player removeAction s_player_setVectorsForward; player removeAction s_player_setVectorsBack; player removeAction s_player_setVectorsLeft; player removeAction s_player_setVectorsRight; player removeAction s_player_setVectors1; player removeAction s_player_setVectors5; player removeAction s_player_setVectors45; player removeAction s_player_setVectors90; }; //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(!_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; _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,(getPosATL player)] 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",_playerUID,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]; } else { _tmpbuilt setVariable ["CharacterID",dayz_characterID,true]; _tmpbuilt setVariable ["ownerPUID",_playerUID,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;
-
Glad I could help man,
If your server is just you and your friends then its not an issue but when you have a large player base all building several bases you will find object clutter becomes a real issue and manually cleaning it up is a pain. There are other SQL scripts out there written to remove some objects and ignore others etc etc but I do believe that the maintenance method using free plot pole maintenance is probably the best way currently available though.
Either way at least you reached a workable solution
-
There are 3 events, 1 sets damage over time, the other 2 clean up old objects. If you disable maintenance (the setdamageonage event) as well as setting the cleanup objects to -1 or 999, You will still find bases disappearing unless they interact with their base objects.
The easiest solution that I am aware of is to keep the events but make maintenance free, that way the objects get interacted with and do not get picked up by the cleanup scripts. Your server also doesnt get full of useless junk.
There are guides on how to do that on the forums but if you cannot find them let me know
-
aahhhh im also running a taviana server lol. i was wondering if you had any ai islands or anything for taviana
There are not too many map edits out for tavi but if there is something really close to your heart that you think would be great for Tavi in general feel free to ask :) I may get one of my clannies to make it or even do it myself. Otherwise use the map editing guides I linked to, its really easy! (building a completely new landmass on the other hand....not so much)
As for Tavi specific stuff I came across this which may tickle your fancy:
http://epochservers.com/viewtopic.php?f=14&t=54
This includes 3 different map edits in 1
1) sabina tunnel block (a must to stop people crashing into the invisible wall)
2) Prison island military base (Is that what you wanted?)
3) Knin base thing (not too sure if I like this one)
Great idea! You should add one with player GUIDs that are banned or something?! Great work!
There is a major drawback to community ban lists...namely every server has its own set of rules and just because I ban you off my server for "griefing" or "disrepecting an admin" does not mean that it is legitimate, justified or even obejctively measurable. Who will check to ensure that bans are legitimate? The flip side is that bans for clear hacking etc is objective and the reasons for the banning is relatively clear. Either way I doubt that we will see another community ban list unless there is a rigid and transparent process which allows people to scrutinise the bans and uploaders to provide logs etc of who and what they did in order to justify the bans.
-
What you are asking for is not too difficult to do and mostly involves SQL scripts which are readily available on these forums. Why not give it a crack yourself and see how you go? If you get stuck the community will help :) its good like that
-
Atm I just have stuff from Taviana on there as that is all that I was really interested in (I only host a Taviana map you see). I will look at filling up that map edits section in my next revision. In the meantime this is probably the closest I have seen:
Is that kind of what you were after?
Discussion: Official Server Files Release Date!
in Discussion
Posted
We need the community to take a stand and blacklist servers which break the terms and spread the word about which groups are doing so. That way they do not get any "business" for breaking the rules and the Epoch Devs do not need to resort to legal action. If the devs have to resort to legal action the whole time it will take up considerable time and tap into their finances which are better spent elsewhere like on A3 Epoch ;-).
I study law and still find these terms hard to define, its why you pay lawyers so much to argue over them. The issue is with potential offenders all over the world, legal enforcement of the licence agreement becomes increasingly difficult. Also a lot of clans/communities which breach the agreement do not have the finances which make it viable to sue them, you need to go after the private individuals that run the clans themselves which is not always easy.
All in all that is why it is up to us (the community) rather than the lawyers to solve the problems as they arise.