Sign in to follow this  
GunnerMapper

Sistema de Blitz

Recommended Posts

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 by GunnerMapper

Share this post


Link to post

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)

 

  • Like 1

Share this post


Link to post

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 by GunnerMapper

Share this post


Link to post

Qual o limite de criação de objetos? (quantos objetos cada player pode criar no máximo?)

Edited by Lord Henry
  • Thanks 2

Share this post


Link to post

Desculpe pela demora , meu Pc tinha estragado. 

 Voltando ao assunto, o numero de objetos que o player podera criar seria infinito.

Edited by GunnerMapper

Share this post


Link to post

Impossível.

Não tem como criar objetos infinitos. Sem contar que haveria abusos.

Sugiro que limite em uns 10 ou 20 por player.

Share this post


Link to post

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

 

  • Confused 1

Share this post


Link to post
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!

Share this post


Link to post

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)

Share this post


Link to post

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
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.