Ir para conteúdo
  • 0

Corrigir Spell tfs 1.4.2


gabrielsaintz

Pergunta

Eai galera! Tenho uma Spell porém queria que ela seguisse meu personagem, alguém pode me dizer uma forma de fazer isso?

A magia ta assim:
 

function spellCallback(cid, position, count)
	if Creature(cid) then
		if count > 0 or math.random(0, 1) == 1 then
			position:sendMagicEffect(CONST_ME_HITBYFIRE)
			doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT)
		end

		if count < 5 then
			count = count + 1
			addEvent(spellCallback, math.random(1000, 4000), cid, position, count)
		end
	end
end

function onTargetTile(creature, position)
	spellCallback(creature:getId(), position, 0)
end

local combat = Combat()
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile")

function onCastSpell(creature, variant, isHotkey)
	return combat:execute(creature, variant)
end

 

Dentro do game:

 

giphy-downsized-large.gif

 

Quando ando para a esquerda ela continua na posição de onde eu fiz o cast dela. Até entendo o porque disso, ela só esta sendo executada 1 vez, com isso ela só registra a posição do meu personagem na hora que é castada. Meu objetivo é manter essa aleatoriedade nos hits porém quero que ela acompanhe meu personagem.

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Isso acontece porque você definiu uma posição, mas não está atualizando, então o efeito fica estático naquela coordenada.

 

Substitua seu código por:

 

function createSpellExplosion(creature, combat, variant, count)
	local caster = Creature(creature)
	
	if not caster or combat == nil then
		return true
	end
	
	if count > 0
		if count < 5 and (math.random(0, 1) == 0) then
			count = count + 1
		
		else
			caster:getPosition():sendMagicEffect(CONST_ME_HITBYFIRE)
		end		
		
		combat:execute(caster, variant)
		
		addEvent(createSpellExplosion, math.random(1000, 4000), caster:getId(), combat, variant, count - 1)
	
	else
		return true
	end
end

local combat = Combat()
combat:setFormula(COMBAT_FORMULA_DAMAGE, -100, 0, -100, 0)
combat:setArea(createCombatArea(CONST_ME_EXPLOSIONHIT))
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "createSpellExplosion")

function onCastSpell(creature, variant, isHotkey)
	return createSpellExplosion(creature, combat, variant, count)
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
41 minutos atrás, Yan Oliveira disse:

Isso acontece porque você definiu uma posição, mas não está atualizando, então o efeito fica estático naquela coordenada.

 

Substitua seu código por:

 

function createSpellExplosion(creature, combat, variant, count)
	local caster = Creature(creature)
	
	if not caster or combat == nil then
		return true
	end
	
	if count > 0
		if count < 5 and (math.random(0, 1) == 0) then
			count = count + 1
		
		else
			caster:getPosition():sendMagicEffect(CONST_ME_HITBYFIRE)
		end		
		
		combat:execute(caster, variant)
		
		addEvent(createSpellExplosion, math.random(1000, 4000), caster:getId(), combat, variant, count - 1)
	
	else
		return true
	end
end

local combat = Combat()
combat:setFormula(COMBAT_FORMULA_DAMAGE, -100, 0, -100, 0)
combat:setArea(createCombatArea(CONST_ME_EXPLOSIONHIT))
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "createSpellExplosion")

function onCastSpell(creature, variant, isHotkey)
	return createSpellExplosion(creature, combat, variant, count)
end

 

Deu errado. 
Se você puder pega a versão tfs1.4.2 da source no github para tentar testar.
Sim pouco depois que enviei a dúvida eu pensei nisso, ela não me acompanha porque ele só registra a posição de quando eu executo a magia. A magia tem que pegar a minha posição toda vez antes do proximo dano.

Segue a explicação de como a spell funciona:
 

function spellCallback(cid, position, count)
  	-- cada vez que a spellcallback é executada, no position vem varias posições aleatorias dentro da area eu executei a magia
	if Creature(cid) then 		
		if count > 0 or math.random(0, 1) == 1 then
      		-- aqui é o efeito e o tipo de dano que vai ser executado nas posições definidas no position  
			position:sendMagicEffect(CONST_ME_HITBYFIRE)		
			doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT) 
		end

		if count < 5 then
			count = count + 1
			addEvent(spellCallback, math.random(1000, 4000), cid, position, count)
		end
	end
