#Gubiani Posted September 2, 2017 Share Posted September 2, 2017 (edited) Olá boa tarde pessoal, eu peguei uma loja de veículos aqui na comunidade, e gostaria de por um limite de 10 dias o carro do jogador ser destruído do mapa em quanto ele fica offline, pois bem eu peguei a variavel do setTimer e implantei na função aonde o player da quit no servidor porém quando o jogador da quit no servidor em vez de contar 10 segundos que eu coloquei para testa o veiculo é destruido na hora se poderem me ajudar fico muito grato: Segue o script abaixo vou por o código por inteiro para vocês não perderem o fio da meada então esta função está nas ultimas linhas. ( Eu quero deixar esse sistema de destruir por tempo por que eu retirei a opção do carro se destruir automaticamente, então quando o player deslogar o carro fica no mapa, e ai eu quero evitar os players ausentes de mais de 10 dias e os carros deles serem deletados do mapa, para não causar muito lag no servidor e nos próprios players) function getFreeID() local result = dbPoll(dbQuery(db, "SELECT ID FROM VehicleList ORDER BY ID ASC"), -1) newID = false for i, id in pairs (result) do if id["ID"] ~= i then newID = i break end end if newID then return newID else return #result + 1 end end function getVehicleByID(id) v = false for i, veh in ipairs (getElementsByType("vehicle")) do if getElementData(veh, "ID") == id then v = veh break end end return v end function updateVehicleInfo(player) if isElement(player) then local result = dbPoll(dbQuery(db, "SELECT * FROM VehicleList WHERE Account = ?", getAccountName(getPlayerAccount(player))), -1) if type(result) == "table" then setElementData(player, "VehicleInfo", result) end end end addEventHandler("onResourceStart", resourceRoot, function() db = dbConnect("sqlite", "database.db") dbExec(db, "CREATE TABLE IF NOT EXISTS VehicleList (ID, Account, Model, X, Y, Z, RotZ, Colors, Upgrades, Paintjob, Cost, HP)") for i, player in ipairs(getElementsByType("player")) do updateVehicleInfo(player) end end) addEvent("onOpenGui", true) addEventHandler("onOpenGui", root, function() updateVehicleInfo(source) end) function destroyVehicles(theVehicle) if isElement(theVehicle) then local Owner = getElementData(theVehicle, "Owner") if Owner then local x, y, z = getElementPosition(theVehicle) local _, _, rz = getElementRotation(theVehicle) local r1, g1, b1, r2, g2, b2 = getVehicleColor(theVehicle, true) local color = r1..","..g1..","..b1..","..r2..","..g2..","..b2 upgrade = "" for _, upgradee in ipairs (getVehicleUpgrades(theVehicle)) do if upgrade == "" then upgrade = upgradee else upgrade = upgrade..","..upgradee end end local Paintjob = getVehiclePaintjob(theVehicle) or 3 local id = getElementData(theVehicle, "ID") dbExec(db, "UPDATE VehicleList SET X = ?, Y = ?, Z = ?, RotZ = ?, HP = ?, Colors = ?, Upgrades = ?, Paintjob = ? WHERE Account = ? AND ID = ?", x, y, z, rz, getElementHealth(theVehicle), color, upgrade, Paintjob, getAccountName(getPlayerAccount(Owner)), id) updateVehicleInfo(Owner) local attached = getAttachedElements(theVehicle) if (attached) then for k,element in ipairs(attached) do if getElementType(element) == "blip" then destroyElement(element) end end end end destroyElement(theVehicle) end end addEvent("onBuyNewVehicle", true) addEventHandler("onBuyNewVehicle", root, function(Model, cost, r1, g1, b1, r2, g2, b2) abc = false local data = dbPoll(dbQuery(db, "SELECT * FROM VehicleList WHERE Account = ?", getAccountName(getPlayerAccount(source))), -1) for i, data in ipairs (data) do if data["Model"] == Model then abc = true break end end if #data >= 50 then outputChatBox("#FFFFFFDesculpe, mas você só pode ter apenas 50 veículos.", source, 38, 122, 216, true) return end if abc then outputChatBox("#FFFFFFVocê já comprou este veículo antes.", source, 38, 122, 216, true) return end if getPlayerMoney(source) >= tonumber(cost) then takePlayerMoney ( source, cost ) local x, y, z = getElementPosition(source) local _, _, rz = getElementRotation(source) local color = r1..","..g1..","..b1..","..r2..","..g2..","..b2 vehicle = createVehicle(Model, x-5, y+5, z, 0, 0, rz) setVehicleColor(vehicle, r1, g1, b1, r2, g2, b2) setElementData(vehicle, "Owner", source) local NewID = getFreeID() setElementData(vehicle, "ID", NewID) dbExec(db, "INSERT INTO VehicleList VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", NewID, getAccountName(getPlayerAccount(source)), Model, x-5, y+5, z, rz, color, "", 3, cost, 1000) outputChatBox("#FFFFFFVocê comprou um: #FF0000"..getVehicleNameFromModel(Model), source, 38, 122, 216, true) outputChatBox("#FFFFFFPreço: #00FF00R$"..cost, source, 38, 122, 216, true) updateVehicleInfo(source) vv[vehicle] = setTimer(function(source) if not isElement(source) then killTimer(vv[source]) vv[source] = nil end if isElement(source) and getElementHealth(source) <= 255 then setElementHealth(source, 255.5) setVehicleDamageProof(source, true) setVehicleEngineState(source, false) end end, 50, 0, vehicle) addEventHandler("onVehicleDamage", vehicle, function(loss) local account = getAccountName(getPlayerAccount(getElementData(source, "Owner"))) setTimer(function(source) if isElement(source) then dbExec(db, "UPDATE VehicleList SET HP = ? WHERE Account = ? AND Model = ?", getElementHealth(source), account, getElementModel(source)) updateVehicleInfo(getElementData(source, "Owner")) end end, 100, 1, source) end) addEventHandler("onVehicleEnter", vehicle, function(player) if getElementHealth(source) <= 255.5 then setVehicleEngineState(source, false) else if isVehicleDamageProof(source) then setVehicleDamageProof(source, true) end end end) else outputChatBox("#FFFFFFVocê não tem dinheiro suficiente.", source, 38, 122, 216, true) end end) vv = {} addEvent("SpawnMyVehicle", true) addEventHandler("SpawnMyVehicle", root, function(id) local data = dbPoll(dbQuery(db, "SELECT * FROM VehicleList WHERE Account = ? AND ID = ?", getAccountName(getPlayerAccount(source)), id), -1) if type(data) == "table" and #data ~= 0 then if getVehicleByID(id) then outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(data[1]["Model"]).." #FFFFFFfoi spawnado.", source, 38, 122, 216, true) else local color = split(data[1]["Colors"], ',') r1 = color[1] or 255 g1 = color[2] or 255 b1 = color[3] or 255 r2 = color[4] or 255 g2 = color[5] or 255 b2 = color[6] or 255 vehicle = createVehicle(data[1]["Model"], data[1]["X"], data[1]["Y"], data[1]["Z"], 0, 0, data[1]["RotZ"]) setElementData(vehicle, "ID", id) local upd = split(tostring(data[1]["Upgrades"]), ',') for i, upgrade in ipairs(upd) do addVehicleUpgrade(vehicle, upgrade) end local Paintjob = data[1]["Paintjob"] or 3 setVehiclePaintjob(vehicle, Paintjob) setVehicleColor(vehicle, r1, g1, b1, r2, g2, b2) if data[1]["HP"] <= 255.5 then data[1]["HP"] = 255 end setElementHealth(vehicle, data[1]["HP"]) setElementData(vehicle, "Owner", source) vv[vehicle] = setTimer(function(source) if not isElement(source) then killTimer(vv[source]) vv[source] = nil end if isElement(source) and getElementHealth(source) <= 255 then setElementHealth(source, 255.5) setVehicleDamageProof(source, true) setVehicleEngineState(source, false) end end, 50, 0, vehicle) addEventHandler("onVehicleDamage", vehicle, function(loss) local account = getAccountName(getPlayerAccount(getElementData(source, "Owner"))) setTimer(function(source) if isElement(source) then dbExec(db, "UPDATE VehicleList SET HP = ? WHERE Account = ? AND Model = ?", getElementHealth(source), account, getElementModel(source)) updateVehicleInfo(getElementData(source, "Owner")) end end, 100, 1, source) end) addEventHandler("onVehicleEnter", vehicle, function(player) if getElementHealth(source) <= 255.5 then setVehicleEngineState(source, false) else if isVehicleDamageProof(source) then setVehicleDamageProof(source, false) end end end) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(data[1]["Model"]).." #FFFFFFfoi spawnado.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFPode haver problema com este veículo, por favor peça ajuda para um administrador.", source, 38, 122, 216, true) end end) addEvent("DestroyMyVehicle", true) addEventHandler("DestroyMyVehicle", root, function(id) local vehicle = getVehicleByID(id) if isElement(vehicle) then local data = dbPoll(dbQuery(db, "SELECT * FROM VehicleList WHERE Account = ? AND ID = ?", getAccountName(getPlayerAccount(source)), id), -1) if type(data) == "table" and #data ~= 0 then destroyVehicle(vehicle) outputChatBox ("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(data[1]["Model"]).." #FFFFFFfoi destruído.", source, 38, 122, 216, true) else outputChatBox("#FFFFFFEscolha o veículo que você quer destruir.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFO seu veículo não foi spawnado.", source, 38, 122, 216, true) end end) addEvent("LightsMyVehicle", true) addEventHandler("LightsMyVehicle", root, function(id) local vehicle = getVehicleByID(id) if isElement(vehicle) then local Vehicle = getPedOccupiedVehicle(source) if Vehicle == vehicle then if getVehicleOverrideLights(vehicle) ~= 2 then setVehicleOverrideLights(vehicle, 2) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFacendeu as luzes.", source, 38, 122, 216, true) elseif getVehicleOverrideLights(vehicle) ~= 1 then setVehicleOverrideLights(vehicle, 1) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FF0000apagou as luzes.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFVocê não está no veículo!", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFSeu Veículo não foi spawnado.", source, 38, 122, 216, true) end end) addEvent("LockMyVehicle", true) addEventHandler("LockMyVehicle", root, function(id) local vehicle = getVehicleByID(id) if isElement(vehicle) then if not isVehicleLocked(vehicle) then setVehicleLocked(vehicle, true) setVehicleDoorsUndamageable(vehicle, true) setVehicleDoorState(vehicle, 0, 0) setVehicleDoorState(vehicle, 1, 0) setVehicleDoorState(vehicle, 2, 0) setVehicleDoorState(vehicle, 3, 0) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFfoi trancado.", source, 38, 122, 216, true) elseif isVehicleLocked(vehicle) then setVehicleLocked(vehicle, false) setVehicleDoorsUndamageable(vehicle, false) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFfoi destrancado.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFSeu veículo não foi spawnado.", source, 38, 122, 216, true) end end) addEvent("BlipMyVehicle", true) addEventHandler("BlipMyVehicle", root, function(id) local vehicle = getVehicleByID(id) if isElement(vehicle) then if not getElementData(vehicle, "ABlip") then setElementData(vehicle, "ABlip", true) createBlipAttachedTo(vehicle, 41, 2, 255, 0, 0, 255, 0, 65535, source) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFestá marcado no mapa, use F11 para encontrá-lo.", source, 38, 122, 216, true) else local attached = getAttachedElements(vehicle) if (attached) then for k,element in ipairs(attached) do if getElementType(element) == "blip" then destroyElement(element) end end end setElementData(vehicle, "ABlip", false) outputChatBox("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFfoi desmarcado do mapa.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFSeu Veículo não foi spawnado.", source, 38, 122, 216, true) end end) addEvent("FixMyVehicle", true) addEventHandler("FixMyVehicle", root, function(id) if getPlayerMoney(source) >= tonumber(0) then takePlayerMoney ( source, 0 ) local vehicle = getVehicleByID(id) if isElement(vehicle) then fixVehicle(vehicle) setVehicleEngineState(vehicle, true) if isVehicleDamageProof(vehicle) then setVehicleDamageProof(vehicle, false) end end dbExec(db, "UPDATE VehicleList SET HP = ? WHERE Account = ? AND ID = ?", 1000, getAccountName(getPlayerAccount(source)), id) updateVehicleInfo(source) outputChatBox ("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFteve o motor ligado e reparado.", source, 38, 122, 216, true) else outputChatBox("#FFFFFFVocê não tem dinheiro para reparar o seu veiculo.", source, 38, 122, 216, true) end end) addEvent("WarpMyVehicle", true) addEventHandler("WarpMyVehicle", root, function(id) if not isPedInVehicle (source) then if getElementInterior(source) == 0 then if getPlayerMoney(source) >= tonumber(0) then local vehicle = getVehicleByID(id) if isElement(vehicle) then takePlayerMoney ( source, 5000 ) local x, y, z = getElementPosition(source) setElementPosition(vehicle, x+3, y+2, z+1.5) outputChatBox ("#FFFFFFSeu veículo #FF0000"..getVehicleNameFromModel(getElementModel(vehicle)).." #FFFFFFfoi trazido para você.", source, 38, 122, 216, true) else outputChatBox("#FFFFFFSeu veículo não foi spawnado.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFVocê não tem dinheiro suficiente para trazer seu veículo.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFVocê não pode trazer o seu veículo enquanto você dentro de interiores.", source, 38, 122, 216, true) end else outputChatBox("#FFFFFFVocê não pode trazer o seu veículo, enquanto estiver dentro de um veículo.", source, 38, 122, 216, true) end end) addEvent("SellMyVehicle", true) addEventHandler("SellMyVehicle", root, function(id) local vehicle = getVehicleByID(id) local data = dbPoll(dbQuery(db, "SELECT * FROM VehicleList WHERE Account = ? AND ID = ?", getAccountName(getPlayerAccount(source)), id), -1) if type(data) == "table" and #data ~= 0 then local Money = math.ceil((data[1]["Cost"]*.9)*math.floor(data[1]["HP"])/100/10) givePlayerMoney (source, Money) if isElement(vehicle) then destroyElement(vehicle) end dbExec(db, "DELETE FROM VehicleList WHERE Account = ? AND ID = ?", getAccountName(getPlayerAccount(source)), id) updateVehicleInfo(source) outputChatBox("#FFFFFFVocê vendeu seu veículo por #00FF00R$"..Money, source, 38, 122, 216, true) end end) function getDataOnLogin(_, account) updateVehicleInfo(source) end addEventHandler("onPlayerLogin", root, getDataOnLogin) function SaveVehicleDataOnQuit() for i, veh in ipairs (getElementsByType("vehicle")) do if getElementData(veh, "Owner") == source then setTimer (destroyVehicle(veh), 10000) end end end addEventHandler("onPlayerQuit", root,SaveVehicleDataOnQuit) Edited September 2, 2017 by #Gubiani Link to comment
DNL291 Posted September 3, 2017 Share Posted September 3, 2017 Use Timestamp pra pegar o tempo quando cada jogador sair do server, grava os valores numa tabela. E use setTimer executando a cada 1 hora, por exemplo, dá um loop na tabela, comparando com o tempo Timestamp, se for maior que 10 dias, destrói o veículo do jogador (salvo na tabela) e remove o valor da tabela. Link to comment
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now