BF
script

formula spell

Por bfs102030, 08 de jan. de 2016 em Scripts

fprmula spell
dano da spell de acordo
com atk da arma
11
2k
bfs102030B
12 de janeiro de 2016 às 08:04

Ola galera preciso de uma ajudinha ake pois nao achei ake em lugar nenhum algo do tipo

eu tenho 2 spells de knight, mas exori e mas exori hur vou postar ake embaixo elas , mas eu gostaria que elas funcionacem da seguinte forma. quanto maior o ATK da arma mais a spell vai arrancar entendeu.? ex tenho uma arma que atk 70 ae com ela a spell bate x ae coloco uma arma na mao de atk 100 ae a spell vai bater mais entende.

gostaria que a formula delas fosse pelo atk da arma... pois pretendo colocar ICE RAPIER com ATK maior porem quando o player soltar a spell com a ICE RAPIER na mao ela ir ritar e quebrar entende ?

abaixo as 2 spells

mas exori hur

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, 34)
setCombatParam(combat, COMBAT_PARAM_USECHARGES, true)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -21.9, -17, -23.9, -19)
local arr = {
{1, 1, 1},
{1, 1, 1},
{1, 1, 1},
{0, 1, 0},
{0, 3, 0},
{0, 0, 0},
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
function onCastSpell(cid, var)
local storage = 302010
if getPlayerStorageValue(cid, storage) < 1 then
doPlayerSendCancel(cid, "Desculpe, Você tem que Fazer a [The Spells Quest] para usar está magia.")
return false
end
return doCombat(cid, combat, var)
end
mas exori
--Created with OSM--
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE,COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT,CONST_ME_GROUNDSHAKER)
setCombatFormula(combat, COMBAT_FORMULA_LEVELMAGIC, -3.1, -750, 4.1, -1250)
arr = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 3, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
function onCastSpell(cid, var)
return doCombat(cid, combat, var)
end


alguem pode ajudar ?


up

SkullsS
12 de janeiro de 2016 às 13:06

Bom cara, acho que achei uma luz pra você.

Vamos lá:

Antes do local combat, crie uma função

 

function formulaByWeaponDmg(cid, level, skill, attack, p, factor)
min = -(1.2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor)
max = -(2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor)
return min, max
end
Troca a linha do setCombatFormula por:
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "formulaByWeaponDmg")
Pronto, agora ele vai bater baseado no dmg da arma tb. Se você quiser que seja só com base no dmg da arma, mude as fórmulas de min e max a seu gosto (attack é o ataque da arma).
Com relação a ice rapier, dentro de onCastSpell coloque:
if(getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == ID_RAPIER) then
doPlayerRemoveItem(cid, ID_RAPIER, 1)
end

Bom, espero que te ajude. Qualquer coisa me fala.

bfs102030B
16 de janeiro de 2016 às 10:22

amigo desculpa a demora pra responde e pq tive enroladao com outros bugs no server eu coloquei assim olha

 

 

 

function formulaByWeaponDmg(cid, level, skill, attack, p, factor)
min = -(1.2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor)
max = -(2 * (attack * (skill + 5.8) / 25 + (level - 1) / 10) / factor)
return min, max
end
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE,COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT,CONST_ME_GROUNDSHAKER)
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "formulaByWeaponDmg")
arr = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 3, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
function onCastSpell(cid, var)
if(getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == ID_RAPIER) then
doPlayerRemoveItem(cid, ID_RAPIER, 1)
end
return doCombat(cid, combat, var)
end

 

 

 

ae apareceu isso na distro.. sera que eu que juntei os codigos errado.se puder monta-las pra mim certo agradeco as spells estao la emcima as 2

[10:12:52.548] [Error - Spell Interface]
[10:12:52.548] In a callback: data/spells/scripts/pbot/exori rox ek.lua:formulaB
yWeaponDmg
[10:12:52.548] (Unknown script file)
[10:12:52.548] Description:
[10:12:52.548] data/spells/scripts/pbot/exori rox ek.lua:3: attempt to perform a
rithmetic on local 'factor' (a nil value)
edit > aah esquecei de mensionar que esse err aparece quando solta ela e agora nao esta arrancando nada...

Editado Janeiro 16 por bfs102030

SkullsS
16 de janeiro de 2016 às 15:15

Erro meu, no meu servidor tem um bug e o factor eh um parâmetro a mais.

Troca function formulaByWeaponDmg(cid, level, skill, attack, p, factor) por function formulaByWeaponDmg(cid, level, skill, attack, factor)

bfs102030B
16 de janeiro de 2016 às 18:07

funciou certim skulls brigadao.

soo me explica + - como configurar ali, tipo e eu quizer conte mais pro atkda rma onde eu mexo.ou se eu quizer meio a meio seila.

SkullsS
16 de janeiro de 2016 às 18:21

Edita o min e o max do jeito que vc preferir, onde attack eo ataque da arma. So lembra que o valor final tem que ser negativo

bfs102030B
17 de janeiro de 2016 às 07:18

ok brigadao


amigo desculpe mais eu tiinha esquecido e testar a parte da ICE RAPIER e agora que fui ver ela nao esta quebrado ao usar a spell

euadicionei na spell a linha

function onCastSpell(cid, var)

if(getPlayerSlotItem(cid, CONST_SLOT_LEFT).itemid == ID_2396) then
doPlayerRemoveItem(cid, ID_2396, 1)
end
eu tentei tbm mudar ali onde ta ID RAPIER coloquei o id do item porem nao deu de nenhum geito
poderia me ajudar ?
SkullsS
17 de janeiro de 2016 às 18:07

Tenta fazer assim então:

if(getPlayerWeapon(cid).itemid == ID_2396) then
doPlayerRemoveItem(cid, ID_2396, 1)
end
bfs102030B
17 de janeiro de 2016 às 19:33

nao deu agora o scriipt completo fica assim e da um erro na distro esse erro abaxio olha

 

 

 

function formulaByWeaponDmg(cid, level, skill, attack, factor)
min = -(1.2 * (attack * (skill + 5.3) / 10 + (level - 1) / 10) / factor)
max = -(2 * (attack * (skill + 5.3) / 10 + (level - 1) / 10) / factor)
return min, max
end
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE,COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT,CONST_ME_GROUNDSHAKER)
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "formulaByWeaponDmg")
arr = {
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 3, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
}
local area = createCombatArea(arr)
setCombatArea(combat, area)
if(getPlayerWeapon(cid).itemid == ID_2396) then
doPlayerRemoveItem(cid, ID_2396, 1)
end
return doCombat(cid, combat, var)
end

 

 

 

[19:23:41.280] [Error - LuaInterface::loadFile] data/spells/scripts/pbot/exori r
ox ek.lua:33: '<eof>' expected near 'end'
[19:23:41.280] [Warning - Event::loadScript] Cannot load script (data/spells/scr
ipts/pbot/exori rox ek.lua)
[19:23:41.280] data/spells/scripts/pbot/exori rox ek.lua:33: '<eof>' expected ne
ar 'end'
SkullsS
17 de janeiro de 2016 às 19:55

Vc tirou o on cast spell...

bfs102030B
20 de janeiro de 2016 às 00:56

amigo cloquei a parte que eu tinha tirado.agora nao deu erro na ditro mais tbm nao sumiu a ice rapier ao usar a spell


up


up