end


function onTargetTile(creature, position)
		spellCallback(creature:getId(), position, 0)
end

local combat = Combat()
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
-- CALLBACK_PARAM_TARGETTILE essa função pega alguns sqms aleatorios dentro da area que eu setei no combat:setArea(createCombatArea(AREA_CIRCLE5X5))
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile")



function onCastSpell(creature, variant, isHotkey)
	return combat:execute(creature, variant)
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
Agora, gabrielsaintz disse:

Deu errado. 
Se você puder pega a versão tfs1.4.2 da source no github para tentar testar.
Sim pouco depois que enviei a dúvida eu pensei nisso, ela não me acompanha porque ele só registra a posição de quando eu executo a magia. A magia tem que pegar a minha posição toda vez antes do proximo dano.

Segue a explicação de como a spell funciona:
 

function spellCallback(cid, position, count)
  	-- cada vez que a spellcallback é executada, no position vem varias posições aleatorias dentro da area eu executei a magia
	if Creature(cid) then 		
		if count > 0 or math.random(0, 1) == 1 then
      		-- aqui é o efeito e o tipo de dano que vai ser executado nas posições definidas no position  
			position:sendMagicEffect(CONST_ME_HITBYFIRE)		
			doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT) 
		end

		if count < 5 then
			count = count + 1
			addEvent(spellCallback, math.random(1000, 4000), cid, position, count)
		end
	end
end


function onTargetTile(creature, position)
		spellCallback(creature:getId(), position, 0)
end

local combat = Combat()
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
-- CALLBACK_PARAM_TARGETTILE essa função pega alguns sqms aleatorios dentro da area que eu setei no combat:setArea(createCombatArea(AREA_CIRCLE5X5))
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile")



function onCastSpell(creature, variant, isHotkey)
	return combat:execute(creature, variant)
end

 

 

O que deu errado?

Link para o comentário
Compartilhar em outros sites

  • 0
24 minutos atrás, Yan Oliveira disse:

 

O que deu errado?

Não executou a magia, e acho que ta faltando o then depois do if, adicionei e mesmo assim deu erro.
antes de executar:
image.png.a093b6ee428fb7b8aaba9be5180315ab.png

depois de executar: 
image.thumb.png.bf12eec8e913db55e11713b51f08d48e.png
Acho que deu erro porque a CALLBACK_PARAM_TARGETTILE recebe apenas creature e position como parametro e no seu codigo você passou 4 parametros.

Editado por gabrielsaintz
informações adicionais
Link para o comentário
Compartilhar em outros sites

  • 0
1 hora atrás, gabrielsaintz disse:

Não executou a magia, e acho que ta faltando o then depois do if, adicionei e mesmo assim deu erro.
antes de executar:
image.png.a093b6ee428fb7b8aaba9be5180315ab.png

depois de executar: 
image.thumb.png.bf12eec8e913db55e11713b51f08d48e.png
 

Realmente faltou um "then" após um if e também coloquei a área errada.

 

Substitui o código por:

 

local function createSpellExplosion(creature, combat, variant, count)
	local caster = Creature(creature)
	
	if not caster or combat == nil then
		return true
	end
	
	if count > 0 then
		if count < 5 and (math.random(0, 1) == 0) then
			count = count + 1
		
		else
			combat:execute(caster, variant)
		end		
				
		addEvent(createSpellExplosion, math.random(1000, 4000), caster:getId(), combat, variant, count - 1)
	
	else
		return true
	end
end

local combat = Combat()
combat:setFormula(COMBAT_FORMULA_DAMAGE, -100, 0, -100, 0)
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "createSpellExplosion")

function onCastSpell(creature, variant, isHotkey)
	return createSpellExplosion(creature, combat, variant, count)
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
38 minutos atrás, Yan Oliveira disse:

Realmente faltou um "then" após um if e também coloquei a área errada.

 

Substitui o código por:

 

