• There is NO official Otland's Discord server and NO official Otland's server list. The Otland's Staff does not manage any Discord server or server list. Moderators or administrator of any Discord server or server lists have NO connection to the Otland's Staff. Do not get scammed!

Lua [Request] fix my burst arrow damage

dudie

Member
Joined
May 23, 2016
Messages
128
Reaction score
12
Someone could help me to fix my burst arrow damage?

Code:
[17:31:01.655] [Error - Weapon Interface]
[17:31:01.655] In a callback: data/weapons/scripts/burst_arrow.lua:onGetFormulaValues
[17:31:01.656] (Unknown script file)
[17:31:01.656] Description:
[17:31:01.656] data/weapons/scripts/burst_arrow.lua:18: attempt to perform arithmetic on upvalue 'atk' (a nil value)

[17:31:04.120] [Error - Weapon Interface]
[17:31:04.120] In a callback: data/weapons/scripts/burst_arrow.lua:onGetFormulaValues
[17:31:04.120] (Unknown script file)
[17:31:04.120] Description:
[17:31:04.120] data/weapons/scripts/burst_arrow.lua:18: attempt to perform arithmetic on upvalue 'atk' (a nil value)

burst arrow.lua
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

local atk

function onGetFormulaValues(cid, level, skill, attack, factor)
   min = (attack * 10.0) * -1
   max = (attack * 10.0) * -1
   return atk
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onGetFormulaValues(cid, level, maglevel)
   min = ( (((maglevel * 1) * 0.5) + ( atk ) )) * -1
   max = ( (((maglevel * 1) * 1.0) + ( atk ) )) * -1
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea({
   {1, 1, 1},
   {1, 3, 1},
   {1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
   return doCombat(cid, combat, var)
end
 
Someone could help me to fix my burst arrow damage?

Code:
[17:31:01.655] [Error - Weapon Interface]
[17:31:01.655] In a callback: data/weapons/scripts/burst_arrow.lua:onGetFormulaValues
[17:31:01.656] (Unknown script file)
[17:31:01.656] Description:
[17:31:01.656] data/weapons/scripts/burst_arrow.lua:18: attempt to perform arithmetic on upvalue 'atk' (a nil value)

[17:31:04.120] [Error - Weapon Interface]
[17:31:04.120] In a callback: data/weapons/scripts/burst_arrow.lua:onGetFormulaValues
[17:31:04.120] (Unknown script file)
[17:31:04.120] Description:
[17:31:04.120] data/weapons/scripts/burst_arrow.lua:18: attempt to perform arithmetic on upvalue 'atk' (a nil value)

burst arrow.lua
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

local atk

function onGetFormulaValues(cid, level, skill, attack, factor)
   min = (attack * 10.0) * -1
   max = (attack * 10.0) * -1
   return atk
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

function onGetFormulaValues(cid, level, maglevel)
   min = ( (((maglevel * 1) * 0.5) + ( atk ) )) * -1
   max = ( (((maglevel * 1) * 1.0) + ( atk ) )) * -1
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_LEVELMAGICVALUE, "onGetFormulaValues")

local area = createCombatArea({
   {1, 1, 1},
   {1, 3, 1},
   {1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
   return doCombat(cid, combat, var)
end
change atk to attack
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

local magic = getPlayerMagicLevel(cid)

function onGetFormulaValues(cid, level, skill, attack, factor)
min = (attack * 10.0 + magic*1) * -1
max = (attack * 10.0 + magic*1) * -1
return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

local area = createCombatArea({
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
return doCombat(cid, combat, var)
end
 
I tested somemany ways noone work fine

1-
I've tried
Sorcerer (magic level 24)
But damage still: 10
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
   local magic = getPlayerSkill(cid, SKILL_MAGIC)
   min = (magic * 1) * -1
   max = (magic * 1) * -1
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

local area = createCombatArea({
   {1, 1, 1},
   {1, 3, 1},
   {1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
   return doCombat(cid, combat, var)
end

2-
I've tried
Sorcerer (magic level 24)
But damage still: 10
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
   local magic = getPlayerMagicLevel(cid)
   min = (magic * 1) * -1
   max = (magic * 1) * -1
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

local area = createCombatArea({
   {1, 1, 1},
   {1, 3, 1},
   {1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
   return doCombat(cid, combat, var)
end

Error
Code:
[23:28:11.108] [Error - Weapon Interface]
[23:28:11.108] In a callback: data/weapons/scripts/burst_arrow.lua:onGetFormulaValues
[23:28:11.108] (Unknown script file)
[23:28:11.108] Description:
[23:28:11.108] data/weapons/scripts/burst_arrow.lua:9: attempt to call global 'getPlayerMagicLevel' (a nil value)
 
Attack didn't work too

3- I tried
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
   --local magic = getPlayerMagicLevel(cid)
   --local magic = getPlayerSkill(cid, SKILL_MAGIC)
   min = (attack * 1) * -1
   max = (attack * 1) * -1
   return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

local area = createCombatArea({
   {1, 1, 1},
   {1, 3, 1},
   {1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
   return doCombat(cid, combat, var)
end

Normal bow:
Code:
23:33 You see a bow (Range:6, Atk +1).
It weighs 31.00 oz.

No damage

Edited bow:
Code:
23:34 You see a +3 bow (Range:6, Atk +10).
It weighs 31.00 oz.

No damage

(no erros on sources)
 
Oh ty, now magic thing is working... But why attack not work?


Edit: Burst arrow is going normal... But when attack rotworm, not remove life, dont show no one number and dont remove life
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
local magic = getPlayerMagLevel(cid)
local atk = x --Change 'x' to the attack of your bow.

min = (atk * 1 + magic * 1) * -1
max = (atk * 1 + magic * 1) * -1
return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

local area = createCombatArea({
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
return doCombat(cid, combat, var)
end
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

function onGetFormulaValues(cid, level, skill, attack, factor)
local magic = getPlayerMagLevel(cid)
local atk = x --Change 'x' to the attack of your bow.

min = (atk * 1 + magic * 1) * -1
max = (atk * 1 + magic * 1) * -1
return min, max
end
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

local area = createCombatArea({
{1, 1, 1},
{1, 3, 1},
{1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
return doCombat(cid, combat, var)
end


I need get value to bow equiped
 
I don't know of any way to do that, unless you're using some sort of upgrade system that you need to get the attack of bow at all times, it won't matter.
Just insert the value of the attack of your bow into the script and it will work the same way.
 
I found this from awhile ago.. It uses the attack damage of the weapon and distance skill.
Not sure how you'll add magic level though.
Might have to create two different combats, like you attempted before.
https://otland.net/threads/burst-arrows.4723/
Code:
function onGetPlayerMinMaxValues(cid, weaponSkill, weaponAttack, attackStrength)
    local attack = 28
    local skill = getPlayerSkill(cid, CONST_SKILL_DISTANCE)
    local level = getPlayerLevel(cid)
    local damage = (attack / 20 * skill * 2 + attack + level / 10) / 10 * 1

    return 0, damage
end

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetPlayerMinMaxValues")

local area = createCombatArea( { {1, 1, 1}, {1, 3, 1}, {1, 1, 1} } )
setCombatArea(combat, area)

function onUseWeapon(cid, var)
    return doCombat(cid, combat, var)
end
 
@Xikini whats wrong with getting player magic lvl from cid?
most likely nothing.
I'm posting inbetween calls at work. rofl.
update the function above with this.
Or change the formula.. to whatever. xD
Code:
function onGetPlayerMinMaxValues(cid, weaponSkill, weaponAttack, attackStrength)
    local attack = 28
    local skill = getPlayerSkill(cid, CONST_SKILL_DISTANCE)
    local level = getPlayerLevel(cid)
    local magic = getPlayerMagLevel(cid)
    local damage = (attack / 20 * (skill + magic) * 2 + attack + level / 10) / 10 * 1

    return 0, damage
end
 
I tried
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 0)
setCombatParam(combat, COMBAT_PARAM_BLOCKSHIELD, 0)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_EFFECT, CONST_ME_FIREAREA)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_BURSTARROW)

function onGetPlayerMinMaxValues(cid, weaponSkill, weaponAttack, attackStrength)
   --local magic = getPlayerMagLevel(cid)
   --min = (magic * 1) * -1
   --max = (magic * 1) * -1
   min = (weaponAttack * 1) * -1
   max = (weaponAttack * 1) * -1
  return min, max
end

local area = createCombatArea({
   {1, 1, 1},
   {1, 3, 1},
   {1, 1, 1}
})

setCombatArea(combat, area)

function onUseWeapon(cid, var)
   return doCombat(cid, combat, var)
end

And no damage too :(
 
You don't have
Code:
setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetPlayerMinMaxValues")
in your script.
 
Back
Top