[Pedido] Rune Que Varia De Acordo Com O Level E Tambem Que Seja Variavel Por Vocação

eduhespanhol
em Lixeira Pública

eduhespanhol

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/08/07Posts: 5

Bom Dia Xtibianos!

 

Venho aqui novamente, pedir um script simples, só que para mim, Bem complicado.

 

Inicialmente, vou colocar, um "Script" que o usuário "Oneshot"(Scripter e tanto), fez para que cada vocação tivesse sua "própria" formula na hora do resultado final, a cura de uma Rune "Ultimate Healing".

 

Aqui vai o Script que ele criou:

 

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) 
setHealingFormula(combat1, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Sorcerers]] 

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) 
setHealingFormula(combat2, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Druids]] 

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) 
setHealingFormula(combat3, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Paladins]] 

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) 
setHealingFormula(combat4, COMBAT_FORMULA_LEVELMAGIC, 5, 5, 10, 12) --[[Fórmula dos Knights]] 

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

 

O que estou pedindo, é que seja, uma base como essa, claro que se alguém tiver uma idéia melhor de como formatar esse "Script" será muito bem vinda, mais a idéia principal é, todas as vocações tenham cálculos diferentes para o resultado final que é o tanto que irão healar e também que o calculo não seja baseado pelo ML(Magic Level) e sim pelo LVL(Level), o Objetivo que gostaria mesmo, seria uma formula, que tivesse, Ml e Lvl os dois como variantes da mesma. Mas se não tiver como, só com o Level estaria muito bom.

 

Agradeço, desde já, a atenção de quem leu o tópico até aqui e obrigado pela atenção. :button_ok:

 

Atenciosamente, Hespanhol.

assinaturax.png

Oneshot

avatar
Marquês
Marquês

INFOS

Grupo: MarquêsRegistrado: 05/07/09Posts: 1347

Olá!

 

Vejamos como fazer esse seu script, como te disse por PM, podemos usar a função onGetFormulaValues para mudar o jeito que a fórmula é calculada, de modo que, teremos algo mais ou menos assim:

 

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) 

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) 

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) 

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)

function onGetFormulaValues_sorcerer(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

function onGetFormulaValues_druid(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

function onGetFormulaValues_paladin(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

function onGetFormulaValues_knight(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_sorcerer")
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_druid")
setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_paladin")
setCombatCallback(combat4, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_knight")

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

 

Creio que assim você pode manipular melhor as fórmulas, o problema é o tamanho do script! ;)

Estou trabalhando em um "sistema avançado de configuração" de magias que, creio eu, compacta o número de linhas em 80%.

eduhespanhol

avatar
Campones
Campones

INFOS

Grupo: CamponesRegistrado: 14/08/07Posts: 5

Olá!

 

Vejamos como fazer esse seu script, como te disse por PM, podemos usar a função onGetFormulaValues para mudar o jeito que a fórmula é calculada, de modo que, teremos algo mais ou menos assim:

 

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) 

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) 

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) 

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)

function onGetFormulaValues_sorcerer(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

function onGetFormulaValues_druid(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

function onGetFormulaValues_paladin(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

function onGetFormulaValues_knight(cid, level, maglevel)
  local x, y = maglevel*3, level/5
  return (x*1.2+y), (x*1.5+y)
end

setCombatCallback(combat1, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_sorcerer")
setCombatCallback(combat2, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_druid")
setCombatCallback(combat3, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_paladin")
setCombatCallback(combat4, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues_knight")

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

 

Creio que assim você pode manipular melhor as fórmulas, o problema é o tamanho do script! ;)

Estou trabalhando em um "sistema avançado de configuração" de magias que, creio eu, compacta o número de linhas em 80%.

 

Boa Noite.

 

Primeiramente, Desculpe-me a demora, não pude acessar o computador por "motivos técnicos". (Não estava ligando por causa da Placa de Video ;P)

 

Simplismente PERFEITO "Oneshot", você conseguiu sanar a dúvida por completo. Meus parabens, por tal habilidade com Script. E quando descobrir o "Sistema avançado de configuração" se possivel, passe para nós do XTibia.

 

E novamente, Muito, mas Muito obrigado mesmo era EXATAMENTE o que estava procurando.

 

Duvida Sanada, Tópico Reportado.

 

Ahh... REP + :button_ok:

 

Atenciosamente, Hespanhol.

assinaturax.png