local function createSpellExplosion(creature, combat, variant, count)
	local caster = Creature(creature)
	
	if not caster or combat == nil then
		return true
	end
	
	if count > 0 then
		if count < 5 and (math.random(0, 1) == 0) then
			count = count + 1
		
		else
			combat:execute(caster, variant)
		end		
				
		addEvent(createSpellExplosion, math.random(1000, 4000), caster:getId(), combat, variant, count - 1)
	
	else
		return true
	end
end

local combat = Combat()
combat:setFormula(COMBAT_FORMULA_DAMAGE, -100, 0, -100, 0)
combat:setArea(createCombatArea(AREA_CIRCLE5X5))
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITBYFIRE)
combat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_EXPLOSIONHIT)
combat:setCallback(CALLBACK_PARAM_TARGETTILE, "createSpellExplosion")

function onCastSpell(creature, variant, isHotkey)
	return createSpellExplosion(creature, combat, variant, count)
end

 


Continua dando erro.

 image.png.e684441a9cf473dbe884ca0f9f690376.png

 

Eu creio que você n pode passar 4 parâmetros para a função combat:setCallback(CALLBACK_PARAM_TARGETTILE, "createSpellExplosion"). Porque a estrutura da CALLBACK_PARAM_TARGETTILE só recebe 2 parâmetros. Você esta passando uma função para ela com 4 parâmetros createSpellExplosion(1-creature, 2-combat, 3-variant, 4-count).

Estrutura da CALLBACK_PARAM_TARGETTILE:
 

void TileCallback::onTileCombat(Creature* creature, Tile* tile) const
{
	//onTileCombat(creature, pos)
	if (!scriptInterface->reserveScriptEnv()) {
		std::cout << "[Error - TileCallback::onTileCombat] Call stack overflow" << std::endl;
		return;
	}

	ScriptEnvironment* env = scriptInterface->getScriptEnv();
	if (!env->setCallbackId(scriptId, scriptInterface)) {
		scriptInterface->resetScriptEnv();
		return;
	}

	lua_State* L = scriptInterface->getLuaState();

	scriptInterface->pushFunction(scriptId);
	if (creature) {
		LuaScriptInterface::pushUserdata<Creature>(L, creature);
		LuaScriptInterface::setCreatureMetatable(L, -1, creature);
	} else {
		lua_pushnil(L);
	}
	LuaScriptInterface::pushPosition(L, tile->getPosition());

	scriptInterface->callFunction(2);
}


Além disso você está usando uma estrutura totalmente diferente, da forma que seu código está, a magia não vai funcionar da forma esperada, pois quero que ela dê hits em posições aleatórias, como no gif de exemplo.
giphy-downsized-large.gif

A magia da hits aleatórios dentro da área CRICLE5X5, porém se eu andar ela não acompanha meu personagem, quero que ela acompanhe meu personagem dando os hits aleatórios.

Eu só preciso de uma forma de pegar a posição do meu personagem atualizada antes de cada repetição. Assim consigo atualizar a area com base na nova posição.

Editado por gabrielsaintz
correção de texto
Link para o comentário
Compartilhar em outros sites

  • 0
52 minutos atrás, gabrielsaintz disse:


Continua dando erro.

 image.png.e684441a9cf473dbe884ca0f9f690376.png

 

Eu creio que você n pode passar 4 parâmetros para a função combat:setCallback(CALLBACK_PARAM_TARGETTILE, "createSpellExplosion"). Porque a estrutura da CALLBACK_PARAM_TARGETTILE só recebe 2 parâmetros. Você esta passando uma função para ela com 4 parâmetros createSpellExplosion(1-creature, 2-combat, 3-variant, 4-count).

Estrutura da CALLBACK_PARAM_TARGETTILE:
 

void TileCallback::onTileCombat(Creature* creature, Tile* tile) const
{
	//onTileCombat(creature, pos)
	if (!scriptInterface->reserveScriptEnv()) {
		std::cout << "[Error - TileCallback::onTileCombat] Call stack overflow" << std::endl;
		return;
	}

	ScriptEnvironment* env = scriptInterface->getScriptEnv();
	if (!env->setCallbackId(scriptId, scriptInterface)) {
		scriptInterface->resetScriptEnv();
		return;
	}

	lua_State* L = scriptInterface->getLuaState();

	scriptInterface->pushFunction(scriptId);
	if (creature) {
		LuaScriptInterface::pushUserdata<Creature>(L, creature);
		LuaScriptInterface::setCreatureMetatable(L, -1, creature);
	} else {
		lua_pushnil(L);
	}
	LuaScriptInterface::pushPosition(L, tile->getPosition());

	scriptInterface->callFunction(2);
}


