DE

Ajuda Com "isinarray" Em Uma Spell

Por DemonKorg, 20 de jul. de 2010 em Archived

script
10
2k
DemonKorgD
20 de julho de 2010 às 17:02

Peguei esse script com o Oneshot, ele me ajudou em outro tópico, porém ao testar percebi que não funciona...

Ele deveria analisar a vocação do player e, de acordo com a vocação, executar uma fórmula.

 

Porém o que acontece é que ele usa sempre a primeira fórmula, sendo knight, paladin, ou sorcerer.

 

Aí o script.

 

Gostaria que alguém me mostrasse aonde está o erro.

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat1, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos Sorcerers]]

function onGetFormulaValues(cid, level, maglevel)
local min = 100
local max = 101
return min, max

end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat2, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat2, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat2, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos druids]]

function onGetFormulaValues(cid, level, maglevel)
local min = ((level*1)+(maglevel*6))
local max = ((level*1)+(maglevel*7))
return min, max

end

setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat3, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat3, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos paladins]]

function onGetFormulaValues(cid, level, maglevel)
local min = ((level*10)+(maglevel*(25/10)))
local max = ((level*10)+(maglevel*3))
return min, max

end

setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat4, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat4, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat4, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos knights]]


function onGetFormulaValues(cid, level, maglevel)
local min = ((level*5)+(maglevel*40))
local max = ((level*5)+(maglevel*50))
return min, max

end

setCombatCallback(combat4, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
       if isInArray({1, 5}, getPlayerVocation(cid)) then
               return doCombat(cid, combat1, var)
       elseif isInArray({2, 6}, getPlayerVocation(cid)) then
               return doCombat(cid, combat2, var)
       elseif isInArray({3, 7}, getPlayerVocation(cid)) then
               return doCombat(cid, combat3, var)
       elseif isInArray({4, 8}, getPlayerVocation(cid)) then
               return doCombat(cid, combat4, var)
       end
end

OneshotO
20 de julho de 2010 às 17:31

Isso porque você criou as funções que retornam dano com o mesmo nome, todas elas.

Tente criar essa função com um número na frente, igual você faz com as variáveis de combate,

 

Veja o script abaixo que eu consertei e tente entender,

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat1, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos Sorcerers]]

function onGetFormulaValues1(cid, level, maglevel)
       local min = 100
       local max = 101
       return min, max

end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues1")

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat2, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat2, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat2, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos druids]]

function onGetFormulaValues2(cid, level, maglevel)
       local min = ((level*1)+(maglevel*6))
       local max = ((level*1)+(maglevel*7))
       return min, max

end

setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues2")

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat3, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat3, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos paladins]]

function onGetFormulaValues3(cid, level, maglevel)
       local min = ((level*10)+(maglevel*(25/10)))
       local max = ((level*10)+(maglevel*3))
       return min, max

end

setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues3")

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat4, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat4, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat4, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos knights]]


function onGetFormulaValues4(cid, level, maglevel)
       local min = ((level*5)+(maglevel*40))
       local max = ((level*5)+(maglevel*50))
       return min, max

end

setCombatCallback(combat4, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues4")

function onCastSpell(cid, var)
       if isInArray({1, 5}, getPlayerVocation(cid)) then
               return doCombat(cid, combat1, var)
       elseif isInArray({2, 6}, getPlayerVocation(cid)) then
               return doCombat(cid, combat2, var)
       elseif isInArray({3, 7}, getPlayerVocation(cid)) then
               return doCombat(cid, combat3, var)
       elseif isInArray({4, 8}, getPlayerVocation(cid)) then
               return doCombat(cid, combat4, var)
       end
end

 

Teste e reporte no tópico o funcionamento ;D

Editado Julho 20 por Oneshot

DemonKorgD
20 de julho de 2010 às 17:38

Continua com o mesmo problema =/

 

Todas vocações healam 100, a primeira opção, ressaltando que 100 não seria o número que vou utilizar, é apenas simbólico pra verificação.

 

Qualquer vocação de qual eu use uma UH vai pro combat1.

 

Mais alguma idéia?

Editado Julho 20 por DemonKorg

OneshotO
20 de julho de 2010 às 17:48
local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat1, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat1, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat1, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos Sorcerers]]

function onGetFormulaValues1(cid, level, maglevel)
       local min = 100
       local max = 101
       return min, max

end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues1")

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat2, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat2, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat2, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos druids]]

function onGetFormulaValues2(cid, level, maglevel)
       local min = ((level*1)+(maglevel*6))
       local max = ((level*1)+(maglevel*7))
       return min, max

end

setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues2")

local combat3 = createCombatObject()
setCombatParam(combat3, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat3, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat3, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat3, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat3, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos paladins]]

function onGetFormulaValues3(cid, level, maglevel)
       local min = ((level*10)+(maglevel*(25/10)))
       local max = ((level*10)+(maglevel*3))
       return min, max

end

setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues3")

local combat4 = createCombatObject()
setCombatParam(combat4, COMBAT_PARAM_TYPE, COMBAT_HEALING)
setCombatParam(combat4, COMBAT_PARAM_EFFECT, CONST_ME_MAGIC_BLUE)
setCombatParam(combat4, COMBAT_PARAM_AGGRESSIVE, FALSE)
setCombatParam(combat4, COMBAT_PARAM_TARGETCASTERORTOPMOST, TRUE)
setCombatParam(combat4, COMBAT_PARAM_DISPEL, CONDITION_PARALYZE) --[[Fórmula dos knights]]


function onGetFormulaValues4(cid, level, maglevel)
       local min = ((level*5)+(maglevel*40))
       local max = ((level*5)+(maglevel*50))
       return min, max

end

setCombatCallback(combat4, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues4")

function onCastSpell(cid, var)
       if isInArray({1, 5}, getPlayerVocation(cid)) then
              doCombat(cid, combat1, var)
       elseif isInArray({2, 6}, getPlayerVocation(cid)) then
              doCombat(cid, combat2, var)
       elseif isInArray({3, 7}, getPlayerVocation(cid)) then
              doCombat(cid, combat3, var)
       elseif isInArray({4, 8}, getPlayerVocation(cid)) then
              doCombat(cid, combat4, var)
       end
       return true
end

DemonKorgD
20 de julho de 2010 às 17:54

Putz, sinto muito em ter que responder de forma negativa denovo, mas não deu certo.

 

Testei com druid, sorcerer, paladin e knight, todos healando 100...

 

Posso contar com sua boa vontade denovo? x.x

OneshotO
20 de julho de 2010 às 17:59

Você está dando /reload spells antes de testar, né?

DemonKorgD
20 de julho de 2010 às 18:00

Sim sim, obrigado por lembrar, mas sim.

 

Cheguei até a fechar e abrir o server pra verificar... x.x

Editado Julho 20 por DemonKorg

OneshotO
20 de julho de 2010 às 18:39

Muito estranho, rapaz.

Acabei de abrir um servidor de testes para ver seu script e ele está funcionando perfeitamente.

 

Um "heal" diferente para cada vocação.

VodkartV
20 de julho de 2010 às 18:39

Olá eu testei o script e a runa heala de acordo com a vocação.

 

aqui funciono perfeitamente...

 

 

Demon sugiro que você refaça todos os passos

 

abraços

DemonKorgD
20 de julho de 2010 às 18:42

Bem, diante disso só posso entender que o problema está comigo e não com seu script, vou tentar arrumar e se conseguir te mando uma pm, só pra avisar e talz, mas por enquanto nada mesmo :/ to travando meu projeto por causa disso .-.

 

Muito obrigado Oneshot e Vodkart por verificarem, certamente acharei o problema!

 

Tem alguma chance de ser por causa do meu servidor?

Editado Julho 20 por DemonKorg