• 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 One callback?

Kavalor

(Real)Creator of ChaosOT
Joined
Dec 13, 2007
Messages
272
Reaction score
63
Location
Washington State, USA
It seems to only want to do either the healing or the cures/status fix. Both callbacks never seem to work no matter how I work it around. Anyone? weapon utility and healing

Lua:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)
combat:setParameter(COMBAT_PARAM_EFFECT, 73)

function onGetFormulaValues(player, skill, attack)
local mainskill = player:getSkillLevel(SKILL_CLUB)
    local level = player:getLevel() -- so we still have access to player level
    local magicLevel = player:getMagicLevel() -- so we still have access to player command level
local min = (level * 0.01) + (mainskill * 0.01) + (magicLevel * 0.01) + (attack * 0.1)
    local max = (level * 1.8) + (mainskill * 1.8) + (magicLevel * 1.8) + (attack * 1.8)
    return min, max
end
combat:setCallback(CALLBACK_PARAM_TARGETCREATURE, "onTargetCreature")

function onTargetCreature(creature, target)
    target:removeCondition(CONDITION_POISON)
target:removeCondition(CONDITION_FIRE)
target:removeCondition(CONDITION_ENERGY)
target:removeCondition(CONDITION_BLEEDING)
target:removeCondition(CONDITION_PARALYZE)
target:removeCondition(CONDITION_INFIGHT)
target:removeCondition(CONDITION_DRUNK)
target:removeCondition(CONDITION_EXHAUST_WEAPON)
target:removeCondition(CONDITION_DROWN)
target:removeCondition(CONDITION_MUTED)
target:removeCondition(CONDITION_FREEZING)
target:removeCondition(CONDITION_DAZZLED)
target:removeCondition(CONDITION_CURSED)
target:removeCondition(CONDITION_EXHAUST_COMBAT)
target:removeCondition(CONDITION_EXHAUST_HEAL)
target:removeCondition(CONDITION_PACIFIED)
target:removeCondition(CONDITION_SPELLCOOLDOWN)
target:removeCondition(CONDITION_SPELLGROUPCOOLDOWN)
target:removeCondition(CONDITION_ROOT)
    return true
end
combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")


function onUseWeapon(player, variant)
player:addSkillTries(SKILL_CLUB, 1)
return combat:execute(player, variant)
end
 
Solution
The script is much better and has cleaner syntax... It has been tested...
I was testing the fire condition to see if it was removed.
1717694067344.png

Lua:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)
combat:setParameter(COMBAT_PARAM_EFFECT, 73)

function getHealingFormula(player, level, magLevel)
    local skillLevel = player:getSkillLevel(SKILL_CLUB)
    local min = (level * 0.01) + (skillLevel * 0.01) + (magLevel * 0.01)
    local max = (level * 1.8) + (skillLevel * 1.8) + (magLevel * 1.8)
    return min, max
end

function...
The script is much better and has cleaner syntax... It has been tested...
I was testing the fire condition to see if it was removed.
1717694067344.png

Lua:
local combat = Combat()
combat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
combat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
combat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
combat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)
combat:setParameter(COMBAT_PARAM_EFFECT, 73)

function getHealingFormula(player, level, magLevel)
    local skillLevel = player:getSkillLevel(SKILL_CLUB)
    local min = (level * 0.01) + (skillLevel * 0.01) + (magLevel * 0.01)
    local max = (level * 1.8) + (skillLevel * 1.8) + (magLevel * 1.8)
    return min, max
end

function removeNegativeConditions(creature)
    local conditions = {
        CONDITION_POISON, CONDITION_FIRE, CONDITION_ENERGY,
        CONDITION_BLEEDING, CONDITION_PARALYZE, CONDITION_INFIGHT,
        CONDITION_DRUNK, CONDITION_EXHAUST_WEAPON, CONDITION_DROWN,
        CONDITION_MUTED, CONDITION_FREEZING, CONDITION_DAZZLED,
        CONDITION_CURSED, CONDITION_EXHAUST_COMBAT, CONDITION_EXHAUST_HEAL,
        CONDITION_PACIFIED, CONDITION_SPELLCOOLDOWN, CONDITION_SPELLGROUPCOOLDOWN,
        CONDITION_ROOT
    }

    for _, condition in ipairs(conditions) do
        creature:removeCondition(condition)
    end

    return true
end

combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "getHealingFormula")

function onUseWeapon(player, variant)
    if not player or not variant then
        return false
    end

    local target = Creature(variant:getNumber())
    if not target then
        return false
    end
    
    player:addSkillTries(SKILL_CLUB, 1)

    removeNegativeConditions(target)

    return combat:execute(player, variant)
end
 
Solution
One upgrade - Function as a normal attack if not player so monster I sliced the two variant and player and set them apart and made combat1 and tried to call that for the attack side of it, failed to index combat1 somewhere because it didn't like my method. Can you keep all as is and add attack damage only if the target is an enemy monster?
 
Yeah!

Lua:
-- Healing and removing negative conditions
local healingCombat = Combat()
healingCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
healingCombat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
healingCombat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
healingCombat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)
healingCombat:setParameter(COMBAT_PARAM_EFFECT, 73)

