Jump to content

DayZ Vehicles not working


JanKy

Recommended Posts

Hi guys,

So I have this DayZ server, and i noticed that no vehicle is working. I mean, even though they have the parts needed, their engine wont start. I thought it was because setVehicleEngineState.

*Also, i have commented out the backup part of the script, because firstly i thought it was because of that

vehicles.lua : 

Spoiler

local hospitalCol = {};
local repairTimer = {};
local backupdone = false;

addEvent("respawnVehiclesInWater", true);
addEvent("repairVehicle", true);
addEvent("respawnDayZVehicle", true);

if fileExists("tools/backup.db") then
	backupdone = true;
else
	backupdone = false;
end

local db = dbConnect("sqlite", "tools/backup.db");
dbExec(db, "CREATE TABLE IF NOT EXISTS `vehicles` (model, x, y, z, rX, rY, rZ, slots, fuel, engines, moving, parts, items, health, dayz, sx, sy, sz, id)");
dbExec(db, "CREATE TABLE IF NOT EXISTS `tents` (model, x, y, z, rX, rY, rZ, slots, scale, items, id)");

function getVehicleAddonInfos(id)
	for _,v in ipairs(vehicleAddonsInfo) do
		if (v[1] == id) then return v[2], v[3], v[4], v[5]; end
	end
end

function createHeliCrashSite()
	if isElement(cargoCol) then
		destroyElement(getElementData(cargoCol, "parent"));
		destroyElement(cargoCol);
	end
	local nr = math.random(7);
	local x,y,z = heliCrashSites[nr][1], heliCrashSites[nr][2], heliCrashSites[nr][3];
	local cargobob = createVehicle(548, x, y, z);
	setElementHealth(cargobob, 0);
	setElementFrozen(cargobob, true);
	cargoCol = createColSphere(x, y, z, 3);
	setElementData(cargoCol, "parent", cargobob);
	setElementData(cargoCol, "helicrash", true);
	setElementData(cargoCol, "MAX_Slots", 0);
	for _,v in ipairs(lootItems["helicrashsides"]) do
		local value =  math.percentChance(v[5]*3.5, math.random(2));
		setElementData(cargoCol, v[1], value);
		local ammoData,_ = getWeaponAmmoType(v[1], true);
		if (ammoData and value > 0) then
			setElementData(cargoCol, ammoData, math.random(2));
		end
	end
	setTimer(createHeliCrashSite, 3600000, 1);
end

function updateHospitals()
	for i,_ in pairs(hospitalCol) do
		for _,v in ipairs(lootItems["hospital"]) do
			setElementData(hospitalCol[i], v[1], math.random(5));
		end
	end
	setTimer(updateHospitals, 3600000, 1);
end

function createPatrolPoints()
	for _,v in ipairs(patrolPoints) do
		local x,y,z = v[1], v[2], v[3];
		local patrolCol = createColSphere(x, y, z, 3);
		setElementData(patrolCol, "patrolstation", true);
	end
end

function createHospitalPacks()
	for i,v in ipairs(hospitalPacks) do
		local x,y,z = v[1], v[2], v[3];
		local object = createObject(1558, x, y, z, nil, nil, nil);
		hospitalCol[i] = createColSphere(x, y, z, 2);
		setElementData(hospitalCol[i], "parent", object);
		setElementData(hospitalCol[i], "hospitalbox", true);
		setElementData(hospitalCol[i], "MAX_Slots", 20);
	end
	updateHospitals();
end

function spawnDayZVehicles()
	for _,v in ipairs(getElementsByType("vehicle")) do
		local col = getElementData(v, "parent");
		if col then
			destroyElement(col);
		end
		destroyElement(v);
	end
	for _,v in ipairs(vehicleSpawns) do
		local x,y,z = v[2], v[3], v[4];
		local veh = createVehicle(v[1], x, y, z);
		local vehCol = createColSphere(x, y, z, 2.5);
		attachElements(vehCol, veh);
		setElementData(vehCol, "parent", veh);
		setElementData(veh, "parent", vehCol);
		setElementData(vehCol, "vehicle", true);
		setElementData(veh, "dayzvehicle", 1);
		local tires,engine,parts,slots = getVehicleAddonInfos(v[1]);
		setElementData(vehCol, "MAX_Slots", tonumber(slots));
		setElementData(vehCol, "Tire_inVehicle", math.random(0, tires));
		setElementData(vehCol, "Engine_inVehicle", math.random(0, engine));
		setElementData(vehCol, "Parts_inVehicle", math.random(0, parts));
		setElementData(vehCol, "spawn", {v[1], x, y, z});
		setElementData(vehCol, "fuel", math.random(5, 20));
		for _,v in ipairs(lootItems["helicrashsides"]) do
			local value =  math.percentChance(v[5], math.random(2));
			setElementData(vehCol, v[1], value);
			local ammoData,_ = getWeaponAmmoType(v[1], true);
			if (ammoData and value > 0) then
				setElementData(vehCol, ammoData, math.random(2));
			end
		end
	end
	--backup();
