Ir para conteúdo
  • 0

Ajuda com essa magia por favor, REP+


totonho18

Pergunta

Ta estranho, olha só o tamanho da área da magia, e quando o player usa, não aparece animação nenhuma, só da o dano sem a animação, OBS é uma magia de área tipo um exevo gran mas flam, porém a ideia dessa magia é um monte de assassin stars saírem do corpo do usuário e se espalharem pela área, para vcs terem uma noção exata do que quero que aconteça é spo pegar o God do server de vocês e escrever o comando /x 18 vcs notarão que sairá um monte de assassins dele, ESSA É A IDEIA DESSA MAGIA,mas isso não está acontecendo, alguém por favor pode me ajudar a desvendar esse mistério??? REP+

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_REDSTAR)

function onGetFormulaValues(cid, level, Skill, factor)
damage_min = (Skill * 6 + level * 1.5) * 1
    damage_max = (Skill * 6 + level * 1.5) * 1.2

return - math.max(damage_min, damage_max), - math.min(damage_min, damage_max)
end

combat_arr = {
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
}

local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end 

Dica uma coisa que talvez funcione é criar um evento por fora que gere a animação, pois o dano já funciona certo, só a animação que não aparece, pessoal me ajudem se puder to precisando muito desse script :/ REP+

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

10 respostass a esta questão

Posts Recomendados

  • 0

Cara sensacional, ficou perfeito, aprovado, você é o cara, valeu mesmo, REP+ e pode deixxar que vou estudar seu tutorial agora mesmo.

Ultima pergunta, tem como fazer essa mesma magia porém em estilo meteoro? ou seja a animação "cai do ceu", aplicando o estilo aleatório?

 

Opa, se tiver um efeito de meteoro caindo do céu no ot, da sim. Mas não sei se tem.

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, tem 2 jeitos de fazer: um que fica mais uniforme, a animação é sempre a mesma e outro que é exatamente igual o evento /x 18 (que mand aleatoriamente).

 

Vou colocar os 2 aqui e vc usa o que gostar mais:

 

1. Uniforme

 

 

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

function onGetFormulaValues(cid, level, Skill)
min = -(Skill * 6 + level * 1.5) * 1
max = -(Skill * 6 + level * 1.5) * 1.2

return min, max
end

combat_arr = {
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
}

 

function effect(position)
local range = 5
for x = range*(-1), range do
for j=0, 1 do
local dir = {}
local pos = {x = position.x, y = position.y, z = position.z}
local y = math.ceil(math.sqrt(range^2 - x^2))
dir = {x = position.x + x, y = position.y + (-1 + 2*j)*y, z = position.z}
doSendDistanceShoot(position, dir, CONST_ANI_REDSTAR)
end
end
return true
end

local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)

effect(getCreaturePosition(cid))
return doCombat(cid, combat, var)
end

 

 

 

2. Igual /x (o código do loop utilizado pode ser encontrado também la em talkactions.

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
function onGetFormulaValues(cid, level, Skill)
min = -(Skill * 6 + level * 1.5) * 1
max = -(Skill * 6 + level * 1.5) * 1.2
return min, max
end
combat_arr = {
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
}
function effect(position)
for i = 1, 30 do
doSendDistanceShoot(position, {x = position.x + math.random(-7, 7), y = position.y + math.random(-5, 5), z = position.z}, CONST_ANI_REDSTAR)
end
return true
end
local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
effect(getCreaturePosition(cid))
return doCombat(cid, combat, var)
end

 

 

 

Bom é isso. Vi que você fez algumas coisas que não precisavam na hora de adicionar o callback da sua formula e na propria formula, se quiser dar uma lida no tutorial que fiz sobre formulas e callbacks para entender melhor, fica o link:

http://www.xtibia.com/forum/topic/238759-tutorial-formulas-e-callbacks-das-spells-entendendo-melhor/

 

Abraços, comente se funcionou como desejava.

Link para o comentário
Compartilhar em outros sites

  • 0

Cara sensacional, ficou perfeito, aprovado, você é o cara, valeu mesmo, REP+ e pode deixxar que vou estudar seu tutorial agora mesmo.

Ultima pergunta, tem como fazer essa mesma magia porém em estilo meteoro? ou seja a animação "cai do ceu", aplicando o estilo aleatório?

Link para o comentário
Compartilhar em outros sites

  • 0

Vê se isso resolve seu problema com os meteoros:

 

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
function onGetFormulaValues(cid, level, Skill)
min = -(Skill * 6 + level * 1.5) * 1
max = -(Skill * 6 + level * 1.5) * 1.2
return min, max
end
combat_arr = {
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
}
function effect(position)
for i = 1, 30 do
local pos = {x = position.x + math.random(-math.random(1, 7), math.random(1, 7)),
y = position.y + math.random(-math.random(1, 5), math.random(1, 5)),
z = position.z}
doSendDistanceShoot({x = pos.x - 1, y = pos.y -2, z = pos.z}, pos, CONST_ANI_FIRE)
doSendMagicEffect(pos, CONST_ME_FIREATTACK)
end
return true
end
local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
effect(getCreaturePosition(cid))
return doCombat(cid, combat, var)
end

 

 

Link para o comentário
Compartilhar em outros sites

  • 0

Amigo, tem 2 jeitos de fazer: um que fica mais uniforme, a animação é sempre a mesma e outro que é exatamente igual o evento /x 18 (que mand aleatoriamente).

 

Vou colocar os 2 aqui e vc usa o que gostar mais:

 

1. Uniforme

 

 

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)

 

