Ir para conteúdo
  • Cadastre-se

(Resolvido)Como entender o Script de Spells?


Ir para solução Resolvido por Cat,

Posts Recomendados

Bom galera, to precisando muito da ajuda de vocês, e prometo dar rep para aqueles que me ajudarem!!

Bom, nos meus scripts, eu queria saber como que funciona a linha do Dano;

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -26, 49, -30, 49)

Esses números, o que fazem? Qual é a definição exata deles? porque eu gostaria de saber qual interage com o ML, com o Level, para poder calcular um Dano EXATO da Magia.

 

 Ou seria melhor ainda se vocês pudessem "transgredir" esse Script;

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -26, 49, -30, 49)
 
local distanceCombat = createCombatObject()
setCombatParam(distanceCombat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(distanceCombat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(distanceCombat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(distanceCombat, COMBAT_FORMULA_LEVELMAGIC, -26, 49, -30, 49)
 
function onCastSpell(cid, var)
        if(variantToNumber(var) ~= 0) then
                return doCombat(cid, distanceCombat, var)
        end
        return doCombat(cid, combat, var)
end

 
Para aqueles Scripts que utilizam a forma;

(getPlayerMagLevel(cid) * 9 + getPlayerLevel(cid) * 1.54), (getPlayerMagLevel(cid) * 10 + getPlayerLevel(cid) * 1.65)

Para criar o dano, porque com esses eu sei me virar um pouco...
Obrigado pessoal, REP mais por semanas pra quem me ajudar *-*
E se puder, dá uma olhada no meu outro tópico...

Alguém ajuda, please! :/


Gente, ajuda por favor D=!

Link para o post
Compartilhar em outros sites

Tem esse tuto do Strikes

História: 
Você está criando um feitiço e quando você verificar em sua lua * BOOM * você verá o seguinte: 
 
setCombatFormula (combate, COMBAT_FORMULA_LEVELMAGIC, -1.0, -900, -3.2, -1100) 
 
ou 
 
setCombatFormula (combate, COMBAT_FORMULA_SKILL, 1.0, -900, 3.2, -1100) 
 
E você não tem idéia do que diabos são esses números. 
 
Bem, eu vou explicar. 
 
 
1.0, -900, 3.2, -1100) 
O primeiro número é o multiplicador da sua habilidade (Se for definido para COMBAT_FORMULAT_LEVELMAGIC, então ele vai ser baseado de nível de magia, se definido como habilidade, então a sua habilidade corpo a corpo principal terá sobre os outros) 
 
O segundo número é o dano mínimo (Se você quer fazer um feitiço de cura, remova a - () símbolo negativo da segunda e quarta números) 
 
O terceiro número é o multiplicador do seu nível de personagem. 
 
O quarto número é o dano máximo (Leia o parêntese do segundo conjunto de números) 
 
Agora, há uma diferença entre habilidade e LEVELMAGIC fórmulas. 
 
Se você quer que eles para causar dano e não curar cada um tem uma configuração diferente. 
 
 
COMBAT_FORMULA_SKILL, 1,0, -100, 1.0, -200) 
Causará dano 
 
 
COMBAT_FORMULA_SKILL, -1.0, -100, -1.0, -200) 
VAI CURAR O INIMIGO SE VOCÊ É DE ALTO NÍVEL ou ter um nível de habilidade ALTA 
 
 
COMBAT_FORMULA_SKILL, -1.0, 100, -1.0, 200) 
Vai curar o inimigo 
 
 
COMBAT_FORMULA_LEVELMAGIC, 1,0, -100, 1.0, -200) 
VAI CURAR O INIMIGO SE VOCÊ É de alto nível ou ter um nível de MAGIC ALTA 
Nota: Irá causar dano, se você é baixo nível e ter um nível de magia baixo desde mínimo e máximo dano são negativos 
 
 
COMBAT_FORMULA_LEVELMAGIC, -1.0, -100, -1.0, -200) 
Vai lidar completamente danos ao inimigo 
 
 
COMBAT_FORMULA_LEVELMAGIC, 1,0, 100, 1,0, 200) 
Vai curar o inimigo. 
 
 
Então, sim, eu acho que você obtê-lo como habilidade e LEVELMAGIC funciona agora. 
 