end

addEventHandler("onVehicleExplode", root,  function()
	for _,v in pairs(getVehicleOccupants(source)) do
		triggerEvent("kilLDayZPlayer", v);
	end
	local x1,y1,z1 = getElementPosition(source);
	local col = getElementData(source, "parent");
	local id,x,y,z = unpack(getElementData(col, "spawn"));
	setElementData(col, "deadVehicle", true);
	setElementData(source, "isExploded", true);
	if (getElementData(source, "dayzvehicle") == 1) then
		setTimer(respawnDayZVehicle, (10*60000), 1, id, x, y, z, col, source);
	end
end);

setTimer(function()
	for _,v in ipairs(getElementsByType("vehicle")) do
		if (getElementModel(v) ~= 453) then
			local col = getElementData(v, "parent");
			if col then
				if not getElementData(col, "deadVehicle") then
					if isElementInWater(v) then
						local id,x,y,z = unpack(getElementData(col, "spawn"));
						if (getElementData(v, "dayzvehicle") == 1) then
							setTimer(respawnDayZVehicle, (5*60000), 1, id, x, y, z, col, v);
						end
					end
				end
			end
		end
	end
end, (20*60000), 0);

function respawnDayZVehicle(id, x, y, z, col, veh)
	destroyElement(col);
	destroyElement(veh);
	local veh = createVehicle(id, x, y, z + 1);
	local vehCol = createColSphere(x, y, z, 4);
	attachElements(vehCol, veh);
	setElementData(vehCol, "parent", veh);
	setElementData(veh, "parent", vehCol);
	setElementData(vehCol, "vehicle", true);
	setElementData(veh, "dayzvehicle", 1);
	local tires,engine,parts,slots = getVehicleAddonInfos(id);
	setElementData(vehCol, "MAX_Slots", slots);
	setElementData(vehCol, "Tire_inVehicle", math.random(0, tires));
	setElementData(vehCol, "Engine_inVehicle", math.random(0, engine));
	setElementData(vehCol, "Parts_inVehicle", math.random(0, parts));
	setElementData(vehCol, "spawn", {id, x, y, z});
	setElementData(vehCol, "fuel", 10);
	for _,v in ipairs(lootItems["helicrashsides"]) do
		local value =  math.percentChance(v[5], math.random(2));
		setElementData(vehCol, v[1], value);
		local ammoData,_ = getWeaponAmmoType(v[1], true);
		if (ammoData and value > 0) then
			setElementData(vehCol, ammoData, math.random(2));
		end
	end
end
addEventHandler("respawnDayZVehicle", root, respawnDayZVehicle);


function spawnVehiclePack(ps,cmd)
  if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(ps)),aclGetGroup("Admin")) then
	spawnDayZVehicles()
	outputChatBox("Vehicles has been spawned!",ps,255,0,0,true)
  end
end
addCommandHandler("svp",spawnVehiclePack)

function getVehicleMaxFuel(id)
	for _,v in ipairs(vehicleFuelTable) do
		if (id == v[1]) then return v[2]; end
	end
	return false;
end

addEventHandler("onPlayerVehicleEnter", root, function(veh, seat)
	local id = getElementModel(veh);
	if (id == 548) then cancelEvent(); end
	if (id == 509) then return; end
	local col = getElementData(veh, "parent");
	local tires,engine,parts,_ = getVehicleAddonInfos(id);
	setElementData(veh, "maxfuel", getVehicleMaxFuel(id));
	setElementData(veh, "needtires", tires);
	setElementData(veh, "needparts", parts);
	setElementData(veh, "needengines", engine);
	setVehicleEngineState(veh, false);
	if (getElementData(col, "Parts_inVehicle") == parts) then
		setElementData(veh, "fuelloss", 5);
	else
		setElementData(veh, "fuelloss", 20);
	end
	if (getElementData(col, "Tire_inVehicle") == tires) then
		if (getElementData(col, "Engine_inVehicle") == engine) then
			if (getElementData(col, "fuel") > 0) then
				setVehicleEngineState(veh, true);
				if (seat == 0) then
					bindKey(source, "k", "down", setEngineStateByPlayer);
					outputChatBox("Press [K] to toggle the engine!", source, 255, 255, 255);
				end
			else
				triggerClientEvent(source, "displayClientInfo", source, "Fuel tank is empty!", 22, 255, 0);
				setVehicleEngineState(veh, false);
			end
		else
			triggerClientEvent(source, "displayClientInfo", source, "This veh doesn't have Engine!", 22, 255, 0);
			setVehicleEngineState(veh, false);
		end
	else
		triggerClientEvent(source, "displayClientInfo", source, "Some Tires are missing!", 22, 255, 0);
		setVehicleEngineState(veh, false);
	end
	setVehicleEngineState(veh, true);
end);

