main Posted February 23, 2019 Share Posted February 23, 2019 Olá pessoal, estou com um problema no meu sistema de prisão, a tabela que salva o veículo funciona normalmente em todas as partes do script, porém, na função onPlayerWasted a tabela parece que não funciona, não sei se tem algum outro resource dando algum tipo de conflito/bug Segue o código abaixo: local positions = { {x = 1536, y = -1675.5, z = 12}, {x = 2185, y = -1757, z = 12}, {x = 777.6, y = -1387.5, z = 12}, {x = -1568.1, y = 661.18, z = 6}, {x = 2290.18, y = 2420.7, z = 10} } local cadeias = { {-1283.88013, 1200.47180, 13.01935}, {-1283.51514, 1207.08447, 13.02033}, {-1283.46167, 1213.87219, 13.02705}, {-1284.11597, 1220.69495, 13.01871} } local IDS = { [490] = true, [598] = true, [596] = true, [597] = true, [560] = true } local timerArrested = {} function createPrisonMarker(source) for _, v in ipairs(positions) do if isPlayerPolice(source) then if not marker then local marker = createMarker(v.x, v.y, v.z, 'cylinder', 3.0, 10, 10, 10, 255, source) createBlipAttachedTo(marker, 30, 2, 255, 255, 255, 255, 0, 9999, source) end end end end function onResourceStart() for _, player in ipairs(getElementsByType("player")) do createPrisonMarker(player) end end addEventHandler("onResourceStart", resourceRoot, onResourceStart) local carros = {} function onPlayerVehicleEnter(theVehicle, seat, jacked) local idModel = getElementModel(theVehicle) if IDS[idModel] then carros[source] = theVehicle print(carros[source]) -- retorna tabela print(getElementModel(carros[source])) -- retorna id end end addEventHandler('onPlayerVehicleEnter', root, onPlayerVehicleEnter) function onPrender(police, _, target) if isPlayerPolice(police) then local target = getPlayerFromPartialName(target) if not target then return outputChatBox('#bebebeJogador inválido', police, 255, 255, 255, true) end local px, py, pz = getElementPosition(police) local bx, by, bz = getElementPosition(target) local dist = getDistanceBetweenPoints3D(px, py, pz, bx, by, bz) if target == police then return outputChatBox('#bebebeVocê não pode prender a si mesmo', police, 255, 255, 255, true) end if getPlayerWantedLevel(target) == 0 then return outputChatBox('#bebebe Este jogador não está sendo procurado', police, 255, 255, 255, true) end if isPedInVehicle(police) then return outputChatBox('#bebebeVocê não pode prender de dentro da viatura', police, 255, 255, 255, true) end if isPedInVehicle(target) then return outputChatBox('#bebebeVocê não pode prender um bandido enquanto ele estiver dentro de um veículo', police, 255, 255, 255, true) end if dist >= 2.5 then return outputChatBox('#bebebeVocê precisa chegar mais perto para prender', police, 255, 255, 255, true) end if not carros[police] then return outputChatBox('#bebebeEntre na VIATURA e saia para poder prender', police, 255, 255, 255, true) end warpPlayerInVTR(police, target) end end addCommandHandler('prender', onPrender) function onPlayerCommand(command) cancelEvent() end function onMarkerHit(hitElement, d) if hitElement and d then if getElementType(hitElement) == "vehicle" then local police = getVehicleOccupant(hitElement, 0) if carros[police] then local pregados = getAttachedElements(hitElement) for _, preso in ipairs(pregados) do if not isElement(preso) then return end if getElementData(preso, 'navtr') then removeElementData(preso, 'navtr') end setElementData(preso, 'arrested', true) detachElements(preso, hitElement) setPedAnimation(preso) toggleAllControls(preso, true) setPlayerInPrison(preso, "controls") local wanted = getPlayerWantedLevel(preso) local tempo = 30000 * wanted timerArrested[preso] = setTimer(function(p) onSoltar(p) end, tempo, 1, preso) triggerClientEvent(preso, "onClientPlayerArrested", resourceRoot, "add", tempo) local niv = getPlayerWantedLevel(preso) local premio = 1000*niv givePlayerMoney(police, premio) outputChatBox('#bebebeVocê prendeu um procurado nível #00ffff'..niv..'#bebebe e ganhou #00ffff$'..premio..'#bebebe de prêmio', police, 255, 255, 255, true) end end end end end addEventHandler("onMarkerHit", resourceRoot, onMarkerHit) function onPlayerWasted(totalAmmo, killer, killerWeapon, bodypart, stealth) if isElement(source) then onSoltarWasted(source) end end addEventHandler("onPlayerWasted", root, onPlayerWasted) function onSoltarWasted(source) if isPlayerPolice(source) then local vtr = carros[source] print(vtr) -- retorna a tabela print(getElementModel(vtr)) -- da erro e retorna false if vtr and isElement(vtr) then local pregados = getAttachedElements(vtr) for _, preso in ipairs(pregados) do if preso and isElement(preso) then detachElements(preso, vtr) setPedAnimation(preso) if getElementData(preso, "navtr") then removeElementData(preso, "navtr") end removeEventHandler('onPlayerCommand', preso, onPlayerCommand) toggleAllControls(preso, true) local x,y,z = getElementPosition(preso) setElementPosition(preso,x+1.5,y+1.5,z+1) end end end end end function warpPlayerInVTR(police, preso) setElementData(preso, 'navtr', true) addEventHandler('onPlayerCommand', preso, onPlayerCommand) local vtr = carros[police] attachElements(preso, vtr, 0.2, -1.5, 0, 0, 0, 90) takeAllWeapons(preso) toggleAllControls(preso, false) setPedAnimation(preso, 'ped','CAR_dead_LHS') local vrx, vry, vrz = getElementRotation(vtr) setElementRotation(preso, vrx, vry, vrz+83) warpPedIntoVehicle(police, vtr) outputChatBox('#bebebeLeve o preso para a delegacia mais próxima #00ffff(sirenes azuis).', police, 255, 255, 255,true) end function onSoltar(preso) removeEventHandler('onPlayerCommand', preso, onPlayerCommand) removeElementData(preso, 'arrested') setElementDimension(preso, 0) setElementPosition(preso, -1607.02698, 715.03778, 12.53868) toggleControl(preso, "fire", true) toggleControl(preso, "aim_weapon", true) toggleControl(preso, "next_weapon", true) toggleControl(preso, "previous_weapon", true) setPlayerWantedLevel(preso, 0) if timerArrested[preso] then if isTimer(timerArrested[preso]) then killTimer(timerArrested[preso]) end timerArrested[preso] = nil end triggerClientEvent(preso, "onClientPlayerArrested", resourceRoot, "remove") end function onPlayerQuit() local account = getPlayerAccount(source) if account and not isGuestAccount(account) then if timerArrested[source] then if isTimer(timerArrested[source]) then local time = getTimerDetails(timerArrested[source]) setAccountData(account, "jailTime", time) killTimer(timerArrested[source]) else local statusJailTime = getAccountData(account, "jailTime") if statusJailTime then setAccountData(account, "jailTime", false) end end timerArrested[source] = nil end local status = getElementData(source,"arrested") if status then setAccountData(account, "arrested", true) else local statusArrested = getAccountData(account, "arrested") if statusArrested then setAccountData(account, "arrested", false) end end if getElementData(source, "navtr") then setAccountData(account, "jailTime", 180000) setAccountData(account, "arrested", true) end end end addEventHandler("onPlayerQuit", root, onPlayerQuit) function onPlayerLogin(_, account) local status = getAccountData(account, "arrested") if status then setElementData(source, "arrested", true) local tempo = getAccountData(account, "jailTime") timerArrested[source] = setTimer(function(p) onSoltar(p) end, tempo, 1, source) triggerClientEvent(source, "onClientPlayerArrested", resourceRoot, "add", tempo) setPlayerInPrison(source, "controls") end createPrisonMarker(source) end addEventHandler("onPlayerLogin", root, onPlayerLogin) function setPlayerInPrison(source, type) setElementDimension(source, 2) setElementPosition(source, unpack(cadeias[math.random(#cadeias)])) if type == "controls" then toggleControl(source, "fire", false) toggleControl(source, "aim_weapon", false) toggleControl(source, "next_weapon", false) toggleControl(source, "previous_weapon", false) end end local policeACLs = { aclGetGroup("Console"), -- aclGetGroup("FT"), -- aclGetGroup("ROTA"), -- aclGetGroup("CORE"), -- aclGetGroup("CHOQUE"), -- aclGetGroup("EXE"), } function isPlayerPolice(p) local acc = getPlayerAccount(p) if not acc then return false end if isGuestAccount(acc) then return false end local object = getAccountName(acc) for _,group in ipairs(policeACLs) do if isObjectInACLGroup("user."..object,group) then return true end end return false end function getPlayerFromPartialName(name) local name = name and name:gsub("#%x%x%x%x%x%x", ""):lower() or nil if name then for _, player in ipairs(getElementsByType("player")) do local name_ = getPlayerName(player):gsub("#%x%x%x%x%x%x", ""):lower() if name_:find(name, 1, true) then return player end end end end 1 Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2019 Other Languages Moderators Share Posted February 23, 2019 Substitua as funções onPlayerWasted e onSoltarWasted por essa: function onPlayerDied(totalAmmo, killer, killerWeapon, bodypart, stealth) -- Não use nome de evento como nome de função. if isPlayerPolice(source) then local vtr = carros[source] print(vtr) -- retorna a tabela print(getElementModel(vtr)) -- da erro e retorna false if vtr and isElement(vtr) then local pregados = getAttachedElements(vtr) for _, preso in ipairs(pregados) do if preso and isElement(preso) then detachElements(preso, vtr) setPedAnimation(preso) if getElementData(preso, "navtr") then removeElementData(preso, "navtr") end removeEventHandler('onPlayerCommand', preso, onPlayerCommand) toggleAllControls(preso, true) local x,y,z = getElementPosition(preso) setElementPosition(preso,x+1.5,y+1.5,z+1) end end end end end addEventHandler("onPlayerWasted", root, onPlayerDied) 1 Link to comment
main Posted February 23, 2019 Author Share Posted February 23, 2019 5 minutes ago, Lord Henry said: Substitua as funções onPlayerWasted e onSoltarWasted por essa: function onPlayerDied(totalAmmo, killer, killerWeapon, bodypart, stealth) -- Não use nome de evento como nome de função. if isPlayerPolice(source) then local vtr = carros[source] print(vtr) -- retorna a tabela print(getElementModel(vtr)) -- da erro e retorna false if vtr and isElement(vtr) then local pregados = getAttachedElements(vtr) for _, preso in ipairs(pregados) do if preso and isElement(preso) then detachElements(preso, vtr) setPedAnimation(preso) if getElementData(preso, "navtr") then removeElementData(preso, "navtr") end removeEventHandler('onPlayerCommand', preso, onPlayerCommand) toggleAllControls(preso, true) local x,y,z = getElementPosition(preso) setElementPosition(preso,x+1.5,y+1.5,z+1) end end end end end addEventHandler("onPlayerWasted", root, onPlayerDied) Continua a mesma coisa 1 Link to comment
Other Languages Moderators Lord Henry Posted February 23, 2019 Other Languages Moderators Share Posted February 23, 2019 Já tentou depurar o código pra ver quais partes ele ta lendo? Colocar outputChatBox pelo código. Link to comment
main Posted February 23, 2019 Author Share Posted February 23, 2019 12 minutes ago, Lord Henry said: Já tentou depurar o código pra ver quais partes ele ta lendo? Colocar outputChatBox pelo código. Já sim, o problema é na parte do evento onPlayerWasted 1 Link to comment
[M]ister Posted February 23, 2019 Share Posted February 23, 2019 (edited) Visualmente não vi erro na tabela. Então fui testar e funcionou, dei kill e ele printou o elemento veículo e seu id. Obs: Se ficar um tempo fora do veículo o f1 tem um sistema para destruir o veículo, ai vai dar erro. (verificando um veículo que já foi destruído) Edited February 23, 2019 by MaligNos 1 Link to comment
main Posted February 24, 2019 Author Share Posted February 24, 2019 3 hours ago, MaligNos said: Visualmente não vi erro na tabela. Então fui testar e funcionou, dei kill e ele printou o elemento veículo e seu id. Obs: Se ficar um tempo fora do veículo o f1 tem um sistema para destruir o veículo, ai vai dar erro. (verificando um veículo que já foi destruído) Pois é, está tudo normal, acho que está dando algum conflito no servidor que estou utilizando ele, vou tentar resolver isso. 1 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