ON
spell

Fire Aura

Por Oneshot, 19 de ago. de 2012 em Globalevents e Spells

script
9
2.7k
OneshotO
19 de agosto de 2012 às 09:00

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 Agosto 19 por Oneshot

jhon992J
19 de agosto de 2012 às 10:34

Gostei, ficou show. Rep+

Mais acho que com distance effect ficaria mais legal hem, com aquele foguinho girando em volta. Fica a dica. happy.png

caoticC
19 de agosto de 2012 às 10:42

Achei interessante a duração.

Bem configuravel e funcional

 

Tambem acho que distance effect ficaria foda.

Mais ta excelente.

RaidouR
19 de agosto de 2012 às 10:45

Gostei,nunca vi nada do tipo.

REP++

BloxxB
20 de agosto de 2012 às 19:13

nuss, mto bom cara sua magia...eu nunca vi algo desse jeito tambem, pra mim e inedito! gostei ai manow! Continue Assim!

2 semanas depois...
kbsaoK
31 de agosto de 2012 às 01:35
ph34r.png Legal!
5 meses depois...
TondesT
29 de janeiro de 2013 às 21:52

Oneshot tem coomo transforma essa spell pra mim 8.40 ?'

Editado Janeiro 29 por tondes

1 mês depois...
MeunometemvinteletraM
07 de fevereiro de 2013 às 20:31

Ó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 Fevereiro 7 por Meunometemvinteletra

rohfagundesR
07 de fevereiro de 2013 às 20:34

Ó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 '-'