addEventHandler("onPlayerVehicleExit", root, function(veh, seat)
	if (seat == 0) then
		setVehicleEngineState(veh, false);
		unbindKey(source, "k", "down", setEngineStateByPlayer);
	end
end);

function getVehicleFuelRemove(id)
	for _,v in ipairs(vehicleFuelInfo) do
		if (v[1] == id) then return v[2]; end
	end
end

setTimer(function()
	for _,v in pairs(getElementsByType("vehicle")) do
		if (getElementModel(v) ~= 509) then
			if (getVehicleEngineState(v) == true) then
				local parent = getElementData(v, "parent");
				local fuel = getElementData(parent, "fuel");
				if (fuel >= 1) then
					setElementData(parent, "fuel", fuel-(getVehicleFuelRemove(getElementModel(v))*getElementData(v, "fuelloss"))/60);
				else
					setVehicleEngineState(v, false);
				end
			end
		end
	end
end, 1000, 0);

addEventHandler("repairVehicle", root, function(veh)
	if repairTimer[veh] then triggerClientEvent(source, "displayClientInfo", source, getVehicleName(veh).." is already in repair!", 255, 22, 0) return; end
	repairTimer[veh] = setTimer(fixDayZVehicle, (1000-(math.floor(getElementHealth(veh))))*120, 1, veh, source);
	setElementFrozen(veh, true);
	setElementFrozen(source, true);
	setPedWeaponSlot(source, 0);
	setElementData(veh, "repairer", source);
	setElementData(source, "repairingvehicle", veh);
	setElementData(source, "repairvehicle", true);
	setPedAnimation(source, "SCRATCHING", "sclng_r", nil, true, false);
	triggerClientEvent(source, "displayClientInfo", source, "Started to repair "..getVehicleName(veh), 22, 255, 0);
end);

function fixDayZVehicle(veh, player)
	setElementHealth(veh, 1000);
	fixVehicle(veh);
	setPedAnimation(player, false);
	setElementFrozen(veh, false);
	setElementFrozen(player, false);
	setElementData(player, "repairvehicle", false);
	repairTimer[veh] = nil;
	setElementData(veh, "repairer", nil);
	setElementData(player, "repairingvehicle", nil);
	triggerClientEvent(player, "displayClientInfo", player, "You repaired "..getVehicleName(veh), 22, 255, 0);
end

addEventHandler("onPlayerQuit", root, function()
	for _,v in ipairs(getElementsByType("vehicle")) do
		local rep = getElementData(v, "repairer");
		if (rep and rep == source) then
			outputDebugString("Vehicle repairer disconnected - destroyed tables", 3);
			killTimer(repairTimer[v]);
			setElementFrozen(v, false);
			repairTimer[v] = nil;
			setElementData(v, "repairer", nil);
		end 
	end
end);

function setEngineStateByPlayer(player)
	local veh = getPedOccupiedVehicle(player);
	if (getElementData(getElementData(veh,"parent"), "fuel") <= 0) then return; end
	setVehicleEngineState(veh, not getVehicleEngineState(veh))
	if (getVehicleEngineState(veh) == false) then
		triggerClientEvent(player, "displayClientInfo", player, "Engine started!", 22, 255, 0);
	else
		triggerClientEvent(player, "displayClientInfo", player, "Engine stopped!", 255, 22, 0);
	end
end