Além disso você está usando uma estrutura totalmente diferente, da forma que seu código está, a magia não vai funcionar da forma esperada, pois quero que ela dê hits em posições aleatórias, como no gif de exemplo.
giphy-downsized-large.gif

A magia da hits aleatórios dentro da área CRICLE5X5, porém se eu andar ela não acompanha meu personagem, quero que ela acompanhe meu personagem dando os hits aleatórios.

Eu só preciso de uma forma de pegar a posição do meu personagem atualizada antes de cada repetição. Assim consigo atualizar a area com base na nova posição.

A função setCallback tem dois parâmetros:

 

combat:setCallback(key, function)

 

Mas eu não estou passando quatro parâmetros, estou passando a função createSpellExplosition como parâmetro. No código C++ essa função é um parâmetro.

 

Sobre a forma como quer o script, eu entendi. E no GIF o efeito está saindo em CIRCLE 5X5 de forma aleatória, mas está dando dano quando muda a coordenada? Ou só está dando dano na primeira posição que a spell foi executada?

 

Link para o comentário
Compartilhar em outros sites

  • 0
12 horas atrás, Yan Oliveira disse:

A função setCallback tem dois parâmetros:

 

combat:setCallback(key, function)

 

Mas eu não estou passando quatro parâmetros, estou passando a função createSpellExplosition como parâmetro. No código C++ essa função é um parâmetro.

 

Sobre a forma como quer o script, eu entendi. E no GIF o efeito está saindo em CIRCLE 5X5 de forma aleatória, mas está dando dano quando muda a coordenada? Ou só está dando dano na primeira posição que a spell foi executada?

 

depois que eu casto, ela fica batendo aleatoriamente no local onde castei. Meu objetivo é fazer ela me seguir depois que eu castar, os hits ficar aleatorio em volta do meu char.

giphy.gif

Editado por gabrielsaintz
Link para o comentário
Compartilhar em outros sites

  • 0

@gabrielsaintz

local function spellCallback(cid, position, count)
local creature = Creature(cid)
if creature then
if count > 0 or math.random(0, 1) == 1 then
position:sendMagicEffect(CONST_ME_HITBYFIRE)
doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT)
end
if count < 5 then
count = count + 1
addEvent(spellCallback, math.random(1000, 4000), cid, creature:getPosition(), count)
end
end
end

function onCastSpell(creature, variant, isHotkey)
spellCallback(creature:getId(), creature:getPosition(), 0)
return true
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
19 minutos atrás, GamerGoiano disse:

@gabrielsaintz

local function spellCallback(cid, position, count)
local creature = Creature(cid)
if creature then
if count > 0 or math.random(0, 1) == 1 then
position:sendMagicEffect(CONST_ME_HITBYFIRE)
doAreaCombat(cid, COMBAT_FIREDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT)
end
if count < 5 then
count = count + 1
addEvent(spellCallback, math.random(1000, 4000), cid, creature:getPosition(), count)
end
end
end

function onCastSpell(creature, variant, isHotkey)
spellCallback(creature:getId(), creature:getPosition(), 0)
return true
end

 

Eu tentei dessa forma também, porém não funcionou... Depois de um tempo printando o que vem de informação em cada parte, eu entendi o que é passado no position da combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile").

Explicação:
 