function getHealingFormula(player, level, magLevel)
    local skillLevel = player:getSkillLevel(SKILL_CLUB)
    local min = (level * 0.01) + (skillLevel * 0.01) + (magLevel * 0.01)
    local max = (level * 1.8) + (skillLevel * 1.8) + (magLevel * 1.8)
    return min, max
end

healingCombat:setCallback(CALLBACK_PARAM_SKILLVALUE, "getHealingFormula")

function removeNegativeConditions(creature)
    local conditions = {
        CONDITION_POISON, CONDITION_FIRE, CONDITION_ENERGY,
        CONDITION_BLEEDING, CONDITION_PARALYZE, CONDITION_INFIGHT,
        CONDITION_DRUNK, CONDITION_EXHAUST_WEAPON, CONDITION_DROWN,
        CONDITION_MUTED, CONDITION_FREEZING, CONDITION_DAZZLED,
        CONDITION_CURSED, CONDITION_EXHAUST_COMBAT, CONDITION_EXHAUST_HEAL,
        CONDITION_PACIFIED, CONDITION_SPELLCOOLDOWN, CONDITION_SPELLGROUPCOOLDOWN,
        CONDITION_ROOT
    }

    for _, condition in ipairs(conditions) do
        creature:removeCondition(condition)
    end

    return true
end

-- Monster attack damage
local attackCombat = Combat()
attackCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
attackCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
attackCombat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)

function getAttackFormula(player, level, magLevel)
    local min = level * 0.5 + magLevel * 0.5
    local max = level * 1.5 + magLevel * 1.5
    return min, max
end

attackCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "getAttackFormula")

function onUseWeapon(player, variant)
    if not player or not variant then
        return false
    end

    local target = Creature(variant:getNumber())
    if not target then
        return false
    end

    if target:isPlayer() then
        player:addSkillTries(SKILL_CLUB, 1)
        removeNegativeConditions(target)
        return healingCombat:execute(player, variant)
    else
        return attackCombat:execute(player, variant)
    end
end
 
UNREAL! Coolest weapon ever made for a healer class! :D Thank you
Post automatically merged:

Awww was not getting damage on attacking monster - no errors though
Post automatically merged:

Unsolved mysteries :p
Post automatically merged:

Ok, this was needed for it to work for 1.4.2 tfs -
We needed some minus symbols :D

Lua:
-- Healing and removing negative conditions
local healingCombat = Combat()
healingCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_HEALING)
healingCombat:setParameter(COMBAT_PARAM_TARGETCASTERORTOPMOST, true)
healingCombat:setParameter(COMBAT_PARAM_AGGRESSIVE, false)
healingCombat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)
healingCombat:setParameter(COMBAT_PARAM_EFFECT, 73)

function getHealingFormula(player, level, magLevel)
    local skillLevel = player:getSkillLevel(SKILL_CLUB)
    local min = (level * 0.01) + (skillLevel * 0.01) + (magLevel * 0.01)
    local max = (level * 1.8) + (skillLevel * 1.8) + (magLevel * 1.8)
    return min, max
end

healingCombat:setCallback(CALLBACK_PARAM_SKILLVALUE, "getHealingFormula")

function removeNegativeConditions(creature)
    local conditions = {
        CONDITION_POISON, CONDITION_FIRE, CONDITION_ENERGY,
        CONDITION_BLEEDING, CONDITION_PARALYZE, CONDITION_INFIGHT,
        CONDITION_DRUNK, CONDITION_EXHAUST_WEAPON, CONDITION_DROWN,
        CONDITION_MUTED, CONDITION_FREEZING, CONDITION_DAZZLED,
        CONDITION_CURSED, CONDITION_EXHAUST_COMBAT, CONDITION_EXHAUST_HEAL,
        CONDITION_PACIFIED, CONDITION_SPELLCOOLDOWN, CONDITION_SPELLGROUPCOOLDOWN,
        CONDITION_ROOT
    }

    for _, condition in ipairs(conditions) do
        creature:removeCondition(condition)
    end

    return true
end

-- Monster attack damage
local attackCombat = Combat()
attackCombat:setParameter(COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
attackCombat:setParameter(COMBAT_PARAM_EFFECT, CONST_ME_HITAREA)
attackCombat:setParameter(COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_SMALLICE)

function getAttackFormula(player, level, magLevel)
    local min = level * 0.5 + magLevel * 0.5
    local max = level * 1.5 + magLevel * 1.5
    return -min, -max
end

attackCombat:setCallback(CALLBACK_PARAM_LEVELMAGICVALUE, "getAttackFormula")

function onUseWeapon(player, variant)
    if not player or not variant then
        return false
    end

    local target = Creature(variant:getNumber())
    if not target then
        return false
    end

    if target:isPlayer() then
        player:addSkillTries(SKILL_CLUB, 1)
        removeNegativeConditions(target)
        return healingCombat:execute(player, variant)
    else
        return attackCombat:execute(player, variant)
    end
end
 
Last edited:
Back
Top