• 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 Edit poison arrow poison

dudie

Member
Joined
May 23, 2016
Messages
128
Reaction score
12
I wanted edit poison from poison arrow damage to:

YOURSKILL / 2

For example skills 80... poison = 40

How to make it?

I tried:
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)

local poison_value = getPlayerSkill(cid, SKILL_DISTANCE) / 2 * -1

local condition = createConditionObject(CONDITION_POISON)
setConditionParam(condition, CONDITION_PARAM_DELAYED, 15)
addDamageCondition(condition, 10, 2000, poison_value)
setCombatCondition(combat, condition)

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

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

But i recive this errors:
Code:
[4:0:32.723] [Error - Weapon Interface]
[4:0:32.723] data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua
[4:0:32.723] Description:
[4:0:32.723] (luaGetPlayerSkillLevel) Player not found

[4:0:32.723] [Error - Weapon Interface]
[4:0:32.723] data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua
[4:0:32.724] Description:
[4:0:32.724] ...ons/scripts/distance_weapons/arrows/poison_arrow.lua:6: attempt to perform arithmetic on a boolean value
[4:0:32.724] [Warning - Event::loadScript] Cannot load script (data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua)
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

-- Poison
local combat2 = {}
local poison = {}

for i=0,300 do
    combat2[i] = createCombatObject()

    poison[i] = createConditionObject(CONDITION_POISON)
    poison[i]:setParameter(CONDITION_PARAM_DELAYED, 15)
    addDamageCondition(poison[i], 10, 2000, -(i * 0.5))
    setCombatCondition(combat2[i], poison[i])
end

function onUseWeapon(cid, var)
    local dist = cid:getSkillLevel(SKILL_DISTANCE)
    doCombat(cid, combat2[dist], var) -- applies the poison

    return doCombat(cid, combat, var) -- applies the damage
end
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

-- Poison
local combat2 = {}
local poison = {}

for i=0,300 do
    combat2[i] = createCombatObject()

    poison[i] = createConditionObject(CONDITION_POISON)
    poison[i]:setParameter(CONDITION_PARAM_DELAYED, 15)
    addDamageCondition(poison[i], 10, 2000, -(i * 0.5))
    setCombatCondition(combat2[i], poison[i])
end

function onUseWeapon(cid, var)
    local dist = cid:getSkillLevel(SKILL_DISTANCE)
    doCombat(cid, combat2[dist], var) -- applies the poison

    return doCombat(cid, combat, var) -- applies the damage
end

Why u remove old formula? o_O

Code:
[1:55:12.769] [Error - Weapon Interface]
[1:55:12.769] data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua
[1:55:12.769] Description:
[1:55:12.769] ...ons/scripts/distance_weapons/arrows/poison_arrow.lua:15: attempt to index field '?' (a number value)
[1:55:12.769] [Warning - Event::loadScript] Cannot load script (data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua)

Not work :(
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

-- Poison
local combat2 = {}
local poison = {}

for i=0,300 do
    combat2[i] = createCombatObject()

    poison[i] = createConditionObject(CONDITION_POISON)
    setConditionParam(poison[i], CONDITION_PARAM_DELAYED, 15)
    addDamageCondition(poison[i], 10, 2000, -(i * 0.5))
    setCombatCondition(combat2[i], poison[i])
end

function onUseWeapon(cid, var)
    local dist = cid:getSkillLevel(SKILL_DISTANCE)
    doCombat(cid, combat2[dist], var) -- applies the poison

    return doCombat(cid, combat, var) -- applies the damage
end

Btw, Do you really want the poison to take 15 sec till it starts kicking in?
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

-- Poison
local combat2 = {}
local poison = {}

for i=0,300 do
    combat2[i] = createCombatObject()

    poison[i] = createConditionObject(CONDITION_POISON)
    setConditionParam(poison[i], CONDITION_PARAM_DELAYED, 15)
    addDamageCondition(poison[i], 10, 2000, -(i * 0.5))
    setCombatCondition(combat2[i], poison[i])
end

function onUseWeapon(cid, var)
    local dist = cid:getSkillLevel(SKILL_DISTANCE)
    doCombat(cid, combat2[dist], var) -- applies the poison

    return doCombat(cid, combat, var) -- applies the damage
end

Btw, Do you really want the poison to take 15 sec till it starts kicking in?

yes

Code:
[2:12:46.497] [Error - Weapon Interface]
[2:12:46.497] data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua:onUseWeapon
[2:12:46.497] Description:
[2:12:46.498] ...ons/scripts/distance_weapons/arrows/poison_arrow.lua:21: attempt to index local 'cid' (a number value)
[2:12:46.498] stack traceback:
[2:12:46.498]    ...ons/scripts/distance_weapons/arrows/poison_arrow.lua:21: in function <...ons/scripts/distance_weapons/arrows/poison_arrow.lua:20>

[2:12:48.680] [Error - Weapon Interface]
[2:12:48.680] data/weapons/scripts/distance_weapons/arrows/poison_arrow.lua:onUseWeapon
[2:12:48.680] Description:
[2:12:48.680] ...ons/scripts/distance_weapons/arrows/poison_arrow.lua:21: attempt to index local 'cid' (a number value)
[2:12:48.680] stack traceback:
[2:12:48.680]    ...ons/scripts/distance_weapons/arrows/poison_arrow.lua:21: in function <...ons/scripts/distance_weapons/arrows/poison_arrow.lua:20>
 
try changing:
local dist = cid:getSkillLevel(SKILL_DISTANCE)

to:
local dist = getPlayerSkillLevel(cid, SKILL_DISTANCE)
Ty
its work!

but how to use it and my old formulas?

To damage back to:
Code:
  min = ((damagebase_min) * (attack) * (skill)) * -1
   max = ((damagebase_max) * (attack) * (skill)) * -1
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

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

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

-- Poison
local combat2 = {}
local poison = {}

for i=0,300 do
    combat2[i] = createCombatObject()

    poison[i] = createConditionObject(CONDITION_POISON)
    setConditionParam(poison[i], CONDITION_PARAM_DELAYED, 15)
    addDamageCondition(poison[i], 10, 2000, -(i * 0.5))
    setCombatCondition(combat2[i], poison[i])
end

function onUseWeapon(cid, var)
    local dist = getPlayerSkillLevel(cid, SKILL_DISTANCE)
    doCombat(cid, combat2[dist], var) -- applies the poison

    return doCombat(cid, combat, var) -- applies the damage
end
 
Code:
local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, 1)
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_POISONDAMAGE)
setCombatParam(combat, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_POISONARROW)
setCombatFormula(combat, COMBAT_FORMULA_SKILL, 1, 0, 1, 0)

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

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")

-- Poison
local combat2 = {}
local poison = {}

for i=0,300 do
    combat2[i] = createCombatObject()

    poison[i] = createConditionObject(CONDITION_POISON)
    setConditionParam(poison[i], CONDITION_PARAM_DELAYED, 15)
    addDamageCondition(poison[i], 10, 2000, -(i * 0.5))
    setCombatCondition(combat2[i], poison[i])
end

function onUseWeapon(cid, var)
    local dist = getPlayerSkillLevel(cid, SKILL_DISTANCE)
    doCombat(cid, combat2[dist], var) -- applies the poison

    return doCombat(cid, combat, var) -- applies the damage
end

Ty so much!
 
First time I do something for TFS 0.4. I was using too many functions that were not avaible for that tfs, sorry.

Would be good if you could change the topic to solved and edit the main post with the solution.

You are welcome and good luck. =P
 
Back
Top