function spellCallback(cid, position, count)
	if Creature(cid) then
			--[[
				TEXTO 3
				
				Sendo executada 4 vezes ao mesmo tempo e passando uma posição diferente a cada execução. 
				Ela gera aquela primeira explosão do exemplo gif.
					
				Perceba que no gif a primeira explosão sai de forma aleatoria e não na AREA_CIRCLE5X5 como uma AOE(exevo gran mas frigo).
				
				Explicação: TEXTO 4
			--]]
		if count > 0 or math.random(0, 1) == 1 then
			--[[
				TEXTO 4

				Esse if torna a primeira explosão aleatoria pois ele só executa a doAreaCombat se o math.random(0, 1) for igual a 1,
				assim fazendo com q, mesmo ela sendo executada varias vezes ao mesmo tempo, ele só dispara o dano e o efeito quando
				ela entrar aqui, nesse if.
				
				Caso eu mude esse if para:

				if count >= 0 then

				Ai sim ela vai excutar na AREA_CIRCLE5X5 completa...

				EXPLICAÇÃO BASEADA NO GIF.

			--]]
			position:sendMagicEffect(CONST_ME_MORTAREA)
			doAreaCombat(cid, COMBAT_DEATHDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT)
		end

		if count < 3 then -- QUANTIDADE DE VEZES
			count = count + 1
			--[[
				TEXTO 5

				Aqui é gerado os hits aletorios depois da primeira execução. me baseando na area que eu passei
				com 4 posições de hit, a partir o momento em que você usar a magia esse addEvent será executado
				4 vezes ao mesmo tempo e passando uma posição diferente a cada execução.

				Porém como da pra ver a baixo no delay usamos tempo aleatorio que é dado pelo math.random(1000, 4000).
				Isso gera um loop de hits aleatorios dentro da area setada, até que o count chegue ao valor desejado.

				No caso desse código ele vai ser executado até que o count seja 3, isso faz com que a função spellCallback
				seja executada 20 vezes passando as mesmas posições dentro da area passada no inicio, porém o que torna 
				aleatorio onde vai o efeito e dano é justamente o tempo em que ela vai ser executada.

			--]]
			 
			addEvent(spellCallback, math.random(1000, 4000), cid, position, count)
		end
	end
end

function onTargetTile(creature, position)
	--[[ 
		TEXTO 2

		Aqui recebemos o creature e position da combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile").
		
		creature = seu personagem
		position = {
			{0,1,0}, execução 1 
			{1,3,0}, execução 2 e 3
			{0,1,0}  execução 4
		}
		
		Sendo assim ele vai executar a função spellCallback 4 vezes, e cada vez que for executada ela vai passar 
		uma posição diferente, dentro da area que eu passei.		
	--]]

	spellCallback(creature:getId(), position, 0)
end

local combat = Combat()
combat:setArea(createCombatArea(AREA_CIRCLE5X5))

combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") 
--[[
	TEXTO 1

	A CALLBACK_PARAM_TARGETTILE vai executar a onTargetTile varias vezes, isso depende
 	do tamanho da área que você passou na combat:setArea(createCombatArea(AREA_CIRCLE5X5)).
	
	Exemplo:
	
	Se ao invés de AREA_CIRCLE5X5 eu passar uma área menor como:

	local area {
		{0,1,0}, <- 1 = posição de dano #1
		{1,3,0}, <- 1,3 = posição de dano #2 e #3
		{0,1,0}  <- 1 = posição de dano #4
	}
	combat:setArea(createCombatArea(area))

	Ela vai ser executada 4 vezes ao mesmo tempo porque na area que eu passei existem 4 posições de dano. 
	A cada vez que ela executar ela vai passar as areas, uma de cada vez, sendo #1, #2, #3 e por ultimo #4.
--]] 


function onCastSpell(creature, variant, isHotkey)
	return combat:execute(creature, variant)
end

 

Então não adianta eu pegar o position  assim creature:getPosition() porque a position é a posição onde vai hit se eu usar a posição do meu personagem o hit vai sempre nele mesmo...

 

Espero que consiga entender, dei meu maximo na explicação...😅


Para resolver o problema, eu preciso arrumar uma forma de pegar uma posição aleatoria com base na posição do meu personagem toda vez antes de executar a spellCallback.

Link para o comentário
Compartilhar em outros sites

  • 0

Não entendi como não deu certo ai, sendo que usei o script do Poison Gás do Vileplume, que causa dano em area e vai acompanhando o personagem que deu cast kkk
Acabei de testar meu código aqui e deu certo

