Ir para conteúdo
  • Cadastre-se

(Resolvido)Spawn de items


Ir para solução Resolvido por Vodkart,

Posts Recomendados

tenta usar

 

doSummonCreature(var.name, pos)

 

e esse monstro vc consegue criar pelo /m ?

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites
  • Respostas 14
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

@Vodkart sim, consigo summonar ele com o /m. Está funcionando com as duas funções, o script cria o monstro, mas continua persistindo o erro. Acredito que o monstro não está sendo verificado se pode ser criado em paredes ou não, quando o script escolhe alguma area aberta o monstro cria normal. Acho que não esta sendo verificado, estou certo?

Posted Images

@Vodkart sim, consigo summonar ele com o /m. Está funcionando com as duas funções, o script cria o monstro, mas continua persistindo o erro. Acredito que o monstro não está sendo verificado se pode ser criado em paredes ou não, quando o script escolhe alguma area aberta o monstro cria normal. Acho que não esta sendo verificado, estou certo?

Link para o post
Compartilhar em outros sites
  • Solução

@hiquezerah está sendo verificado sim amigo, na área que escolheu, está tudo sendo no mapper editor?

 

vc consegue criar o monstro lá nessa area com o /m?

 

usa assim:

 

local create_tab = {
	area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim
	items = {
		{chance = 50, itemid = 2173, amount = 1},
		{chance = 10, itemid = 2494, amount = 1},
		{chance = 100, itemid = 2159, amount = 20},
		{chance = 100, itemid = 2160, amount = 100},
		{chance = 100, name = "Gerador"}, -- monster name
		{chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo
	}
}

function isWalkable(pos) -- by Nord / editado por Omega
	if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
		return false
	elseif isCreature(getTopCreature(pos).uid) then
		return false
	elseif getTileInfo(pos).protection then
		return false
	elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
		return false
	end
	return true
end
function doAddItenFromMap()
	local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z}
	local var = create_tab.items[math.random(#create_tab.items)]
	if isWalkable(pos) and var.chance > math.random(1, 100) then
		if var.name ~= nil then
			doCreateMonster(var.name, pos, false, true)
			doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE)
			addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
			addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)
			doSendMagicEffect(pos, CONST_ME_MORTAREA)	
		else
			local ret = doCreateItem(var.itemid, var.amount, pos)
			if var.actionID ~= nil then
				doItemSetAttribute(ret, "aid", var.actionID)
			end
		end
	else
		doAddItenFromMap()
	end
end	
function onThink(cid, interval, lastExecution)
	doAddItenFromMap()
	return true
end

 

Editado por Vodkart (veja o histórico de edições)

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

Opa, desculpe não ter retornado, ontem eu acabei tendo alguns projetos e não consegui entrar aqui direito, mas que bom que deu certo. Em relação ao erro do monster eu acredito que nenhum dos dois está sendo verificado se é parede ou não, estou testando umas funções para ver se consigo chegar a um check se é parede ou não e te passo ;)

 

 

Oi, tenta esse script:

 

local create_tab = {
	area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim
	items = {
		{chance = 50, itemid = 2173, amount = 1},
		{chance = 10, itemid = 2494, amount = 1},
		{chance = 100, itemid = 2159, amount = 20},
		{chance = 100, itemid = 2160, amount = 100},
		{chance = 100, name = "Gerador"}, -- monster name
		{chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo
	}
}

function isWalkable(pos) -- by Nord / editado por Omega
	if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
		return false
	elseif isCreature(getTopCreature(pos).uid) then
		return false
	elseif getTileInfo(pos).protection then
		return false
	elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
		return false
	end
	return true
end
function doAddItenFromMap()
	
	local var = create_tab.items[math.random(#create_tab.items)]
	local pos = RetornarPosicao()
	
	if var.chance > math.random(1, 100) then
		if var.name ~= nil then
			CriarMonstroPos(var.name, pos)
		else
			local ret = doCreateItem(var.itemid, var.amount, pos)
			if var.actionID ~= nil then
				doItemSetAttribute(ret, "aid", var.actionID)
			end
		end
	else
		doAddItenFromMap()
	end
end

function RetornarPosicao()
	local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z}
	
	if isWalkable(pos) == true then
		return pos
	else
		return RetornarPosicao()
	end
end

---- Novo --- o Distro continuará dando o erro, porém se o monstro não for criado ele tentará criar em outra posição
function CriarMonstroPos(Nome, pos)
	-- Eu testei esse método, por algum motivo quando da erro, o doCreateMonster(..) retorna true rsrs...
	if doCreateMonster(Nome, pos) == true then -- Caso de erro e o montro não seja criado, o método será chamado novamente
		doBroadcastMessage("Não criou", 20) -- Depois de testar, comenta essa linha, ela servira de indicação para você ver se quando não cria, ele cai aqui
		CriarMonstroPos(Nome, RetornarPosicao()) -- Tentar recriar o monstro passando nova posição
		return false
	end
	doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE)
	addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
	addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)
	doSendMagicEffect(pos, CONST_ME_MORTAREA)	
end

function onThink(cid, interval, lastExecution)
	doAddItenFromMap()
	return true
end

me retorna se mesmo dando o erro do monstro não sendo criado, ele criou em outra pos.

Editado por Pokemon Nox Oficial (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 2 weeks later...
Em 05/02/2020 em 08:52, Pokemon Nox Oficial disse:

Opa, desculpe não ter retornado, ontem eu acabei tendo alguns projetos e não consegui entrar aqui direito, mas que bom que deu certo. Em relação ao erro do monster eu acredito que nenhum dos dois está sendo verificado se é parede ou não, estou testando umas funções para ver se consigo chegar a um check se é parede ou não e te passo ;)

 

 