Agora vamos fazer alguns cálculos sobre a forma como os multiplicadores somam o dano máximo e mínimo. 
 
Suponha que você tenha o seguinte: 
 
COMBAT_FORMULA_LEVELMAGIC, -1.0, -100, -1.0, -200) 
E você é um personagem de nível 100 com 100 Magic level 
 
em primeiro lugar no nível 0 você lidaria 100 ~ 200 de dano. 
Agora no nível 100 com 100 Magic level você gostaria de acrescentar-se o primeiro eo terceiro valor (100 +100), que é 200, e, em seguida, adicioná-lo até o mínimo eo dano máximo 
 
Que será de 300 ~ 400 de dano no nível 100 com 100 magic level. 
 
Então, sempre somar o primeiro eo terceiro valor, e eles adicioná-lo a ambos os valores mínimos e máximos (o segundo e quarto). 
 
 
Espero que este guia de ajuda que vocês fazem feitiços equilibradas =].

Link para o post
Compartilhar em outros sites

 

Tem esse tuto do Strikes

História: 
Você está criando um feitiço e quando você verificar em sua lua * BOOM * você verá o seguinte: 
 
setCombatFormula (combate, COMBAT_FORMULA_LEVELMAGIC, -1.0, -900, -3.2, -1100) 
 
ou 
 
setCombatFormula (combate, COMBAT_FORMULA_SKILL, 1.0, -900, 3.2, -1100) 
 
E você não tem idéia do que diabos são esses números. 
 
Bem, eu vou explicar. 
 
 
1.0, -900, 3.2, -1100) 
O primeiro número é o multiplicador da sua habilidade (Se for definido para COMBAT_FORMULAT_LEVELMAGIC, então ele vai ser baseado de nível de magia, se definido como habilidade, então a sua habilidade corpo a corpo principal terá sobre os outros) 
 
O segundo número é o dano mínimo (Se você quer fazer um feitiço de cura, remova a - () símbolo negativo da segunda e quarta números) 
 
O terceiro número é o multiplicador do seu nível de personagem. 
 
O quarto número é o dano máximo (Leia o parêntese do segundo conjunto de números) 
 
Agora, há uma diferença entre habilidade e LEVELMAGIC fórmulas. 
 
Se você quer que eles para causar dano e não curar cada um tem uma configuração diferente. 
 
 
COMBAT_FORMULA_SKILL, 1,0, -100, 1.0, -200) 
Causará dano 
 
 
COMBAT_FORMULA_SKILL, -1.0, -100, -1.0, -200) 
VAI CURAR O INIMIGO SE VOCÊ É DE ALTO NÍVEL ou ter um nível de habilidade ALTA 
 
 
COMBAT_FORMULA_SKILL, -1.0, 100, -1.0, 200) 
Vai curar o inimigo 
 
 
COMBAT_FORMULA_LEVELMAGIC, 1,0, -100, 1.0, -200) 
VAI CURAR O INIMIGO SE VOCÊ É de alto nível ou ter um nível de MAGIC ALTA 
Nota: Irá causar dano, se você é baixo nível e ter um nível de magia baixo desde mínimo e máximo dano são negativos 
 
 
COMBAT_FORMULA_LEVELMAGIC, -1.0, -100, -1.0, -200) 
Vai lidar completamente danos ao inimigo 
 
 
COMBAT_FORMULA_LEVELMAGIC, 1,0, 100, 1,0, 200) 
Vai curar o inimigo. 
 
 
Então, sim, eu acho que você obtê-lo como habilidade e LEVELMAGIC funciona agora. 
 
