Jump to content

Asian Kid

Member
  • Posts

    330
  • Joined

  • Last visited

  • Days Won

    4

Posts posted by Asian Kid

  1. I run a Dayz Epoch server from gtxgaming

    How do i change the stock at the vendors?

    How do i activate to lift vehicles with heli?

    How do i give blood to my self?

    I have search on this forum and idont find any answer on my question.

    plz help me.

    How do i change the stock at the vendors?

    - In the data base

    How do i activate to lift vehicles with heli?

    - You can't you must add it in threw the mission.pbo

    How do i give blood to my self?

    - You can't you must add it in threw the mission.pbo

  2. Really?

    We have an anti-material weapon, a long range sniper rifle, DMRs and other guns that now zero, several silenced weapons, variety of other weapons, and really don't need "More Gunz!" Unless the weapon pack adds in a bunch of low key weapons we really don't need much more. Trust me, there are some weapons out there that I love.

     

    Playing Breaking point I fell in love with ACR variations. The ACR RCO SD was a versatile and silent gun with a dual sight both red dot and scope letting me take out zombies and even other players quickly and quietly. For a bit more firepower but still silence for hunting in towns there is the ACR G33 M320 SD. That is right go quiet with a silenced weapon that does 4500 blood at close range has two sight systems and a grenade launcher for when things get messy. Then when I wanted to reach out and touch someone but still wanted close up defense in the same gun M1SE1 Acog, DMR rounds, dual sights it could be used to snipe or up close.

    Awesome weapons but WAY too much for DayZ. I didn't even mention the anti-material and actual sniper weapons. Lets just say you didn't pick up a DMR unless you were a newspawn. All those weapons really dilute and ruin the experience. 

     

    Not looking for over powered crap. 

  3. We have that as a Mod on our Epoch Server and I have to admit, so far the people like it. Before that "addon" it was nearly impossible to stay Hero, because even when defending your own base you'd lose humanity and that got quite a few ppl mad so they turned bandit.

     

    Now that I added this lil' tweak:

    if (!isServer) exitWith {};
    _args = _this select 0;
    _victim = _args select 0;
    _killer = _args select 1;
    
    _vicHumanity = _victim getVariable ["humanity",0];
    _kilHumanity = _killer getVariable ["humanity",0];
    _vicName = _victim getVariable["bodyName","unknown"];
    _kilName = _killer getVariable["bodyName","unknown"];
    _kilBandits = _killer getVariable ["banditKills",0];
    _kilHumans = _killer getVariable ["humanKills",0];
    humChange = 0;
    
    if(_killer isKindOf "Man" and _kilName != "unknown") then{
    	// Killed
    	if(_kilHumanity < -5000) then {
    		// Killer = Bandit
    		if(_vicHumanity < -5000) then {
    			// Victim = Bandit
    			humChange = +50;
    			killMessage = format ["%1 found and killed a Bandit.",_kilName];
    			_killer setVariable ["banditKills",(_kilBandits + 1),true];
    		} else {
    			if(_vicHumanity > 5000) then {
    				// Victim = Hero
    				humChange = -2000;
    				killMessage = format ["%1 killed a Hero.",_kilName];
    			} else {
    				if(_vicHumanity >= 2500) then{
    					// Victim = Friendly
    					humChange = -1500;
    					killMessage = format ["%1 killed a Friendly player. Did you really have to?!",_kilName];
    				} else {
    					// Victim = Neutral
    					humChange = -1000;
    					killMessage = format ["%1 killed a Neutral Player. Was it a Bandit on his way down?!",_kilName];
    				};
    			};
    			_killer setVariable ["humanKills",(_kilHumans + 1),true];
    		};
    	} else {
    		if(_kilHumanity < 2500) then {
    			// Killer = Neutral
    			if(_vicHumanity < -5000) then {
    				// Victim = Bandit
    				humChange = +150;
    				killMessage = format ["%1 found and killed a Bandit.",_kilName];
    				_killer setVariable ["banditKills",(_kilBandits + 1),true];
    			} else {
    				if(_vicHumanity > 5000) then {
    					// Victim = Hero
    					humChange = -2000;
    					killMessage = format ["%1 killed a Hero.",_kilName];
    				} else {
    					if(_vicHumanity >= 2500) then{
    						// Victim = Friendly
    						humChange = -1500;
    						killMessage = format ["%1 killed a Friendly player. Did you really have to?!",_kilName];
    					} else {
    						// Victim = Neutral
    						humChange = -1000;
    						killMessage = format ["%1 killed a Neutral Player. Was it a Bandit on his way down?!",_kilName];
    					};
    				};
    				_killer setVariable ["humanKills",(_kilHumans + 1),true];
    			};
    		} else {
    			if(_kilHumanity < 5000) then {
    				// Killer = Friendly
    				if(_vicHumanity < -5000) then {
    					// Victim = Bandit
    					humChange = +200;
    					killMessage = format ["%1 found and killed a Bandit.",_kilName];
    					_killer setVariable ["banditKills",(_kilBandits + 1),true];
    				} else {
    					if(_vicHumanity > 5000) then {
    						// Victim = Hero
    						humChange = -3000;
    						killMessage = format ["%1 killed a Hero.",_kilName];
    					} else {
    						if(_vicHumanity >= 2500) then{
    							// Victim = Friendly
    							humChange = -1500;
    							killMessage = format ["%1 killed a Friendly player. Did you really have to?!",_kilName];
    						} else {
    							// Victim = Neutral
    							humChange = -1000;
    							killMessage = format ["%1 killed a Neutral Player. Was it a Bandit on his way down?!",_kilName];
    						};
    					};
    					_killer setVariable ["humanKills",(_kilHumans + 1),true];
    				};
    			} else {
    				// Killer = Hero
    				if(_vicHumanity < -5000) then {
    					// Victim = Bandit
    					humChange = +350;
    					killMessage = format ["%1 found and killed a Bandit.",_kilName];
    					_killer setVariable ["banditKills",(_kilBandits + 1),true];
    				} else {
    					if(_vicHumanity > 5000) then {
    						// Victim = Hero
    						humChange = -3000;
    						killMessage = format ["%1 killed a Hero.",_kilName];
    					} else {
    						if(_vicHumanity >= 2500) then{
    							// Victim = Friendly
    							humChange = -2000;
    							killMessage = format ["%1 killed a Friendly player. Did you really have to?!",_kilName];
    						} else {
    							// Victim = Neutral
    							humChange = -1500;
    							killMessage = format ["%1 killed a Neutral Player. Was it a Bandit on his way down?!",_kilName];
    						};
    					};
    					_killer setVariable ["humanKills",(_kilHumans + 1),true];
    				};
    			};
    		};
    	};
    	_killer setVariable["humanity",_kilHumanity+humChange,true];
    	[nil,nil,rTitleText,killMessage, "PLAIN DOWN",10] call RE;
    	humChange = nil;
    	killMessage = nil;
    };
    ctc_HumanityChange = nil;
    

    ...people seem happy  :D

    As you can see, we even filter every possible combination of Player<>Killer Humanity which opens up some nice possibilities :)

     

    +1 for changes in Epoch from me!

     

    Cheers,

    DNightmare

    How do I add this and is this working 100%?

    Does this replace death messages?

  4. Find this and remove it

     

    					if (!("+str _UCS+") && (ctrlEnabled ((uiNamespace getvariable 'BIS_dynamicText') displayctrl 9999)) or (ctrlShown ((uiNamespace getvariable 'BIS_dynamicText') displayctrl 9999))) then
    					{
    						"+_randvar10+" = [name player, getPlayerUID player, toArray ('ESP'), toArray ('ON')];
    						publicVariableServer '"+_randvar10+"';
    						failMission 'LOSER';
    					};
    
  5. I have some addons not working because of the new update.
    My intro works but it does not start at the right time
    I need to change this, but I don't know what to
    (the camera start out in debuug land)

    waitUntil { alive player };
    waituntil {!isnull (finddisplay 46)};
    

    The other thing that is not working is this spawn system it stop a lot of scripts when I add it in.
    http://opendayz.net/threads/release-scroll-menu-pick-your-own-spawn-point-class-and-loadout.13143/

     

    The new name tag system can I make then force yes?

  6. I had a custom intro I made but when the new update came it stooped working? 
    This is how it started
     

    waitUntil { alive player };
    waituntil {!isnull (finddisplay 46)};
    

    Now it doesn't show up at all. The colored tags shows up, is that blocking it?

  7. This is for fresh spawn only so people's skins wont change if they humanity changes later in game. I am not sure if this is right haven't testing. Can anyone help? 

     

    Add to init

    p2_newspawn = compile preprocessFileLineNumbers "humanity.sqf";
    waitUntil {!isNil ("dayzLoginRecord")};
    if (dayzPlayerLogin2 select 2) then
    {
        player spawn p2_newspawn;
    };
    
    Call the script humanity.sqf  and place in main mission pbo directory
     
    //Bandit\\
    if (_humanity < -2500) then {
    [dayz_playerUID,dayz_characterID,'Bandit1_DZ'] spawn player_humanityMorph;
    reload player;
    };
    
    
    //Survivor\\
    if (_humanity < 5000 and _humanity > -2500) then {
    [dayz_playerUID,dayz_characterID,'Survivor2_DZ'] spawn player_humanityMorph;
    reload player;
    };
    
    
    //Hero\\
    if (_humanity > 5000) then {
    [dayz_playerUID,dayz_characterID,'Hero1_DZ '] spawn player_humanityMorph;
    reload player;
    };
    

     

  8. I have installed base building and the Epoch one works fine :)

    When I build thing the item is there but when I restart the server it doesn't save. The normal Epoch stuff stay but no the BB.

    The problem is the BB is not writing to the data base.

  9. Can some one remove the plot pole requirement? I tired can do it successfully
     

    /*
    Base Building DayZ by Daimyo
    */
    private["_funcExitScript","_canBuildOnPlot","_isSimulated","_isDestructable","_townRange","_longWloop","_medWloop","_smallWloop","_inTown","_inProgress","_modDir","_startPos","_tObjectPos","_buildable","_chosenRecipe","_cnt","_cntLoop","_dialog","_buildReady","_buildCheck","_isInCombat","_playerCombat","_check_town","_eTool","_toolBox","_town_pos","_town_name","_closestTown","_roadAllowed","_toolsNeeded","_inBuilding","_attachCoords","_requirements","_result","_alreadyBuilt","_uidDir","_p1","_p2","_uid","_worldspace","_panelNearest2","_staticObj","_onRoad","_itemL","_itemM","_itemG","_qtyL","_qtyM","_qtyG","_qtyH","_qtyI","_qtyJ","_qtyK","_qtyO","_qtyP","_itemH","_itemI","_itemJ","_itemK","_itemO","_itemP","_cntLoop","_finished","_checkComplete","_objectTemp","_locationPlayer","_object","_id","_isOk","_text","_mags","_hasEtool","_canDo","_hasToolbox","_inVehicle","_isWater","_onLadder","_building","_medWait","_longWait","_location","_isOk","_dir","_classname","_item","_itemT","_itemS","_itemW","_qtyT","_qtyS","_qtyW","_fuel","_code","_coder","_buildables","_isPole","_distance","_findNearestPoles","_findNearestPole","_IsNearPlot","_nearestPole","_ownerID","_friendlies","_message","_buildings","_isBuilding","_cancel","_reason","_qtyB","_itemB","_qtyC","_itemC","_qtyP","_itemP","_qtyBu","_itemBu","_qtyWo","_itemWo","_qtyWoo","_itemWoo","_qtyI","_i","_isDestrutable"];
    
    // Location placement declarations
    _locationPlayer = player modeltoworld [0,0,0];
    _location 		= player modeltoworld [0,0,0]; // Used for object start location and to keep track of object position throughout
    _attachCoords = [0,0,0];
    _dir 			= getDir player;
    _building 		= nearestObject [player, "Building"];
    _staticObj 		= nearestObject [player, "Static"];
    
    // Restriction Checks
    _hasEtool 		= "ItemEtool" in weapons player;
    _hasToolbox 	= 	"ItemToolbox" in items player;
    _onLadder 		=	(getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
    _canDo 			= (!r_drag_sqf and !r_player_unconscious and !_onLadder); //USE!!
    _isWater 		= 	(surfaceIsWater _locationPlayer) or dayz_isSwimming;
    _inVehicle 		= (vehicle player != player);
    _isOk = [player,_building] call fnc_isInsideBuilding;
    _closestTown = (nearestLocations [player,["NameCityCapital","NameCity","NameVillage","Airport"],25600]) select 0;
    _town_name = text _closestTown;
    _town_pos = position _closestTown;
    
    // Booleans  Some not used, possibly use later
    _roadAllowed 	= false;
    _medWait 		= false;
    _longWait 		= false;
    _checkComplete 	= false;
    _finished 		= false;
    _eTool 			= false;
    _toolBox 		= false;
    _alreadyBuilt 	= false;
    _inBuilding 	= false;
    _inTown 		= false;
    _inProgress 	= false;
    _result 		= false;
    _isSimulated 	= false;
    _isDestructable = false;
    _canBuildOnPlot = false;
    // Strings
    _classname 		= "";
    _check_town		= "";
    
    // Other
    _cntLoop 		= 0;
    _chosenRecipe 	= [];
    _requirements 	= [];
    _buildable 		= [];
    _buildables		= [];
    _longWloop		= 2;
    _medWloop		= 1;
    _smallWloop 	= 0;
    _cnt 			= 0;
    _playerCombat = player;
    
    // Function to exit script without combat activate
    _funcExitScript = {
    	procBuild = false;
    	breakOut "exit";
    };
    
    _isPole = (_classname == "Plastic_Pole_EP1_DZ");
    
    _distance = 30;
    if(_isPole) then {
    	_distance = 45;
    };
    // check for near plot
    _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 item is plot pole and another one exists within 45m
    if(_isPole and _IsNearPlot > 0) exitWith {  TradeInprogress = false; cutText ["Cannot build plot pole within 45m of an existing plot." , "PLAIN DOWN"]; };
    
    if(_IsNearPlot == 0) then {
    
    	// Allow building of plot
    	if(_isPole) then {
    		_canBuildOnPlot = true;	
    	};
    	
    } else {
    	// Since there are plots nearby we check for 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_playerUID, _ownerID];
    
    		// check if friendly to owner
    		if(dayz_playerUID == _ownerID) then {
    			// owner can build anything within his plot except other plots
    			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 {  TradeInprogress = false; cutText ["Building requires plot pole within 30m." , "PLAIN DOWN"]; };
    
    // testing new way of finding building
    	_buildings = nearestObjects [(vehicle player), ["Building"], 100];
    	{
    		_isBuilding = [(vehicle player),_x] call fnc_isInsideBuilding;
    		if(_isBuilding) exitWith {
    			_cancel = true;
    			_reason = "Cannot build inside another building.";
    		};
    	} forEach _buildings;
    
    // Do first checks to see if player can build before counting
    if (procBuild) then {cutText ["Your already building!", "PLAIN DOWN"];breakOut "exit";};
    if(_isWater) then {cutText [localize "str_player_26", "PLAIN DOWN"];call _funcExitScript;};
    if(_onLadder) then {cutText [localize "str_player_21", "PLAIN DOWN"];call _funcExitScript;};
    if (_inVehicle) then {cutText ["Can't do this in vehicle", "PLAIN DOWN"];call _funcExitScript;};
    if (!placevault) then {cutText ["Can't build in a trader city", "PLAIN DOWN"];call _funcExitScript;};
    disableSerialization;
    closedialog 1;
    // Ashfor Fix: Did player try to drop mag and keep action active (not really needed but leave here just in case)
    //_item = _this;
    //if (_item in (magazines player) ) then { // needs }; 
    // Global variables for loop method, procBuild may not be needed if implemented in fn_selfactions.sqf
    	if (dayz_combat == 1) then {
    		cutText ["Your currently in combat, time reduced to 3 seconds. \nCanceling/escaping will set you back into combat", "PLAIN DOWN"];
    		sleep 3;
    		_playerCombat setVariable["combattimeout", 0, true];
    		dayz_combat = 0;
    	};
    r_interrupt = false;
    r_doLoop = true;
    procBuild = true;
    //Global build_list reference params:
    //[_qtyT, _qtyS, _qtyW, _qtyL, _qtyM, _qtyG], "Classname", [_attachCoords, _toolBox, _eTool, _medWait, _longWait, _inBuilding, _roadAllowed, _inTown];
    call gear_ui_init;
    // Count mags in player inventory and add to an array
    _mags = magazines player;
    	if ("ItemTankTrap" in _mags) then {
    		_qtyT = {_x == "ItemTankTrap"} count magazines player;
    		_buildables set [count _buildables, _qtyT];
    		_itemT = "ItemTankTrap";
    	} else { _qtyT = 0; _buildables set [count _buildables, _qtyT]; };
    		
    	if ("ItemSandbag" in _mags) then {
    		_qtyS = {_x == "ItemSandbag"} count magazines player;
    		_buildables set [count _buildables, _qtyS]; 
    		_itemS = "ItemSandbag";
    	} else { _qtyS = 0; _buildables set [count _buildables, _qtyS]; };
    	
    	if ("ItemWire" in _mags) then {
    		_qtyW = {_x == "ItemWire"} count magazines player;
    		_buildables set [count _buildables, _qtyW]; 
    		_itemW = "ItemWire";
    		} else { _qtyW = 0; _buildables set [count _buildables, _qtyW]; };
    		
    	if ("PartWoodPile" in _mags) then {
    		_qtyL = {_x == "PartWoodPile"} count magazines player;
    		_buildables set [count _buildables, _qtyL]; 
    		_itemL = "PartWoodPile";
    	} else { _qtyL = 0; _buildables set [count _buildables, _qtyL]; };
    	
    	if ("PartGeneric" in _mags) then {
    		_qtyM = {_x == "PartGeneric"} count magazines player;
    		_buildables set [count _buildables, _qtyM]; 
    		_itemM = "PartGeneric";
    	} else { _qtyM = 0; _buildables set [count _buildables, _qtyM]; };
    	
    	if ("HandGrenade_West" in _mags) then {
    		_qtyG = {_x == "HandGrenade_West"} count magazines player;
    		_buildables set [count _buildables, _qtyG]; 
    		_itemG = "HandGrenade_West";
    	} else { _qtyG = 0; _buildables set [count _buildables, _qtyG]; };
    	
    /*-- Add another item for recipe here by changing _qtyI, "Item_Classname", and add recipe into build_list.sqf array!
    	Dont forget to add recipe to recipelist so your players can know how to make object via recipe
    //		if ("Item_Classname" in _mags) then {
    //		_qtyI = {_x == "Item_Classname"} count magazines player;
    //		_buildables set [count _buildables, _qtyI]; 
    //		_itemG = "Item_Classname";
    //	} else { _qtyI = 0; _buildables set [count _buildables, _qtyI]; };
    */
    	
    // Check what object is returned from global array, then return classname
    	for "_i" from 0 to ((count allbuildables) - 1) do
    	{
    		_buildable = (allbuildables select _i) select _i - _i;
    		_result = [_buildables,_buildable] call BIS_fnc_areEqual;
    			if (_result) exitWith {
    				_classname = (allbuildables select _i) select _i - _i + 1;
    				_requirements = (allbuildables select _i) select _i - _i + 2;
    				_chosenRecipe = _buildable;
    			};
    		_buildable = [];
    	};
    // Quit here if no proper recipe is acquired else set names properly
    if (_classname == "") then {cutText ["You need the EXACT amount of whatever you are trying to build without extras.", "PLAIN DOWN"];call _funcExitScript;};
    if (_classname == "Grave") then {_text = "Booby Trap";};
    if (_classname == "Concrete_Wall_EP1") then {_text = "Gate Concrete Wall";};
    if (_classname == "Infostand_2_EP1") then {_text = "Gate Panel Keypad Access";};
    if (_classname != "Infostand_2_EP1" && 
    	_classname != "Concrete_Wall_EP1" &&  
    	_classname != "Grave") then {
    //_text = _classname;
    _text = getText (configFile >> "CfgVehicles" >> _classname >> "displayName");				
    };
    _buildable = [];
    
    //Get Requirements from build_list.sqf global array [_attachCoords, _startPos, _modDir, _toolBox, _eTool, _medWait, _longWait, _inBuilding, _roadAllowed, _inTown];
    _attachCoords 	= _requirements select 0;
    _startPos 		= _requirements select 1;
    _modDir 		= _requirements select 2;
    _toolBox 		= _requirements select 3;
    _eTool 			= _requirements select 4;
    _medWait 		= _requirements select 5;
    _longWait 		= _requirements select 6;
    _inBuilding 	= _requirements select 7;
    _roadAllowed 	= _requirements select 8;
    _inTown 		= _requirements select 9;
    _isSimulated 	= _requirements select 12;
    _isDestrutable	= _requirements select 13;
    // Get _startPos for object
    _location 		= player modeltoworld _startPos;
    
    //Check Requirements
    if (_toolBox) then {
    	if (!_hasToolbox) then {cutText [format["You need a tool box to build %1",_text], "PLAIN DOWN",1];call _funcExitScript; };
    };
    if (_eTool) then {
    	if (!_hasEtool) then {cutText [format["You need an entrenching tool to build %1",_text], "PLAIN DOWN",1];call _funcExitScript; };
    };
    if (_inBuilding) then {
    	if (_isOk) then {cutText [format["%1 cannot be built inside of buildings!",_text], "PLAIN DOWN",1];call _funcExitScript; };
    };
    if (!_roadAllowed) then { // Do another check for object being on road
    	_onRoad = isOnRoad _locationPlayer;
    	if(_onRoad) then {cutText [format["You cannot build %1 on the road",_text], "PLAIN DOWN",1];call _funcExitScript;};
    };
    if (!_inTown) then {
    	for "_i" from 0 to ((count allbuild_notowns) - 1) do
    	{
    		_check_town = (allbuild_notowns select _i) select _i - _i;
    		if (_town_name == _check_town) then {
    			_townRange = (allbuild_notowns select _i) select _i - _i + 1;
    			if (_locationPlayer distance _town_pos <= _townRange) then {
    				cutText [format["You cannot build %1 within %2 meters of area %3",_text, _townRange, _town_name], "PLAIN DOWN",1];call _funcExitScript;
    			};
    		};
    	};
    };
    
    //Check if other panels nearby
    _panelNearest2 = nearestObjects [player, ["Infostand_2_EP1"], 30];
    if (_classname == "Infostand_2_EP1" && (count _panelNearest2 > 1)) then {cutText ["Only 2 gate panels per base in a 30 meter radius!", "PLAIN DOWN"];call _funcExitScript;};
    
    // Begin building process
    _buildCheck = false;
    _buildReady = false;
    player allowdamage false;
    _object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
    _object setDir (getDir player);
    if (_modDir > 0) then {
    _object setDir (getDir player) + _modDir;
    };
    player allowdamage true;
    hint "";
    cutText ["-Build process started.  Move around to re-position\n-Stay still to begin build timer", "PLAIN DOWN", 10];		
    while {!_buildReady} do {
    	hintsilent "-Build process started.  \n-Move around to re-position\n-Stay still to begin build timer";
    	_playerCombat = player;
    	_isInCombat = _playerCombat getVariable["startcombattimer",0];
    	_dialog = findDisplay 106;
    		if ((speed player < 9 && speed player > 0) || (speed player > -7 && speed player < 0)) then {
    				_object attachto [player, _attachCoords];
    				_object setDir (getDir player) + _modDir;
    				_inProgress = true;
    		} else {
    			if (_inProgress) then {
    				detach _object;
    				sleep 0.03;
    				_location = getposATL _object;
    				_dir = getDir _object;
    				_object setpos [(getposATL _object select 0),(getposATL _object select 1), 0];
    				_location = _object modeltoworld [0,0,0];
    				deletevehicle _object;
    				_object = createVehicle [_classname, _location, [], 0, "CAN_COLLIDE"];
    				_object setDir _dir;
    				_object setpos [(getposATL _object select 0),(getposATL _object select 1), 0];
    				_cntLoop = 50;
    				_inProgress = false;
    					while {speed player == 0 && !_buildReady} do {
    						sleep 0.1;
    						if (_cntLoop <= 100 && _cntLoop % 10 == 0) then {
    						cutText [format["Building of %1 starts in %2 seconds. Move to restart timer and position",_text, (_cntLoop / 10)], "PLAIN DOWN",1];
    						};
    						// Cancel build if rules broken
    						_isInCombat = _playerCombat getVariable["startcombattimer",0];
    						_dialog = findDisplay 106;
    						if ((!(isNull _dialog) || _isInCombat > 0) && (isPlayer _playerCombat) ) then {
    							detach _object;
    							deletevehicle _object;
    							cutText [format["Build canceled for %1. Player in combat or opened gear.",_text], "PLAIN DOWN",1];call _funcExitScript;
    							if (!_roadAllowed) then { // Check object being placed on road
    								_onRoad = isOnRoad getposATL(_object);
    								if(_onRoad) then {cutText [format["You cannot build %1 on the road",_text], "PLAIN DOWN",1];call _funcExitScript;};
    							};
    						};
    						_cntLoop = _cntLoop - 1;
    						if (_cntLoop <= 0) then {
    							_buildReady = true;
    							_cntLoop = 0;
    						};
    					};
    			};
    		};
    		// Cancel build if rules broken
    		if ((!(isNull _dialog) || (speed player > 9 || speed player < -7) || _isInCombat > 0) && (isPlayer _playerCombat) ) then {
    			detach _object;
    			deletevehicle _object;
    			cutText [format["Build canceled for %1. Player moving too fast, in combat or opened gear.",_text], "PLAIN DOWN",1];call _funcExitScript;
    		};
    	sleep 0.03;
    };
    if (_buildReady) then {
    cutText [format["Building beginning for %1.",_text], "PLAIN DOWN",1];
    } else {cutText [format["Build canceled for %1. Something went wrong!",_text], "PLAIN DOWN",1];call _funcExitScript;};
    // Begin Building
    //Do quick check to see if player is not playing nice after placing object
    _locationPlayer = player modeltoworld [0,0,0];
    _onLadder 		=	(getNumber (configFile >> "CfgMovesMaleSdr" >> "States" >> (animationState player) >> "onLadder")) == 1;
    _canDo 			= (!r_drag_sqf and !r_player_unconscious and !_onLadder); //USE!!
    _isWater 		= 	(surfaceIsWater _locationPlayer) or dayz_isSwimming;
    _inVehicle 		= (vehicle player != player);
    _isOk = [player,_building] call fnc_isInsideBuilding;
    if (_inBuilding) then {
    	if (_isOk) then {deletevehicle _object; cutText [format["%1 cannot be built inside of buildings!",_text], "PLAIN DOWN",1];call _funcExitScript; };
    };
    // Did player walk object into restricted town?
    _closestTown = (nearestLocations [player,["NameCityCapital","NameCity","NameVillage"],25600]) select 0;
    _town_name = text _closestTown;
    _town_pos = position _closestTown;
    if (!_inTown) then {
    	for "_i" from 0 to ((count allbuild_notowns) - 1) do
    	{
    		_check_town = (allbuild_notowns select _i) select _i - _i;
    		if (_town_name == _check_town) then {
    			_townRange = (allbuild_notowns select _i) select _i - _i + 1;
    			if (_locationPlayer distance _town_pos <= _townRange) then {
    				 deletevehicle _object; cutText [format["You cannot build %1 within %2 meters of area %3",_text, _townRange, _town_name], "PLAIN DOWN",1];call _funcExitScript;
    			};
    		};
    	};
    };
    
    r_interrupt = false;
    r_doLoop = true;
    _cntLoop = 0;
    //Physically begin building 
    switch (true) do
    {
    	case(_longWait):
    	{
    		_cnt = _longWloop;
    		_cnt = _cnt * 10;
    		for "_i" from 0 to _longWloop do
    		{
    			cutText [format["Building %1.  %2 seconds left.\nMove from current position to cancel",_text,_cnt + 10], "PLAIN DOWN",1];
    			if (player distance _locationPlayer > 1) then {deletevehicle _object; cutText [format["Build canceled for %1, position of player moved",_text], "PLAIN DOWN",1]; call _funcExitScript;};
    			if (!_canDo || _onLadder || _inVehicle || _isWater) then {deletevehicle _object; cutText [format["Build canceled for %1, player is unable to continue",_text], "PLAIN DOWN",1]; call _funcExitScript;};
    			player playActionNow "Medic";
    			sleep 1;
    			[player,"repair",0,false] call dayz_zombieSpeak;
    			_id = [player,50,true,(getPosATL player)] spawn player_alertZombies;
    			//DayZ interrupt feature like when canceling bandaging
    			while {r_doLoop} do {
    				if (r_interrupt) then {
    					r_doLoop = false;
    				};
    				if (_cntLoop >= 100) then {
    					r_doLoop = false;
    					_finished = true;
    				};
    				sleep .1;
    				_cntLoop = _cntLoop + 1;
    			};
    			if (r_interrupt) then {
    				deletevehicle _object; 
    				[objNull, player, rSwitchMove,""] call RE;
    				player playActionNow "stop";
    				cutText [format["Build canceled for %1, position of player moved",_text], "PLAIN DOWN",1]; 
    				procBuild = false;_playerCombat setVariable["startcombattimer", 1, true]; 
    				breakOut "exit";
    			};
    			r_doLoop = true;
    			_cntLoop = 0;
    			_cnt = _cnt - 10;
    		};
    		sleep 1.5;
    	};
    	case(_medWait):
    	{
    		_cnt = _medWloop;
    		_cnt = _cnt * 10;
    		for "_i" from 0 to _medWloop do
    		{
    			cutText [format["Building %1.  %2 seconds left.\nMove from current position to cancel",_text,_cnt + 10], "PLAIN DOWN",1];
    			if (player distance _locationPlayer > 1) then {deletevehicle _object; cutText [format["Build canceled for %1, position of player moved",_text], "PLAIN DOWN",1]; call _funcExitScript;};
    			if (!_canDo || _onLadder || _inVehicle || _isWater) then {deletevehicle _object; cutText [format["Build canceled for %1, player is unable to continue",_text], "PLAIN DOWN",1]; call _funcExitScript;};
    			player playActionNow "Medic";
    			sleep 1;
    			[player,"repair",0,false] call dayz_zombieSpeak;
    			_id = [player,50,true,(getPosATL player)] spawn player_alertZombies;
    			while {r_doLoop} do {
    				if (r_interrupt) then {
    					r_doLoop = false;
    				};
    				if (_cntLoop >= 100) then {
    					r_doLoop = false;
    					_finished = true;
    				};
    				sleep .1;
    				_cntLoop = _cntLoop + 1;
    			};
    			if (r_interrupt) then {
    				deletevehicle _object; 
    				[objNull, player, rSwitchMove,""] call RE;
    				player playActionNow "stop";
    				cutText [format["Build canceled for %1, position of player moved",_text], "PLAIN DOWN",1]; 
    				procBuild = false;_playerCombat setVariable["startcombattimer", 1, true]; 
    				breakOut "exit";
    			};
    			r_doLoop = true;
    			_cntLoop = 0;
    			_cnt = _cnt - 10;
    		};
    		sleep 1.5;
    	};
    	case(!_medWait && !_longWait):
    	{
    		_cnt = _smallWloop;
    		_cnt = _cnt * 10;
    		for "_i" from 0 to _smallWloop do
    		{
    			cutText [format["Building %1.  %2 seconds left.\nMove from current position to cancel",_text,_cnt + 10], "PLAIN DOWN",1];
    			if (player distance _locationPlayer > 1) then {deletevehicle _object; cutText [format["Build canceled for %1, position of player moved",_text], "PLAIN DOWN",1]; call _funcExitScript;};
    			if (!_canDo || _onLadder || _inVehicle || _isWater) then {deletevehicle _object; cutText [format["Build canceled for %1, player is unable to continue",_text], "PLAIN DOWN",1]; call _funcExitScript;};
    			player playActionNow "Medic";
    			sleep 1;
    			[player,"repair",0,false] call dayz_zombieSpeak;
    			_id = [player,50,true,(getPosATL player)] spawn player_alertZombies;
    			while {r_doLoop} do {
    				if (r_interrupt) then {
    					r_doLoop = false;
    				};
    				if (_cntLoop >= 100) then {
    					r_doLoop = false;
    					_finished = true;
    				};
    				sleep .1;
    				_cntLoop = _cntLoop + 1;
    			};
    			if (r_interrupt) then {
    				deletevehicle _object; 
    				[objNull, player, rSwitchMove,""] call RE;
    				player playActionNow "stop";
    				cutText [format["Build canceled for %1, position of player moved",_text], "PLAIN DOWN",1]; 
    				procBuild = false;_playerCombat setVariable["startcombattimer", 1, true]; 
    				breakOut "exit";
    			};
    			r_doLoop = true;
    			_cntLoop = 0;
    			_cnt = _cnt - 10;
    		};
    		sleep 1.5;
    	};
    };
    // Do last check to see if player attempted to remvoe buildables
    _mags = magazines player;
    _buildables = []; // reset original buildables
    	if ("ItemTankTrap" in _mags) then {
    		_qtyT = {_x == "ItemTankTrap"} count magazines player;
    		_buildables set [count _buildables, _qtyT]; 
    	} else { _qtyT = 0; _buildables set [count _buildables, _qtyT]; };
    		
    	if ("ItemSandbag" in _mags) then {
    		_qtyS = {_x == "ItemSandbag"} count magazines player;
    		_buildables set [count _buildables, _qtyS]; 
    	} else { _qtyS = 0; _buildables set [count _buildables, _qtyS]; };
    	
    	if ("ItemWire" in _mags) then {
    		_qtyW = {_x == "ItemWire"} count magazines player;
    		_buildables set [count _buildables, _qtyW]; 
    		} else { _qtyW = 0; _buildables set [count _buildables, _qtyW]; };
    		
    	if ("PartWoodPile" in _mags) then {
    		_qtyL = {_x == "PartWoodPile"} count magazines player;
    		_buildables set [count _buildables, _qtyL]; 
    	} else { _qtyL = 0; _buildables set [count _buildables, _qtyL]; };
    	
    	if ("PartGeneric" in _mags) then {
    		_qtyM = {_x == "PartGeneric"} count magazines player;
    		_buildables set [count _buildables, _qtyM]; 
    	} else { _qtyM = 0; _buildables set [count _buildables, _qtyM]; };
    	
    	if ("HandGrenade_West" in _mags) then {
    		_qtyG = {_x == "HandGrenade_West"} count magazines player;
    		_buildables set [count _buildables, _qtyG]; 
    	} else { _qtyG = 0; _buildables set [count _buildables, _qtyG]; };
    	
    	
    _distance = 30;
    _canBuildOnPlot = false;
    if(_isPole) then {
    	_distance = 45;
    };
    // check for near plot
    _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 item is plot pole and another one exists within 45m
    if(_isPole and _IsNearPlot > 0) exitWith {  TradeInprogress = false; cutText ["Cannot build plot pole within 45m of an existing plot." , "PLAIN DOWN"];call _funcExitScript;};
    
    if(_IsNearPlot == 0) then {
    
    	// Allow building of plot
    	if(_isPole) then {
    		_canBuildOnPlot = true;	
    	};
    	
    } else {
    	// Since there are plots nearby we check for 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_playerUID, _ownerID];
    
    		// check if friendly to owner
    		if(dayz_playerUID == _ownerID) then {
    			// owner can build anything within his plot except other plots
    			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 {deletevehicle _object; cutText ["Abusing not allowed!" , "PLAIN DOWN"];call _funcExitScript;_playerCombat setVariable["startcombattimer", 1, true];};
    
    if (_inBuilding) then {
    	if (_isOk) then {deletevehicle _object; cutText [format["Abusing not allowed!",_text], "PLAIN DOWN",1];call _funcExitScript;_playerCombat setVariable["startcombattimer", 1, true];};
    };
    // Did player walk object into restricted town?
    _closestTown = (nearestLocations [player,["NameCityCapital","NameCity","NameVillage"],25600]) select 0;
    _town_name = text _closestTown;
    _town_pos = position _closestTown;
    if (!_inTown) then {
    	for "_i" from 0 to ((count allbuild_notowns) - 1) do
    	{
    		_check_town = (allbuild_notowns select _i) select _i - _i;
    		if (_town_name == _check_town) then {
    			_townRange = (allbuild_notowns select _i) select _i - _i + 1;
    			if (_locationPlayer distance _town_pos <= _townRange) then {
    				 deletevehicle _object; cutText [format["You cannot build %1 within %2 meters of area %3",_text, _townRange, _town_name], "PLAIN DOWN",1];call _funcExitScript;
    			};
    		};
    	};
    };
    
    /*/// testing new way of finding building
    	_buildings = nearestObjects [(vehicle player), ["Building"], 100];
    	{
    		_isBuilding = [(vehicle player),_x] call fnc_isInsideBuilding;
    		if(_isBuilding) exitWith {
    			_cancel = true;
    			_reason = "Cannot build inside another building.";
    		};
    	} forEach _buildings;
    */
    if (!_roadAllowed) then { // Check object being placed on road
    _onRoad = isOnRoad getposATL(_object);
    if(_onRoad) then {deletevehicle _object;cutText [format["You cannot build %1 on the road. Abusing not allowed!",_text], "PLAIN DOWN",1];deleteVehicle _object;call _funcExitScript;};
    };
    
    if(_isWater) then {cutText ["Abusing not allowed!" , "PLAIN DOWN"];deleteVehicle _object;call _funcExitScript; _playerCombat setVariable["startcombattimer", 1, true];};
    if(_onLadder) then {cutText ["Abusing not allowed!" , "PLAIN DOWN"];deleteVehicle _object;call _funcExitScript; _playerCombat setVariable["startcombattimer", 1, true];};
    if (_inVehicle) then {cutText ["Abusing not allowed!" , "PLAIN DOWN"];deleteVehicle _object;call _funcExitScript; _playerCombat setVariable["startcombattimer", 1, true];};
    //Check if other panels nearby
    _panelNearest2 = nearestObjects [player, ["Infostand_2_EP1"], 30];
    if (_classname == "Infostand_2_EP1" && (count _panelNearest2 > 2)) then {cutText ["Only 2 gate panels per base in a 30 meter radius! Abusing not allowed!", "PLAIN DOWN"];deleteVehicle _object;call _funcExitScript; 
    				procBuild = false;_playerCombat setVariable["startcombattimer", 1, true]; 
    				breakOut "exit";
    			};
    
    	
    // Check if it matches again
    _result = [_buildables,_chosenRecipe] call BIS_fnc_areEqual;
    
    if (_result) then {
    //Build final product!
    //_object setpos [((_object modeltoworld [0,0,0]) select 0),((_object modeltoworld [0,0,0]) select 1), 0];
    //_location = getposATL _object;
    //_dir = getDir _object;
    	//Finish last requirement checks, _isSimulated disables objects physics if specified, _isDestructable checks if object needs to be invincible
    	if (!_isSimulated) then {
    		_object enablesimulation false;
    	};
    	if (!_isDestructable) then {
    		_object addEventHandler ["HandleDamage", {false}];
    	};
    	
    // set the codes for gate
    //--------------------------------
    	/* Old Method
    	_uidDir = _dir;
    	_uidDir = round(_uidDir);
    	_p1 = round(_location select 0);
    	_p2 = round(_location select 1);
    	//_p3 = round(_location select 2);
    	_uid = format["%1,%2,%3",_p1,_p2,_uidDir];
    	*/
    	// New Method
    	_uidDir = _dir;
    	_uidDir = round(_uidDir);
    	_uid = "";
    	{
    		_x = _x * 10;
    		if ( _x < 0 ) then { _x = _x * -10 };
    		_uid = _uid + str(round(_x));
    	} forEach _location;
    	_uid = _uid + str(round(_dir));
    	
    // ------------------------------------------------------------------------kikyou2 Random Keycode Start---------------------------------------------------------------------
    	_coder = random(9999); //generating random number between 0-9999
    	if (_coder < 1000) then { //checks whether the number is < 1000
    	_coder = _coder + 1000; //adds 1000 to the number if its < 1000 to make sure that the code will be 4 digits long
    	};
    	_code = round _coder; //remove all digits after comma
    	
    // ------------------------------------------------------------------------kikyou2 Random Keycode End-----------------------------------------------------------------------	
    
    //--------------------------------
    	switch (_classname) do
    	{
    		case "Grave":
    		{
    			cutText [format["You have constructed a %1, crawl away so you dont set it off!",_text], "PLAIN DOWN",1];
    			_object setVariable ["isBomb", true];
    		};
    		case "Infostand_2_EP1":
    		{
    			cutText [format["You have constructed a %1, REMEMBER THIS PERMANENT KEYCODE: %2 .  Make sure to build 2 (one in/one out) Key Panels as soon as possible to get both codes!",_text,_code], "PLAIN DOWN",60]; //Changed _uid to _code to show the right keycode
    		};
    		default {
    			cutText [format["You have constructed a %1\n .",_text,_code], "PLAIN DOWN",60]; //Changed _uid to _code to show the right keycode
    			//cutText [format[localize "str_build_01",_text], "PLAIN DOWN"];
    		};
    	};
    	//Remove required magazines
    	if (_qtyT > 0) then {
    		for "_i" from 0 to _qtyT do
    		{
    			player removeMagazine _itemT;
    		};
    	};
    	if (_qtyS > 0) then {
    		for "_i" from 0 to _qtyS do
    		{
    			player removeMagazine _itemS;
    		};
    	};
    	if (_qtyW > 0) then {
    		for "_i" from 0 to _qtyW do
    		{
    			player removeMagazine _itemW;
    		};
    	};
    	if (_qtyL > 0) then {
    		for "_i" from 0 to _qtyL do
    		{
    			player removeMagazine _itemL;
    		};
    	};
    	if (_qtyM > 0) then {
    		for "_i" from 0 to _qtyM do
    		{
    			player removeMagazine _itemM;
    		};
    	};
    	//Grenade only is needed when building booby trap
    	if (_qtyG > 0 && _classname == "Grave") then {
    		for "_i" from 0 to _qtyG do
    		{
    			player removeMagazine _itemG;
    		};
    	};
    
    // Send to database
    _fuel = _code / 1000; //added to calculate valid fuel value for the database
    _object setVariable ["characterID",dayz_playerUID,true];
    dayzPublishObj2 = [dayz_playerUID,_object,[_dir,_location],_classname,_fuel,_code]; //added _code to pass to the publishObj function to prevent calculation errors
    publicVariableServer "dayzPublishObj2";
    	if (isServer) then {
    		dayzPublishObj2 call server_publishObj2;
    	};
    
    } else {cutText ["You need the EXACT amount of whatever you are trying to build without extras.", "PLAIN DOWN"];call _funcExitScript;};
    
    player allowdamage true;
    procBuild = false;_playerCombat setVariable["startcombattimer", 1, true];
     

    .

×
×
  • Create New...