Oi, tenta esse script:

 


local create_tab = {
	area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim
	items = {
		{chance = 50, itemid = 2173, amount = 1},
		{chance = 10, itemid = 2494, amount = 1},
		{chance = 100, itemid = 2159, amount = 20},
		{chance = 100, itemid = 2160, amount = 100},
		{chance = 100, name = "Gerador"}, -- monster name
		{chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo
	}
}

function isWalkable(pos) -- by Nord / editado por Omega
	if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
		return false
	elseif isCreature(getTopCreature(pos).uid) then
		return false
	elseif getTileInfo(pos).protection then
		return false
	elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
		return false
	end
	return true
end
function doAddItenFromMap()
	
	local var = create_tab.items[math.random(#create_tab.items)]
	local pos = RetornarPosicao()
	
	if var.chance > math.random(1, 100) then
		if var.name ~= nil then
			CriarMonstroPos(var.name, pos)
		else
			local ret = doCreateItem(var.itemid, var.amount, pos)
			if var.actionID ~= nil then
				doItemSetAttribute(ret, "aid", var.actionID)
			end
		end
	else
		doAddItenFromMap()
	end
end

function RetornarPosicao()
	local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z}
	
	if isWalkable(pos) == true then
		return pos
	else
		return RetornarPosicao()
	end
end

---- Novo --- o Distro continuará dando o erro, porém se o monstro não for criado ele tentará criar em outra posição
function CriarMonstroPos(Nome, pos)
	-- Eu testei esse método, por algum motivo quando da erro, o doCreateMonster(..) retorna true rsrs...
	if doCreateMonster(Nome, pos) == true then -- Caso de erro e o montro não seja criado, o método será chamado novamente
		doBroadcastMessage("Não criou", 20) -- Depois de testar, comenta essa linha, ela servira de indicação para você ver se quando não cria, ele cai aqui
		CriarMonstroPos(Nome, RetornarPosicao()) -- Tentar recriar o monstro passando nova posição
		return false
	end
	doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE)
	addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
	addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)
	doSendMagicEffect(pos, CONST_ME_MORTAREA)	
end

function onThink(cid, interval, lastExecution)
	doAddItenFromMap()
	return true
end

me retorna se mesmo dando o erro do monstro não sendo criado, ele criou em outra pos.

 

Olá amigo, agradeço pela ajuda e peço desculpas por não responder antes. Eu acabei viajando e estou sem acesso a minha maquina, no momento não consigo testar para ti. Mas antes de sair eu tinha conseguido arrumar uma forma que estava sendo funcional para mim, tirei o monstro da tabela e coloquei um item qualquer, adicionei uma action para quando clicarem no item o monstro seria summonado. então está funcionado bem, obrigado mesmo!

Em 05/02/2020 em 07:18, Vodkart disse:

@hiquezerah está sendo verificado sim amigo, na área que escolheu, está tudo sendo no mapper editor?

 

vc consegue criar o monstro lá nessa area com o /m?

 

usa assim:

 


local create_tab = {
	area = {{x=2795,y=879,z=7}, {x=2799,y=886,z=7}}, -- começo e fim
	items = {
		{chance = 50, itemid = 2173, amount = 1},
		{chance = 10, itemid = 2494, amount = 1},
		{chance = 100, itemid = 2159, amount = 20},
		{chance = 100, itemid = 2160, amount = 100},
		{chance = 100, name = "Gerador"}, -- monster name
		{chance = 100, itemid = 1111, amount = 1, actionID = 26008} -- uma chest por exemplo
	}
}

function isWalkable(pos) -- by Nord / editado por Omega
	if getTileThingByPos({x = pos.x, y = pos.y, z = pos.z, stackpos = 0}).itemid == 0 then
		return false
	elseif isCreature(getTopCreature(pos).uid) then
		return false
	elseif getTileInfo(pos).protection then
		return false
	elseif hasProperty(getThingFromPos(pos).uid, 3) or hasProperty(getThingFromPos(pos).uid, 7) then
		return false
	end
	return true
end
function doAddItenFromMap()
	local pos = {x= math.random(create_tab.area[1].x,create_tab.area[2].x), y=math.random(create_tab.area[1].y,create_tab.area[2].y), z=create_tab.area[1].z}
	local var = create_tab.items[math.random(#create_tab.items)]
	if isWalkable(pos) and var.chance > math.random(1, 100) then
		if var.name ~= nil then
			doCreateMonster(var.name, pos, false, true)
			doSendDistanceShoot({x = pos.x - math.random(4, 6), y = pos.y - 5, z = pos.z}, pos, CONST_ANI_FIRE)
			addEvent(doSendMagicEffect, 150, pos, CONST_ME_HITBYFIRE)
			addEvent(doSendMagicEffect, 150, pos, CONST_ME_FIREAREA)
			doSendMagicEffect(pos, CONST_ME_MORTAREA)	
		else
			local ret = doCreateItem(var.itemid, var.amount, pos)
			if var.actionID ~= nil then
				doItemSetAttribute(ret, "aid", var.actionID)
			end
		end
	else
		doAddItenFromMap()
	end
end	
function onThink(cid, interval, lastExecution)
	doAddItenFromMap()
	return true
end

 

 

@Vodkart Desculpe-me a demora para responder, eu acabei viajando e não estou com acesso a maquina. Acabei não lembrando de voltar aqui e falar que eu consegui fazer que o script funcionasse de uma forma diferente, mas queria chegaria ao objetivo que eu tinha. Eu tirei o monstro da tabela e coloquei mais um item, nele eu adicionei uma action para criar um monstro quando o item for usado. Obrigado pela ajuda irmão!

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Estatísticas dos Fóruns

    96843
    Tópicos
    519604
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo