Ir para conteúdo
  • Cadastre-se

Posts Recomendados

10 minutos atrás, xWhiteWolf disse:

tenta assim amigo:
 

  Ocultar conteúdo


local config = {
velocidade = 350, -- intervalo entre os giros (quanto menor, mais rapido)
hits = 24, -- quantos hits vai dar
msg = "Frozen Orb", -- msg ao soltar a spell
key = 13871, -- storage que sera utilizado pro cooldown
cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro.
effect1 = 36, -- efeito de distancia que vai ficar rodando
effect2 = 56, -- efeito no sqm do item
effect3 = 37, -- efeito ao castar a spell
effect4 = 43 -- efeito ao acertar a roda no player
}
--[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro.
Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 
8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]]

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 255)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)
function onTargetCreature(cid, target)
   doSendMagicEffect(getCreaturePosition(target), config.effect4)
end
setCombatCallback(combat, 4, "onTargetCreature")

local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function initEffect(position)
	for i = 0, 3 do
		local pos = {x = position.x, y = position.y, z = position.z}
		local dir = getPosByDir(pos, i)
		doSendDistanceShoot(position, dir, config.effect1)
	end
addEvent(doSendMagicEffect, 300, position, config.effect2)
return true
end

function middleEffect(cid, param, position, lim, count)
n = count or 0
	if isCreature(cid) and n < lim then
		local position = getCreaturePosition(cid)
		for i = 0, 3 do
			local pos = {x = position.x, y = position.y, z = position.z}
			local pos2 = {x = position.x, y = position.y, z = position.z}
			local dir = getPosByDir(pos, i)
			local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
			doSendDistanceShoot(dir, dir2, config.effect1)
		end
		doCombat(cid, combat, param)
		addEvent(middleEffect, config.velocidade, cid, param, position, lim, n + 1)
	end
return true
end

function endEffect(position)
	local position = getCreaturePosition(cid)
	for i = 0, 3 do
		local pos = {x = position.x, y = position.y, z = position.z}
		local dir = getPosByDir(pos, i)
		doSendDistanceShoot(dir, position, config.effect1)
	end
return true
end

function onCastSpell(cid, var)
if getPlayerStorageValue(cid, config.key) - os.time() <= 0 then
	setPlayerStorageValue(cid, config.key, os.time() + config.cooldown)
	local position = getCreaturePosition(cid)
	doCreatureSay(cid, config.msg, 20)
	addEvent(endEffect, 8.55 * 1000, position)
	doSendMagicEffect(position, config.effect3)
	initEffect(position)
	addEvent(middleEffect, 200, cid, var, position, config.hits)
else
	doPlayerSendCancel(cid, "You're exhausted.")
	return false
end
return true
end

 

 

Sensacional mano!!!

 

Fiz umas modificações no meu:

 

local config = {
velocidade = 300, -- intervalo entre os giros (quanto menor, mais rapido)
hits = 10, -- quantos hits vai dar
msg = "Cyclone", -- msg ao soltar a spell
key = 13871, -- storage que sera utilizado pro cooldown
cooldown = 3, -- tempo em segundos de cooldown entre um uso da spell e outro.
effect1 = 24, -- efeito de distancia que vai ficar rodando
effect2 = 9, -- efeito no sqm do item
effect3 = 34, -- efeito ao castar a spell
effect4 = 13 -- efeito ao acertar a roda no player
}
--[[Note que a velocidade multiplicada pelo numero de hits deve dar algo proximo de 8550 pra que a magia nao fique ruim ou um efeito acabe antes do outro.
Nos valores que eu utilizei eles dao 8400, oque ja eh considerado perto pois temos 200 milisegundos iniciais, 
8550 eh o tempo que o item sera removido e coincide com o tempo de duracao do efeito 56 (config.effect2)]]

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, 255)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 10, 5, 10, 5)
function onTargetCreature(cid, target)
   doSendMagicEffect(getCreaturePosition(target), config.effect4)
end
setCombatCallback(combat, 4, "onTargetCreature")

local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}

local area = createCombatArea(arr)
setCombatArea(combat, area)

function initEffect(position)
    for i = 0, 3 do
        local pos = {x = position.x, y = position.y, z = position.z}
        local dir = getPosByDir(pos, i)
        doSendDistanceShoot(position, dir, config.effect1)
    end
addEvent(doSendMagicEffect, 300, position, config.effect2)
return true
end

