Ir para conteúdo

Fire Aura


Oneshot

Posts Recomendados

Nome: Fire Aura

Autor: Oneshot

Tipo: Magia

 


 

Faz tempo que eu não faço magias, então eu resolvi escrever qualquer coisa e deu nisso, uma aura que fica circundando o jogador por X tempo causando dano.

 


Crie um arquivo chamado fire aura.lua, e coloque o conteúdo abaixo:

 


local offsets = {
[0] = {{0, 0}, {1, 0}, {1, 1}, {1, 2}, {0, 2}, {-1, 2}, {-1, 1}, {-1, 0}},
[1] = {{0, 0}, {0, 1}, {-1, 1}, {-2, 1}, {-2, 0}, {-2, -1}, {-1, -1}, {0, -1}},
[2] = {{0, 0}, {-1, 0}, {-1, -1}, {-1, -2}, {0, -2}, {1, -2}, {1, -1}, {1, 0}},
[3] = {{0, 0}, {0, -1}, {1, -1}, {2, -1}, {2, 0}, {2, 1}, {1, 1}, {0, 1}}
}

local storage = 88888

local k = 1

local duration = 30

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 10, 10, 2.4, 2.4)

function onCastAura(cid, lastDirection)
local position = getPositionByDirection(getThingPosition(cid), lastDirection, 1)
local offset = offsets[lastDirection][(k > #offsets[lastDirection] and ((k % #offsets[lastDirection]) == 0 and #offsets[lastDirection] or (k % #offsets[lastDirection])) or k)]
local tmp = {x = position.x + offset[1], y = position.y + offset[2], z = position.z}
doCombat(cid, combat, positionToVariant(tmp))
doCreatureSetLookDirection(cid, lastDirection)
if os.time() < getCreatureStorage(cid, storage) then
	addEvent(onCastAura, 100, cid, getCreatureLookDirection(cid))
else
	doPlayerSendTextMessage(cid, MESSAGE_STATUS_DEFAULT, "Aura effect ended.")
	mayNotMove(cid, false)
end
k = k + 1
end

function onCastSpell(cid, var)
doCreatureSetStorage(cid, storage, os.time() + duration)
mayNotMove(cid, true)
onCastAura(cid, getCreatureLookDirection(cid))
return true
end

 

No spells.xml, adicione uma linha:

 

<instant name="Fire Aura" words="fire aura" lvl="100" mana="550" needlearn="0" event="script" value="fire aura.lua"/>

 

A magia tem uma duração de 30 segundos, porém essa duração é configurável. Como ainda não criei uma lógica relacionando o movimento do jogador com a aura, então resolvi travar o movimento do jogador enquanto a magia é executada.

 

Abaixo a demonstração em GIF dela.

 

IM3kG.gif

 

O script está bem pogado, talvez eu consiga entender melhor o padrão e melhorar a construção do código.

 

Mude aqui efeito e tipo de dano se quiser, para criar outras auras:

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 10, 10, 2.4, 2.4)

 


 

Abraços.

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

  • 2 weeks later...
  • 4 months later...
  • 2 weeks later...

Ótimo sistema! REP+

Perguntinha... Se eu tentar mudar o sistema pra fazer outros tipos de Aura vai funcionar? Exemplo:

 

Trocar essa parte:

 

 

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)

 

Por essa:

 

 

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, 1)

 

 

Ou seja, mudar o Effect da spell, dos quais são vistos pelo /x, /y e /z

 

-------------------------------------------------------------------------------------------------------------

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

Ótimo sistema! REP+

Perguntinha... Se eu tentar mudar o sistema pra fazer outros tipos de Aura vai funcionar? Exemplo:

 

Trocar essa parte:

 

 

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREATTACK)

 

Por essa:

 

 

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)

setCombatParam(combat, COMBAT_PARAM_EFFECT, 1)

 

 

Ou seja, mudar o Effect do item, dos quais são vistos pelo /x, /y e /z

 

 

cara se vc mudar só o effect n tem problema nenhum '-'

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...