Agora vamos fazer alguns cálculos sobre a forma como os multiplicadores somam o dano máximo e mínimo. 
 
Suponha que você tenha o seguinte: 
 
COMBAT_FORMULA_LEVELMAGIC, -1.0, -100, -1.0, -200) 
E você é um personagem de nível 100 com 100 Magic level 
 
em primeiro lugar no nível 0 você lidaria 100 ~ 200 de dano. 
Agora no nível 100 com 100 Magic level você gostaria de acrescentar-se o primeiro eo terceiro valor (100 +100), que é 200, e, em seguida, adicioná-lo até o mínimo eo dano máximo 
 
Que será de 300 ~ 400 de dano no nível 100 com 100 magic level. 
 
Então, sempre somar o primeiro eo terceiro valor, e eles adicioná-lo a ambos os valores mínimos e máximos (o segundo e quarto). 
 
 
Espero que este guia de ajuda que vocês fazem feitiços equilibradas =].

 

Cara!!!

Rep + por 1 semana, procurei demais por uma explicação assim, e agora consegui!

Muito, MUITO obrigado.

Pode me fazer um último favor?

Gostaria que essa magia de Target, desse 2 HIts, tipo um no Instant 0, e outro no Instant 400, mas com Ataques diferentes (ou seja, uma formula pra cada hit, pra eu editar depois).

Se conseguir, rep+ por 2 '*-*

local combat = createCombatObject()

setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SUDDENDEATH)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)
 
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end

Link para o post
Compartilhar em outros sites
  • Solução


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)

local area = createCombatArea(AREA_CROSS1X1)
setCombatArea(combat, area)

local t = {
repeatTimes = 2,
delay = 400, -- miliseconds
typeWeapon = 0 -- WEAPON_NONE = 0, WEAPON_SWORD = 1, WEAPON_CLUB = 2, WEAPON_AXE = 3, WEAPON_DIST = 4, WEAPON_SHIELD = 5, WEAPON_FIST = 6, WEAPON_WAND = 7, WEAPON_AMMO = 8
}

function onCastSpell(cid, var)
local weapon = getPlayerWeapon(cid, true)
if(getItemInfo(weapon.itemid).weaponType == t.typeWeapon) then
for i = 0, t.repeatTimes - 1 do
addEvent(doCombat, t.delay * i, cid, combat, var)
end
else
doPlayerSendCancel(cid, "Você deve equipar uma arma para isso.")
end
end
<instant name="X" words="X" range="1" needtarget="1" exhaustion="2000" event="script" value="NOME.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
</instant>

Seria isso?

 

edit~~

 

agora li direito, eu achei esse script que parece ter o que tu quer, mas não sei se funciona:

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_DOUBLEIMPACT)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_CRYSTALARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
min = -(skill + attack + (level * 2))
max = -(skill + attack + (level * 2.2))
    return min, max
end

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_DOUBLEIMPACT)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_CRYSTALARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
min = -(skill + attack + (level * 2))
max = -(skill + attack + (level * 2.2))
    return min, max
end


local function onCastSpell1(cid, var)
doCombat(cid, combat1, var)
end

local function onCastSpell2(cid, var)
doCombat(cid, combat2, var)
end

setCombatCallback(combat1, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
setCombatCallback(combat2, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
addEvent(onCastSpell1, 0, cid, var)
addEvent(onCastSpell2, 100, cid, var)
end

Link para o post
Compartilhar em outros sites


local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_MORTAREA)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -10, -1, -20, 5, 5, 1.4, 2.1)

local area = createCombatArea(AREA_CROSS1X1)
setCombatArea(combat, area)

local t = {
repeatTimes = 2,
delay = 400, -- miliseconds
typeWeapon = 0 -- WEAPON_NONE = 0, WEAPON_SWORD = 1, WEAPON_CLUB = 2, WEAPON_AXE = 3, WEAPON_DIST = 4, WEAPON_SHIELD = 5, WEAPON_FIST = 6, WEAPON_WAND = 7, WEAPON_AMMO = 8
}