function spellCallback(cid, centerPos, count)
    if Creature(cid) then
        local area = combat:getArea()
        local radius = (area:getWidth() - 1) / 2 -- raio do círculo dentro da área
        local randomPos = centerPos:getPosRandomPos(radius) -- posição aleatória dentro do círculo
        
        -- restante da função
        if count > 0 or math.random(0, 1) == 1 then
            -- restante do if
        end
        if count < 3 then
            count = count + 1
            addEvent(spellCallback, math.random(1000, 4000), cid, centerPos, count)
        end
    end
end

 

Link para o comentário
Compartilhar em outros sites

  • 0
2 horas atrás, GamerGoiano disse:

Não entendi como não deu certo ai, sendo que usei o script do Poison Gás do Vileplume, que causa dano em area e vai acompanhando o personagem que deu cast kkk
Acabei de testar meu código aqui e deu certo

function spellCallback(cid, centerPos, count)
    if Creature(cid) then
        local area = combat:getArea()
        local radius = (area:getWidth() - 1) / 2 -- raio do círculo dentro da área
        local randomPos = centerPos:getPosRandomPos(radius) -- posição aleatória dentro do círculo
        
        -- restante da função
        if count > 0 or math.random(0, 1) == 1 then
            -- restante do if
        end
        if count < 3 then
            count = count + 1
            addEvent(spellCallback, math.random(1000, 4000), cid, centerPos, count)
        end
    end
end

 


To usando tfs 1.4.2 10.98. Isso também não funcionou, mas vou tentar fazer algo com base nisso. Aqui ta dando erro nessa getArea(), getWidth() e getPosRandomPos(). Source de pokemon deve ter alterações...

Editado por gabrielsaintz
Link para o comentário
Compartilhar em outros sites

  • 0

Consegui arrumar uma solução!!
Depois de muito tempo fazendo testes cheguei a esse resultado:

 

local combat = Combat()
combat:setArea(createCombatArea(AREA_CIRCLE5X5))

function getRandomPositions(cid)
	local player = Player(cid)
	local playerPos = player:getPosition()	

	local areaCircle5x5 = {} -- cria uma nova AREA_CIRCLE5X5 com base na posição do meu personagem
	for i = -5, 5 do
		for j = -5, 5 do
			local dist = math.sqrt(i^2 + j^2)
			if dist <= 5 then
			table.insert(areaCircle5x5, {x=playerPos.x+i, y=playerPos.y+j, z=playerPos.z})
			end
		end
	end

    local randomPosition = {}
    for i = 1, 1 do 
        local index = math.random(1, #areaCircle5x5)
        table.insert(randomPosition, areaCircle5x5[index])
    end
    return randomPosition
end

function spellCallback(cid, position, count, maxCount)
	if Creature(cid) and count < maxCount then
		if count == 0 and math.random(0, 1) == 1 or math.random(0, 15) == 1 then
			position:sendMagicEffect(CONST_ME_MORTAREA)
			doAreaCombat(cid, COMBAT_DEATHDAMAGE, position, 0, -100, -100, CONST_ME_EXPLOSIONHIT)
		end

		count = count + 1
		
		local area = getRandomPositions(cid) -- pega uma nova posição aleatoria com base na posição do meu personagem
		local positionAreaCircle = {x= area[1].x, y= area[1].y, z= area[1].z}
		local position1 = Position(positionAreaCircle)

		if count > 1 and count < 81 or count > 81 and count < 145 then
			addEvent(spellCallback,50, cid, position1, count, maxCount)			
		else	
			addEvent(spellCallback,math.random(1000, 2000) , cid, position1, count, maxCount)		
		end

		if count > 141 then 			
			addEvent(spellCallback,math.random(600, 3000) , cid, position1, count, maxCount)	
		end
	end
end

function onTargetTile(creature, position)
	local maxCount = 145 -- quantidade de execuções
	spellCallback(creature:getId(), position, 0, maxCount)
end

combat:setCallback(CALLBACK_PARAM_TARGETTILE, "onTargetTile") 

function onCastSpell(creature, variant, isHotkey)
	return combat:execute(creature, variant)
end

 

Dentro do game:

 

giphy.gif

 

@GamerGoiano @Yan Oliveira De qualquer forma, obrigado pela ajuda!

Link para o comentário
Compartilhar em outros sites

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...