joao2235 Posted September 4, 2019 Share Posted September 4, 2019 local vehicleElements = {} allVeh = {510} local pickupTable = { {1086.1798095703,-1801.6898193359,13.601690292358}, } function createPickupOnServerStart () for i, cor in ipairs (pickupTable) do local pickup = createPickup(cor[1], cor[2], cor[3], 3, 1274, 0) setElementData(pickup, "pickupArenda", true) end end addEventHandler("onResourceStart", getResourceRootElement( getThisResource() ), createPickupOnServerStart) function onResourceStop (veh) if isTimer(vehicleElements[veh]) then killTimer(vehicleElements[veh]) end --vehicleElements[veh] = destroyElement(veh) end addEventHandler("onResourceStop", getResourceRootElement( getThisResource() ), onResourceStop) function onPickupHit (hit) if not getElementData(source, "pickupArenda") or getElementType(hit) ~= "player" and not isPedInVehicle(hit) then return end triggerClientEvent(hit, "changeArendaMenuState", hit) end addEventHandler("onPickupHit", getRootElement(), onPickupHit) function onPlayerUseCustomPickup() if getPlayerMoney(source) >= 500 then local x, y, z = getElementPosition(source) local veh = createVehicle(allVeh[math.random(1,#allVeh)], x, y, z) setElementData(veh, "starter_pack", true) setElementData(veh, "owner", source) warpPedIntoVehicle(source, veh) takePlayerMoney(source, 500) outputChatBox("Bicicleta alugada, bom uso!.", source, 0, 255, 0) else outputChatBox("Para alugar uma bicicleta você precisa de >> 500 $$ <<.", source, 255, 0, 0) end end addEvent("onPlayerUseCustomPickup", true) addEventHandler("onPlayerUseCustomPickup", getRootElement(), onPlayerUseCustomPickup) function onPlayerVehicleEnter (veh, seat) if getElementData(veh, "starter_pack") == true and seat == 0 then if isTimer(vehicleElements[veh]) then killTimer(vehicleElements[veh]) end end end addEventHandler("onPlayerVehicleEnter", getRootElement(), onPlayerVehicleEnter) function onPlayerVehicleExit (veh, seat) if getElementData(veh, "starter_pack") == true and seat == 0 then if isTimer(vehicleElements[veh]) then killTimer(vehicleElements[veh]) end vehicleElements[veh] = setTimer(destroyElement, 300000, 1, veh) end end addEventHandler("onPlayerVehicleExit", getRootElement(), onPlayerVehicleExit) function onVehicleStartEnter (player, seat) if getElementData(source, "starter_pack") == true and seat == 0 then local owner = getElementData(source, "owner") if owner ~= player then cancelEvent() outputChatBox("Você não é dono desta bicicleta, alugue sua bike para poder usá-la.", player, 255, 0, 0) end end end addEventHandler("onVehicleStartEnter", getRootElement(), onVehicleStartEnter) Esse é o script de alugar bicicleta, a bike some após 5 minutos do player estando fora dela, até aí sem problemas. Gostaria de saber como faço para que ela suma instantaneamente se o player morrer, sair do game, for preso, etc. Segue abaixo o que tentei: function DestroyVeiculo (veh, seat) if getElementData(veh, "starter_pack") == true and seat == 0 then if isTimer(vehicleElements[veh]) then killTimer(vehicleElements[veh]) end --vehicleElements[veh] = setTimer(destroyElement, 300000, 1, veh) vehicleElements[veh] = destroyElement(veh) end end addEventHandler ("onPlayerLogout", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerQuit", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerWasted", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerBan", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerDie", getRootElement(), DestroyVeiculo) Dessa forma acima não consegui. Se alguém puder me ajudar, agradeço! Link to comment
carlos eduardo Posted September 4, 2019 Share Posted September 4, 2019 (edited) function DestroyVeiculo (veh, seat) if getElementData(veh, "starter_pack") == true and seat == 0 then if isTimer(vehicleElements[veh]) then killTimer(vehicleElements[veh]) end destroyElement(veh) end end addEventHandler ("onPlayerLogout", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerQuit", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerWasted", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerBan", getRootElement(), DestroyVeiculo) addEventHandler ("onPlayerDie", getRootElement(), DestroyVeiculo) Edited September 4, 2019 by carlos eduardo Link to comment
Other Languages Moderators Lord Henry Posted September 4, 2019 Other Languages Moderators Share Posted September 4, 2019 (edited) Você não deve usar a mesma função para eventos diferentes quando os eventos possuem parâmetros de função diferentes em uso. Além disso, veh não é um veículo nessa função. E outra: O evento onPlayerBan não faz sentido para esse objetivo. E o evento onPlayerDie nem existe. O resto do seu script também não faz sentido, você usa veh como parâmetro de função em eventos que não tem nada a ver com veículos. Edited September 4, 2019 by Lord Henry Link to comment
joao2235 Posted September 5, 2019 Author Share Posted September 5, 2019 2 hours ago, Lord Henry said: Você não deve usar a mesma função para eventos diferentes quando os eventos possuem parâmetros de função diferentes em uso. Além disso, veh não é um veículo nessa função. E outra: O evento onPlayerBan não faz sentido para esse objetivo. E o evento onPlayerDie nem existe. O resto do seu script também não faz sentido, você usa veh como parâmetro de função em eventos que não tem nada a ver com veículos. Mestre este script eu peguei da net, só gostaria de saber como faria pra quando o player for morto, preso, etc. a bike sumir. Link to comment
Other Languages Moderators Lord Henry Posted September 5, 2019 Other Languages Moderators Share Posted September 5, 2019 Vai ter que reprogramar o script mano. O jeito que o cara da internet fez não permite que você obtenha o veículo depois pra poder destruí-lo. Quando o cara fez o veh ser uma variável local, a variável deixa de existir fora daquele escopo que ela foi criada. 1 Link to comment
joao2235 Posted September 5, 2019 Author Share Posted September 5, 2019 Entendi mano, vou refazer aqui. Qualquer dúvida aviso por aqui e posto os resultados! Link to comment
Other Languages Moderators Lord Henry Posted September 5, 2019 Other Languages Moderators Share Posted September 5, 2019 (edited) A minha dica é você criar uma table vazia no início do script e depois quando for criar o veículo, colocar o veículo nessa table, usando o jogador que criou ele como índice. (Sim, eu sei que usei uma linguagem técnica e difícil de entender) Segue um exemplo pra ajudar vc a interpretar a lógica do esquema: tableVehs = {} -- Isso é uma table vazia, criada no início do script. Todos os veículos dos jogadores serão colocados nesta table. allVeh = {510} -- Table de IDs possíveis de veículo. function qualquerCoisa (thePlayer) local x, y, z = getElementPosition (thePlayer) if tableVehs[thePlayer] then -- Se o veículo do jogador já existe, então: setElementPosition (tableVehs[thePlayer], x, y, z+1) -- Move o veículo para a posição do jogador ao invés de criar outro. else -- Se o veículo do jogador não existe, então: tableVehs[thePlayer] = createVehicle (math.random(#allVeh), x, y, z) -- Cria o veículo na posição do jogador. Adicionando a variável deste veículo na table e usando o próprio jogador como índice. end end addCommandHandler ("criar", qualquerCoisa) -- Comando qualquer só pra testar essa função. function qualquerCoisa2 (thePlayer) if tableVehs[thePlayer] then -- Se o veículo do jogador já existe, então: destroyElement (tableVehs[thePlayer]) tableVehs[thePlayer] = nil -- Anula a variável da table para liberar espaço na memória. end end addCommandHandler ("destruir", qualquerCoisa2) -- Comando qualquer só pra testar essa função. function morreu () if tableVehs[source] then destroyElement (tableVehs[source]) tableVehs[source] = nil end end addEventHandler ("onPlayerWasted", root, morreu) -- O source neste evento é o jogador que morreu. addEventHandler ("onPlayerQuit", root, morreu) -- O source neste evento é o jogador que saiu do server. Edited September 5, 2019 by Lord Henry Link to comment
joao2235 Posted September 5, 2019 Author Share Posted September 5, 2019 Irmão, fiz dessa forma. Funcionou também! Segue: MarkerBike = createMarker(1086.3326416016,-1802.1416015625,12.60143661499, "cylinder", 1.5, 255,255,255,50) --local Veiculos = {510} -- IDs dos Veículos. Rumpo = {} AparecerBike = Rumpo[source] function spawn (source) if isElementWithinMarker(source, MarkerBike) then if getPlayerMoney(source) >= 500 then takePlayerMoney (source, 500) if AparecerBike and isElement(AparecerBike) then destroyElement(AparecerBike) end AparecerBike = createVehicle (510, 1091.2088623047,-1796.9704589844,13.606305122375) setElementData(source, "kart.race", true) setElementData(AparecerBike, "owner", source) setElementRotation(AparecerBike,0,0,0) fadeCamera ( source, false, 0, 0, 0, 0 ) setTimer ( fadeCamera, 500, 1, source , true, 0.5 ) setTimer ( setCameraTarget, 500, 1, source ) outputChatBox ("#FF0000✘ #ffffffINFO #FF0000✘➺ #FF0000Bicicleta Alugada com sucesso, faça bom uso!", source, 255, 255, 255, true) warpPedIntoVehicle (source, AparecerBike) else outputChatBox("#FF0000✘ #ffffffINFO #FF0000✘➺ #FF0000Você não tem dinheiro suficiente para alugar uma bike!", player, 255,255,255,true) end end end addCommandHandler("alugar", spawn) function SemRoubo (player, seat) if getElementData(source, "kart.race") == true and seat == 0 then local owner = getElementData(source, "owner") if owner ~= player then cancelEvent() outputChatBox("Você não é dono desta bicicleta, alugue sua bike para poder usá-la.", player, 255, 0, 0) end end end addEventHandler("onVehicleStartEnter", root, SemRoubo) function DestroyVeiculo () if getElementData(source, "kart.race") then setElementData(source, "kart.race", false) destroyElement (AparecerBike) end end addEventHandler ("onPlayerLogout", root, DestroyVeiculo) addEventHandler ("onPlayerQuit", root, DestroyVeiculo) addEventHandler ("onPlayerWasted", root, DestroyVeiculo) addEventHandler ("onPlayerBan", root, DestroyVeiculo) addEventHandler ("onResourceStop", root, DestroyVeiculo) Link to comment
joao2235 Posted September 5, 2019 Author Share Posted September 5, 2019 Porém não consegui adicionar o veículo sumindo depois de um tempo que o player esteja fora dele, tem alguma ideia de como poderia encaixar isso ? Link to comment
joao2235 Posted September 5, 2019 Author Share Posted September 5, 2019 (edited) Testando o script descobri um bug, não chega a ser um erro, é o seguinte: Quando entro na bike pela primeira vez eu me torno o "owner", mas se algum outro player além de mim tenta entrar na bike ele não consegue, até ai tudo bem. Só que quando ele tenta entrar na bike, mesmo ele não conseguindo ele se torna o "owner". Isso significa que se o player que tentou entrar na bike que não é dele ele se torna o owner e se ele for morto ou deslogar, etc. a bike desaparece. Edited September 5, 2019 by joao2235 Link to comment
CrowleySCR Posted September 5, 2019 Share Posted September 5, 2019 1 hour ago, joao2235 said: Porém não consegui adicionar o veículo sumindo depois de um tempo que o player esteja fora dele, tem alguma ideia de como poderia encaixar isso ? MarkerBike = createMarker(1086.3326416016,-1802.1416015625,12.60143661499, "cylinder", 1.5, 255,255,255,50) --local Veiculos = {510} -- IDs dos Veículos. Rumpo = {} AparecerBike = Rumpo[source] function spawn (source) if isElementWithinMarker(source, MarkerBike) then if getPlayerMoney(source) >= 500 then takePlayerMoney (source, 500) if AparecerBike and isElement(AparecerBike) then destroyElement(AparecerBike) end AparecerBike = createVehicle (510, 1091.2088623047,-1796.9704589844,13.606305122375) setElementData(source, "kart.race", true) setElementData(AparecerBike, "owner", source) setElementRotation(AparecerBike,0,0,0) fadeCamera ( source, false, 0, 0, 0, 0 ) setTimer ( fadeCamera, 500, 1, source , true, 0.5 ) setTimer ( setCameraTarget, 500, 1, source ) outputChatBox ("#FF0000✘ #ffffffINFO #FF0000✘➺ #FF0000Bicicleta Alugada com sucesso, faça bom uso!", source, 255, 255, 255, true) warpPedIntoVehicle (source, AparecerBike) else outputChatBox("#FF0000✘ #ffffffINFO #FF0000✘➺ #FF0000Você não tem dinheiro suficiente para alugar uma bike!", player, 255,255,255,true) end end end addCommandHandler("alugar", spawn) function SemRoubo (player, seat) if getElementData(source, "kart.race") == true and seat == 0 then local owner = getElementData(source, "owner") if owner ~= player then cancelEvent() outputChatBox("Você não é dono desta bicicleta, alugue sua bike para poder usá-la.", player, 255, 0, 0) end end end addEventHandler("onVehicleStartEnter", root, SemRoubo) function DestroyVeiculo () if getElementData(source, "kart.race") then setElementData(source, "kart.race", false) destroyElement (AparecerBike) end end addEventHandler ("onPlayerLogout", root, DestroyVeiculo) addEventHandler ("onPlayerQuit", root, DestroyVeiculo) addEventHandler ("onPlayerWasted", root, DestroyVeiculo) addEventHandler ("onPlayerBan", root, DestroyVeiculo) addEventHandler ("onResourceStop", root, DestroyVeiculo) local minutos = 1 -- New function destroyVehicle(vehicle) local check=false for i,player in ipairs(getElementsByType("player")) do if getPlayerOccupiedVehicle(player)==vehicle then check=true end end if check==false then destroyElement(AparecerBike) end end function exitVehicle(AparecerBike) setTimer(destroyVehicle,60000*minutos,0,AparecerBike) end addEventHandler("onPlayerVehicleExit",getRootElement(),exitVehicle) eu testei isso e funcionou tenta ai ;d 1 Link to comment
joao2235 Posted September 5, 2019 Author Share Posted September 5, 2019 (edited) 14 minutes ago, CrowleySCR said: MarkerBike = createMarker(1086.3326416016,-1802.1416015625,12.60143661499, "cylinder", 1.5, 255,255,255,50) --local Veiculos = {510} -- IDs dos Veículos. Rumpo = {} AparecerBike = Rumpo[source] function spawn (source) if isElementWithinMarker(source, MarkerBike) then if getPlayerMoney(source) >= 500 then takePlayerMoney (source, 500) if AparecerBike and isElement(AparecerBike) then destroyElement(AparecerBike) end AparecerBike = createVehicle (510, 1091.2088623047,-1796.9704589844,13.606305122375) setElementData(source, "kart.race", true) setElementData(AparecerBike, "owner", source) setElementRotation(AparecerBike,0,0,0) fadeCamera ( source, false, 0, 0, 0, 0 ) setTimer ( fadeCamera, 500, 1, source , true, 0.5 ) setTimer ( setCameraTarget, 500, 1, source ) outputChatBox ("#FF0000✘ #ffffffINFO #FF0000✘➺ #FF0000Bicicleta Alugada com sucesso, faça bom uso!", source, 255, 255, 255, true) warpPedIntoVehicle (source, AparecerBike) else outputChatBox("#FF0000✘ #ffffffINFO #FF0000✘➺ #FF0000Você não tem dinheiro suficiente para alugar uma bike!", player, 255,255,255,true) end end end addCommandHandler("alugar", spawn) function SemRoubo (player, seat) if getElementData(source, "kart.race") == true and seat == 0 then local owner = getElementData(source, "owner") if owner ~= player then cancelEvent() outputChatBox("Você não é dono desta bicicleta, alugue sua bike para poder usá-la.", player, 255, 0, 0) end end end addEventHandler("onVehicleStartEnter", root, SemRoubo) function DestroyVeiculo () if getElementData(source, "kart.race") then setElementData(source, "kart.race", false) destroyElement (AparecerBike) end end addEventHandler ("onPlayerLogout", root, DestroyVeiculo) addEventHandler ("onPlayerQuit", root, DestroyVeiculo) addEventHandler ("onPlayerWasted", root, DestroyVeiculo) addEventHandler ("onPlayerBan", root, DestroyVeiculo) addEventHandler ("onResourceStop", root, DestroyVeiculo) local minutos = 1 -- New function destroyVehicle(vehicle) local check=false for i,player in ipairs(getElementsByType("player")) do if getPlayerOccupiedVehicle(player)==vehicle then check=true end end if check==false then destroyElement(AparecerBike) end end function exitVehicle(AparecerBike) setTimer(destroyVehicle,60000*minutos,0,AparecerBike) end addEventHandler("onPlayerVehicleExit",getRootElement(),exitVehicle) eu testei isso e funcionou tenta ai ;d 100% Working. Se puder me dar uma força com isso: 15 minutes ago, joao2235 said: Testando o script descobri um bug, não chega a ser um erro, é o seguinte: Quando entro na bike pela primeira vez eu me torno o "owner", mas se algum outro player além de mim tenta entrar na bike ele não consegue, até ai tudo bem. Só que quando ele tenta entrar na bike, mesmo ele não conseguindo ele se torna o "owner". Isso significa que se o player que tentou entrar na bike que não é dele ele se torna o owner e se ele for morto ou deslogar, etc. a bike desaparece. Edited September 5, 2019 by joao2235 Link to comment
Other Languages Moderators Lord Henry Posted September 6, 2019 Other Languages Moderators Share Posted September 6, 2019 Não entendi sua linha 5. Link to comment
DNL291 Posted September 7, 2019 Share Posted September 7, 2019 Rumpo[source] precisa estar dentro da função. Link to comment
joao2235 Posted September 7, 2019 Author Share Posted September 7, 2019 13 hours ago, DNL291 said: Rumpo[source] precisa estar dentro da função. No lugar do AparecerBike ? @DNL291 Fui testar com um outro player, o que acontece é que se eu alugo a bike e posteriormente ele aluga também, minha bike some. Link to comment
DNL291 Posted September 7, 2019 Share Posted September 7, 2019 Sim, deve estar aonde está a variável AparecerBike. A sua bike sumindo quando outro player aluga é porque tá numa variável, armazenando o veículo com Rumpo[player] irá corrigir isso. Link to comment
joao2235 Posted September 8, 2019 Author Share Posted September 8, 2019 Ook! Vou testar, desde já agradeço. 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