function onGetFormulaValues(cid, level, Skill)

min = -(Skill * 6 + level * 1.5) * 1

max = -(Skill * 6 + level * 1.5) * 1.2

 

return min, max

end

 

combat_arr = {

{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},

{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},

{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},

{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},

{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},

{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},

{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},

{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},

{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},

{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},

}

 

function effect(position)
local range = 5
for x = range*(-1), range do
for j=0, 1 do
local dir = {}
local pos = {x = position.x, y = position.y, z = position.z}
local y = math.ceil(math.sqrt(range^2 - x^2))
dir = {x = position.x + x, y = position.y + (-1 + 2*j)*y, z = position.z}
doSendDistanceShoot(position, dir, CONST_ANI_REDSTAR)
end
end
return true
end

local combat_area = createCombatArea(combat_arr)

setCombatArea(combat, combat_area)

 

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)

effect(getCreaturePosition(cid))

return doCombat(cid, combat, var)

end

 

 

 

2. Igual /x (o código do loop utilizado pode ser encontrado também la em talkactions.

 

 

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
function onGetFormulaValues(cid, level, Skill)
min = -(Skill * 6 + level * 1.5) * 1
max = -(Skill * 6 + level * 1.5) * 1.2
return min, max
end
combat_arr = {
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
}
function effect(position)
for i = 1, 30 do
doSendDistanceShoot(position, {x = position.x + math.random(-7, 7), y = position.y + math.random(-5, 5), z = position.z}, CONST_ANI_REDSTAR)
end
return true
end
local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
effect(getCreaturePosition(cid))
return doCombat(cid, combat, var)
end

 

 

 

Bom é isso. Vi que você fez algumas coisas que não precisavam na hora de adicionar o callback da sua formula e na propria formula, se quiser dar uma lida no tutorial que fiz sobre formulas e callbacks para entender melhor, fica o link:

http://www.xtibia.com/forum/topic/238759-tutorial-formulas-e-callbacks-das-spells-entendendo-melhor/

 

Abraços, comente se funcionou como desejava.

Man ultimamente tenho visto umas respostas sua em alguns tópicos e todas resolvendo o problema hehe vou te add e mandar uma msgm okay ?

Link para o comentário
Compartilhar em outros sites

  • 0
Em 15/01/2016 em 01:49, samlecter disse:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
 
function onGetFormulaValues(cid, level, Skill)
min = -(Skill * 6 + level * 1.5) * 1
max = -(Skill * 6 + level * 1.5) * 1.2
 
return min, max
end
 
combat_arr = {
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,},
{0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,},
{0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,},
}
 
function effect(position)
for i = 1, 30 do
doSendDistanceShoot(position, {x = position.x + math.random(-7, 7), y = position.y + math.random(-5, 5), z = position.z}, CONST_ANI_REDSTAR)
end
return true
end
 
local combat_area = createCombatArea(combat_arr)
setCombatArea(combat, combat_area)
 
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
function onCastSpell(cid, var)
effect(getCreaturePosition(cid))
return doCombat(cid, combat, var)
end

Tem como fazer soltar 3 hits diferentes?

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...