function backup()
	dbExec(db, "DELETE FROM `vehicles`");
	dbExec(db, "DELETE FROM `tents`");
	local vc,tc = 0, 0;
	for _,veh in ipairs(getElementsByType("vehicle")) do
		if not getElementData(veh, "helicrash") then
			local col = getElementData(veh, "parent");
			if col then
				local x,y,z = getElementPosition(veh);
				local rX,rY,rZ = getElementRotation(veh);
				if isVehicleBlown(veh) then
					health = 240;
				else
					health = getElementHealth(veh);
				end
				local _,sx,sy,sz = unpack(getElementData(col, "spawn"));
				local items = {};
				vc = vc+1;
				for _,item in ipairs(backupItemsTable) do
					local quantity = getElementData(col, item[1]) or 0;
					if (quantity > 0) then
						table.insert(items, {item[1], quantity});
					end
				end
				dbExec(db, "INSERT INTO `vehicles` (model, x, y, z, rX, rY, rZ, slots, fuel, engines, moving, parts, items, dayz, health, sx, sy, sz, id) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)", 
					getElementModel(veh), x, y, z, rX, rY, rZ, getElementData(col, "MAX_Slots") or 20, getElementData(col, "fuel") or 0, getElementData(col, "Engine_inVehicle") or 0, 
					getElementData(col, "Tire_inVehicle") or 0, getElementData(col, "Parts_inVehicle") or 0, toJSON(items), getElementData(veh, "dayzvehicle") or 0, health, sx, sy, sz, vc);
			end
		end
	end
	for _,col in ipairs(getElementsByType("colshape")) do
		if getElementData(col, "tent") then
			local tent = getElementData(col, "parent");
			if tent then
				local x,y,z = getElementPosition(tent);
				local rX,rY,rZ = getElementRotation(tent);
				local items = {};
				tc = tc+1;
				for _,item in ipairs(backupItemsTable) do
					local quantity = getElementData(col, item[1]) or 0;
					if (quantity > 0) then
						table.insert(items, {item[1], quantity});
					end
				end
				dbExec(db, "INSERT INTO `tents` (model, x, y, z, rX, rY, rZ, slots, scale, items, id) VALUES(?,?,?,?,?,?,?,?,?,?,?)", 
					getElementModel(tent), x, y, z, rX, rY, rZ, getElementData(col, "MAX_Slots") or 100, getObjectScale(tent), toJSON(items), tc);
			end
		end
	end
	outputDebugString("Backup done ("..tc.." Tents) and ("..vc.." Vehicles)", 3);
end

function createDayzVeh(model, x, y, z, rX, rY, rZ, slots, fuel, engines, moving, parts, items, dayz, health, sx, sy, sz)
	local veh = createVehicle(model, x, y, z);
	local vehCol = createColSphere((x+5), y, z, 4);
	setElementRotation(veh, rX, rY, rZ);
	setElementData(veh, "parent", vehCol);
	setElementData(veh, "dayzvehicle", tonumber(dayz));
	attachElements(vehCol, veh);
	setElementData(vehCol, "parent", veh);
	setElementData(vehCol, "vehicle", true);
	setElementData(vehCol, "MAX_Slots", tonumber(slots));
	setElementData(vehCol, "Tire_inVehicle", tonumber(moving));
	setElementData(vehCol, "Engine_inVehicle", tonumber(engines));
	setElementData(vehCol, "Parts_inVehicle", tonumber(parts));
	setElementData(vehCol, "spawn", {model, sx, sy, sz});
	setElementData(vehCol, "fuel", tonumber(fuel));
	for _,v in ipairs(fromJSON(items)) do
		setElementData(vehCol, v[1], v[2]);
	end
	if (health > 250) then
		setElementHealth(veh, tonumber(health));
	else
		blowVehicle(veh, false);
		setTimer(respawnDayZVehicle, (10*60000), 1, model, x, y, z, vehCol, source);
	end
end

function createDayzTent(model, x, y, z, rX, rY, rZ, slots, scale, items)
	local tent = createObject(model, x, y, z);
	local tentCol = createColSphere(x, y, z, 4);
	setElementRotation(tent, rX, rY, rZ);
	setObjectScale(tent, scale);
	attachElements(tentCol, tent);
	setElementData(tentCol, "parent", tent);
	setElementData(tent, "parent", tentCol);
	setElementData(tentCol, "tent", true);
	setElementData(tentCol, "MAX_Slots", slots);
	for _,v in ipairs(fromJSON(items)) do
		setElementData(tentCol, v[1], v[2]);
	end
end

function loadBackup()
	for _,v in pairs(getElementsByType("vehicle")) do
		local col = getElementData(v, "parent");
		if col then
			destroyElement(col);
		end
		destroyElement(v);
	end
	local p = dbPoll(dbQuery(db, "SELECT * FROM `vehicles`"), -1);
	if (#p > 0) then
		for _,d in pairs(p) do
			createDayzVeh(d["model"], d["x"], d["y"], d["z"], d["rX"], d["rY"], d["rZ"], d["slots"], d["fuel"], d["engines"], d["moving"], d["parts"], d["items"], d["dayz"], d["health"], d["sx"], d["sy"], d["sz"]);
		end
	end
	local p2 = dbPoll(dbQuery(db, "SELECT * FROM `tents`"), -1);
	if (#p2 > 0) then
		for _,d in pairs(p2) do
			createDayzTent(d["model"], d["x"], d["y"], d["z"], d["rX"], d["rY"], d["rZ"], d["slots"], d["scale"], d["items"]);
		end
	end
end

--[[ if not backupdone then
	spawnDayZVehicles();
	backupdone = true;
else
	loadBackup();
end
setTimer(backup, (10*60000), 0);
]]--

addCommandHandler("dobackup", function(player)
	if isObjectInACLGroup("user."..getAccountName(getPlayerAccount(player)), aclGetGroup("Admin")) then
		backup();
	end
end);

createPatrolPoints();
createHeliCrashSite();
createHospitalPacks();

 

 

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...