function onCastSpell(cid, var)
local weapon = getPlayerWeapon(cid, true)
if(getItemInfo(weapon.itemid).weaponType == t.typeWeapon) then
for i = 0, t.repeatTimes - 1 do
addEvent(doCombat, t.delay * i, cid, combat, var)
end
else
doPlayerSendCancel(cid, "Você deve equipar uma arma para isso.")
end
end
<instant name="X" words="X" range="1" needtarget="1" exhaustion="2000" event="script" value="NOME.lua">
<vocation id="1"/>
<vocation id="2"/>
<vocation id="3"/>
<vocation id="4"/>
</instant>

Seria isso?

 

edit~~

 

agora li direito, eu achei esse script que parece ter o que tu quer, mas não sei se funciona:

 

local combat1 = createCombatObject()
setCombatParam(combat1, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat1, COMBAT_PARAM_EFFECT, CONST_ME_DOUBLEIMPACT)
setCombatParam(combat1, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_CRYSTALARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
min = -(skill + attack + (level * 2))
max = -(skill + attack + (level * 2.2))
    return min, max
end

local combat2 = createCombatObject()
setCombatParam(combat2, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat2, COMBAT_PARAM_EFFECT, CONST_ME_DOUBLEIMPACT)
setCombatParam(combat2, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_CRYSTALARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
min = -(skill + attack + (level * 2))
max = -(skill + attack + (level * 2.2))
    return min, max
end


local function onCastSpell1(cid, var)
doCombat(cid, combat1, var)
end

local function onCastSpell2(cid, var)
doCombat(cid, combat2, var)
end

setCombatCallback(combat1, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
setCombatCallback(combat2, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onCastSpell(cid, var)
addEvent(onCastSpell1, 0, cid, var)
addEvent(onCastSpell2, 100, cid, var)
end

Tá dando só um hit

e o erro;

"(unknown script file)

Description:

Attempt to call a nil value"

Link para o post
Compartilhar em outros sites

no segundo? o segundo eu não achei a resolução, mas pode servir de base pra fazer do seu jeito. Eu não sou scripter, não sei concertar, mas ajudo como consigo :)

Sim, sim, entendi.

última dúvida!

Eu tentei ajustar a spell da forma que mostra no tutorial.

Pensa comigo.

Mage level 1000, ML 100.

Em uma magia vamos supor que eu queira dar um hit na variável de 6.1~6.2k.

Eu colocaria

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -20, -100, -4, -200)

Teoricamente seria isso? não?

Então eu tentei com essa linha;

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -20, -100, -4, -200)

 

E os hits variam de 1.4k a 7.5k

lOl

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

Não faz sentido cara :(

Se o segundo e o quarto valor são as variáveis, se os dois fossem iguais os danos seriam sempre os mesmos, certo?

então eu coloquei.

setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -1, -100, -1, -100)

 

 

Variável de 100 à 100.

lvl 1000 vezes -1 = -1000

ML 100 . -1 = -100

-1100 + a variável que é -100

ou seja, com essa Fórmula no level 1000 ML 100, o dano deveria ser de 1200, e tá batendo 519 fixo.

Editado por The Evil Wish (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Eu receio que sim, prefiro testar no server do que interpretar hahaah

Fiquei confuso com essa explicação:

Então, sempre somar o primeiro e o terceiro valor, e eles adicioná-lo a ambos os valores mínimos e máximos (o segundo e quarto). 
Link para o post
Compartilhar em outros sites

 

Eu receio que sim, prefiro testar no server do que interpretar hahaah

Fiquei confuso com essa explicação:

Então, sempre somar o primeiro e o terceiro valor, e eles adicioná-lo a ambos os valores mínimos e máximos (o segundo e quarto). 

Então como eu vou conseguir calcular isso?

É impossivel cara uhASDHUSD

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo