OFF_Gunner Posted November 5, 2019 Share Posted November 5, 2019 (edited) Bom dia / boa tarde / boa noite. Estou fazendo um script simples de blitz , ja fiz a primeira etapa ( de criar o objeto etc...) , porem gostaria de deletar este objeto . Sei que devo usar destroyElement , porem não sei como fazer isso kkkk. Script abaixo! function createObjectG ( thePlayer, commandName ) if ( thePlayer ) then local x, y, z = getElementPosition ( thePlayer ) -- pegar a posição do player -- criar o obejto proximo ao player local obejto = createObject ( 1237, x , y , z -1, 0, 0, 0 ) if ( obejto ) then -- checar se o objeto foi criado com sucesso. outputConsole ( "Objeto criado com sucesso!", thePlayer ) else outputConsole ( "Falha ao criar o objeto!", thePlayer ) end end end addCommandHandler ( "cb", createObjectG ) function deletObjeto(thePlayer, commandName) destroyElement( obejto ) end addCommandHandler("dob", deletObjeto) Edited November 5, 2019 by GunnerMapper Link to comment
Other Languages Moderators Lord Henry Posted November 5, 2019 Other Languages Moderators Share Posted November 5, 2019 Primeiramente vc deve indexar o objeto no jogador, caso contrário outro jogador vai causar conflito no objeto criado por este jogador. Se o jogador sair do servidor, deve-se destruir o objeto dele. obejto = {} -- Table vazia, onde todos os objetos serão armazenados. Não sei se 'obejto' foi escrito errado de propósito, mas mantive da forma que estava. function createObjectG (thePlayer, commandName) if (isElement (obejto[thePlayer])) then return outputConsole ("Já existe um objeto criado por você. Delete-o antes de criar outro.", thePlayer) end local x, y, z = getElementPosition (thePlayer) -- pega a posição do player que executou o comando obejto[thePlayer] = createObject (1237, x , y , z -1) -- cria o obejto na posição do player e indexa o objeto no jogador. if (obejto[thePlayer]) then -- checa se o objeto foi criado com sucesso. outputConsole ("Objeto criado com sucesso!", thePlayer) else outputConsole ("Falha ao criar o objeto!", thePlayer) end end addCommandHandler ("cb", createObjectG) function deletObjeto (thePlayer, commandName) if (isElement (obejto[thePlayer])) then -- Verifica se o objeto existe antes de tentar destruí-lo. destroyElement (obejto[thePlayer]) obejto[thePlayer] = nil -- Anula a variável do objeto destruído para liberar espaço na memória. (sempre faça isso após destruir um elemento que está numa variável global) outputConsole ("Objeto destruído com sucesso!", thePlayer) else outputConsole ("Você não tem um objeto criado!", thePlayer) end end addCommandHandler ("dob", deletObjeto) addEventHandler ("onPlayerQuit", root, function (quitType, reason, responsibleElement) if (isElement (obejto[source])) then -- Se existe um objeto criado pelo jogador que saiu do server, então: destroyElement (obejto[source]) -- Destrói esse objeto. obejto[source] = nil -- Anula a variável dele. end end) 1 Link to comment
OFF_Gunner Posted November 5, 2019 Author Share Posted November 5, 2019 (edited) Obrigado @Lord Henry . Porem tem um problema , acabei retirando as linhas 4, 5 e 6. Pois é um sistema de blitz então deverá ter mais de uma criação de objetos. E assim , quando deleto o objeto , só deleta o ultimo objeto criado. Gostaria que deleta-se todos. Mas 1 de cada vez (se possivel). Obs: O "obejto" foi erro do teclado kkk, algumas teclas ficam falhando quando pressionadas! Edited November 5, 2019 by GunnerMapper Link to comment
Other Languages Moderators Lord Henry Posted November 6, 2019 Other Languages Moderators Share Posted November 6, 2019 (edited) Qual o limite de criação de objetos? (quantos objetos cada player pode criar no máximo?) Edited November 6, 2019 by Lord Henry 2 Link to comment
OFF_Gunner Posted November 14, 2019 Author Share Posted November 14, 2019 (edited) Desculpe pela demora , meu Pc tinha estragado. Voltando ao assunto, o numero de objetos que o player podera criar seria infinito. Edited November 14, 2019 by GunnerMapper Link to comment
Other Languages Moderators Lord Henry Posted November 14, 2019 Other Languages Moderators Share Posted November 14, 2019 Impossível. Não tem como criar objetos infinitos. Sem contar que haveria abusos. Sugiro que limite em uns 10 ou 20 por player. Link to comment
OFF_Gunner Posted November 14, 2019 Author Share Posted November 14, 2019 Ok , se eu escolhesse 20 como poderia "limitar" o numero de objetos criados por um player? Link to comment
DNL291 Posted November 14, 2019 Share Posted November 14, 2019 Aqui as funções para isso: local globalObjects = {} function createPlayerObject( player, ... ) if isElement(player) then local object = createObject( ... ) if not object then return false end if not globalObjects[player] then globalObjects[player] = {} end table.insert( globalObjects[player], object ) end end function destroyPlayerObjects( player ) if globalObjects[player] then for i=1, #globalObjects[player] do if isElement(globalObjects[player][i]) then destroyElement(globalObjects[player][i]) end end globalObjects[player] = nil end end addEventHandler("onPlayerQuit", root, function() destroyPlayerObjects( source ) end) Você vai poder verificar a quantidade atual de objects com uma verificação tipo assim: local limite = 20 if globalObjects[player] and #globalObjects[player] >= limite then return outputChatBox("Limite de objects criados!", player) end 1 Link to comment
OFF_Gunner Posted November 14, 2019 Author Share Posted November 14, 2019 27 minutes ago, DNL291 said: Aqui as funções para isso: local globalObjects = {} function createPlayerObject( player, ... ) if isElement(player) then local object = createObject( ... ) if not object then return false end if not globalObjects[player] then globalObjects[player] = {} end table.insert( globalObjects[player], object ) end end function destroyPlayerObjects( player ) if globalObjects[player] then for i=1, #globalObjects[player] do if isElement(globalObjects[player][i]) then destroyElement(globalObjects[player][i]) end end globalObjects[player] = nil end end addEventHandler("onPlayerQuit", root, function() destroyPlayerObjects( source ) end) Você vai poder verificar a quantidade atual de objects com uma verificação tipo assim: local limite = 20 if globalObjects[player] and #globalObjects[player] >= limite then return outputChatBox("Limite de objects criados!", player) end Não entendi essas funções . Tá muito avançado pra mim , como eu falei no inicio do topico é pra fazer uma coisa simples. Mas mesmo assim agradeço pela resposta! Link to comment
DNL291 Posted November 15, 2019 Share Posted November 15, 2019 Você vai precisar disso para o seu script, não tem saída. E mesmo que seja complexo pra você, você não fará nada além de utilizar as funções já feitas. Editando por cima do código do Lord Henry e adicionando o meu ficaria assim: local limite_de_objetos = 20 local globalObjects = {} function createObjectG (thePlayer, commandName) if globalObjects[thePlayer] and #globalObjects[thePlayer] >= limite_de_objetos then -- verifica se a quantidade de objects do jogador atingiu o limite return outputChatBox ("Quantidade de objetos atingiu o limite", thePlayer) end local x, y, z = getElementPosition (thePlayer) local object = createPlayerObject (thePlayer, 1237, x , y , z -1) if object then -- checa se o objeto foi criado com sucesso. outputChatBox ("Objeto criado com sucesso!", thePlayer) else outputChatBox ("Falha ao criar o objeto!", thePlayer) end end addCommandHandler ("cb", createObjectG) -- deletar um objeto específico da tabela function deletObjeto (thePlayer, commandName, id) if globalObjects[thePlayer] and tonumber(id) then id = tonumber(id) if globalObjects[thePlayer][id] then destroyElement (globalObjects[thePlayer][id]) table.remove(globalObjects[thePlayer], id) outputChatBox ("Objeto ID: "..id.." foi destruído com sucesso!", thePlayer) else outputChatBox ("Objeto com este id não foi encontrado!", thePlayer) end end end addCommandHandler ("dob", deletObjeto) -- deletar todos objetos addCommandHandler("dall", function (player) if destroyPlayerObjects( player ) then outputChatBox ("Todos objects foram destruídos!!", thePlayer) end end) function createPlayerObject( player, ... ) if isElement(player) then local object = createObject( ... ) if not object then return false end if not globalObjects[player] then globalObjects[player] = {} end table.insert( globalObjects[player], object ) return object end end function destroyPlayerObjects( player ) if globalObjects[player] then for i=1, #globalObjects[player] do if isElement(globalObjects[player][i]) then destroyElement(globalObjects[player][i]) end end globalObjects[player] = nil return true end return false end addEventHandler("onPlayerQuit", root, function() destroyPlayerObjects( source ) end) (não foi testado) 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