function middleEffect(cid, param, position, lim, count)
n = count or 0
    if isCreature(cid) and n < lim then
        local position = getCreaturePosition(cid)
        for i = 0, 3 do
            local pos = {x = position.x, y = position.y, z = position.z}
            local pos2 = {x = position.x, y = position.y, z = position.z}
            local dir = getPosByDir(pos, i)
            local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
            doSendDistanceShoot(dir, dir2, config.effect1)
        end
        doCombat(cid, combat, param)
        addEvent(middleEffect, config.velocidade, cid, param, position, lim, n + 1)
    end
return true
end

function endEffect(position)
    local position = getCreaturePosition(cid)
    for i = 0, 3 do
        local pos = {x = position.x, y = position.y, z = position.z}
        local dir = getPosByDir(pos, i)
        doSendDistanceShoot(dir, position, config.effect1)
    end
return true
end

function onCastSpell(cid, var)
if getPlayerStorageValue(cid, config.key) - os.time() <= 0 then
    setPlayerStorageValue(cid, config.key, os.time() + config.cooldown)
    local position = getCreaturePosition(cid)
    doCreatureSay(cid, config.msg, 20)
    addEvent(endEffect, 8.55 * 1000, position)
    doSendMagicEffect(position, config.effect3)
    initEffect(position)
    addEvent(middleEffect, 200, cid, var, position, config.hits)
else
    doPlayerSendCancel(cid, "You're exhausted.")
    return false
end
return true
end

 

--Queria sabe se é possivel aumenta +1sqm cada lado, tentei aqui e não consegui, fica a mesma coisa...

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

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Eai meus queridos colegas do Tibia King, hoje vim trazer uma spell que um amigo egípcio (sim, você leu certo) pediu pra mim fazer pra ele. Sei que eu ando meio ausente mas é que a faculdade está realm

Escreve local na frente de cada função e copia pros outros scripts que deve resolver.

^nao, é ao castar.. se quiser colocar uma perda de mana por segundo dá pra adicionar ali no middleEfect uma função de remover mana por cada rodada, considerando que a rodada é a cada 0,35 segundos vc

o primeiro passo é aumentar a area que a spell acerta:

local arr = {
{1, 1, 1},
{1, 3, 1}, -- area que vai acertar a spell enquanto estiver rodando
{1, 1, 1},
}

O dano da spell só depende dessa area, todo o resto é só efeito.

Pra modificar os efeitos vc precisa modificar 3 funções: a init, a middle e a end effect.


function initEffect(position)
    for i = 0, 3 do
        local pos = {x = position.x, y = position.y, z = position.z}
        local dir = getPosByDir(pos, i)
        doSendDistanceShoot(position, dir, config.effect1)
    end
addEvent(doSendMagicEffect, 300, position, config.effect2)
return true
end

function middleEffect(cid, param, position, lim, count)
n = count or 0
    if isCreature(cid) and n < lim then
        local position = getCreaturePosition(cid)
        for i = 0, 3 do
            local pos = {x = position.x, y = position.y, z = position.z}
            local pos2 = {x = position.x, y = position.y, z = position.z}
            local dir = getPosByDir(pos, i)
            local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0)
            doSendDistanceShoot(dir, dir2, config.effect1)
        end
        doCombat(cid, combat, param)
        addEvent(middleEffect, config.velocidade, cid, param, position, lim, n + 1)
    end
return true
end

function endEffect(position)
    local position = getCreaturePosition(cid)
    for i = 0, 3 do
        local pos = {x = position.x, y = position.y, z = position.z}
        local dir = getPosByDir(pos, i)
        doSendDistanceShoot(dir, position, config.effect1)
    end
return true
end



tenta entender como elas funcionam, vai debugando o código na sua cabeça ou num papel pra entender o que cada função faz e como ela faz isso. Mas basicamente a primeira função solta 1 efeito até cada sqm norte, sul, leste e oeste. A segunda fica fazendo o efeito de ir de uma quina a outra e a terceira faz o contrário da primeira pra voltar o efeito e dar a sensação de que a magia saiu, ficou rodando e voltou...

Com esse entendimento e percebendo como cada for atua pra soltar esses efeitos você consegue editar pra aumentar a area;
Pra primeira função e a ultima função, tudo que vc precisa fazer é adicionar +1 sqm nessa função aqui:
 local dir = getPosByDir(pos, i)

essa função tem 3 parametros, sendo o terceiro opcional:
1- a posição
2- a direção
3- a distancia.
pos é a posição e i é a direção, pra aumentar em +1 sqm temos que modificar isso para usar o terceiro parametro:
 local dir = getPosByDir(pos, i, 2)

O processo é semelhante para a função middle, com a diferença de que ela utiliza duas posições ao invés de somente uma.
            local dir = getPosByDir(pos, i, 2)
            local dir2 = getPosByDir(pos2, i + 1 <= 3 and i + 1 or 0, 2)

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites
  • 2 years later...

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.


×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo