• 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!

Solved Multi element wand with attack

demon088

#088 in the Horde
Joined
Jun 17, 2009
Messages
250
Solutions
3
Reaction score
30
Location
Hell
Hello Otland!
I have this weapon actually working, but I want to make it different. Take a look on this code:
Code:
-- Wand/Rod Multi-Elements. -- by leyendario.
local config = {
        min1 = 0.5, 
        min2 = 1, 
        max1 = 1, 
        max2 = 1 
        }
local fisico = createCombatObject() -- 1
setCombatParam(fisico, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(fisico, COMBAT_PARAM_EFFECT, 5)
setCombatParam(fisico, COMBAT_PARAM_DISTANCEEFFECT, 27)
setCombatFormula(fisico, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)

local energy = createCombatObject() -- 2
setCombatParam(energy, COMBAT_PARAM_TYPE, COMBAT_ENERGYDAMAGE)
setCombatParam(energy, COMBAT_PARAM_EFFECT, CONST_ME_ENERGYHIT)
setCombatParam(energy, COMBAT_PARAM_DISTANCEEFFECT, CONST_ANI_ENERGYBALL)
setCombatFormula(energy, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)

local tierra = createCombatObject() -- 3
setCombatParam(tierra, COMBAT_PARAM_TYPE, COMBAT_EARTHDAMAGE)
setCombatParam(tierra, COMBAT_PARAM_EFFECT, 46)
setCombatParam(tierra, COMBAT_PARAM_DISTANCEEFFECT, 30)
setCombatFormula(tierra, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)

local fuego = createCombatObject() -- 4
setCombatParam(fuego, COMBAT_PARAM_TYPE, COMBAT_FIREDAMAGE)
setCombatParam(fuego, COMBAT_PARAM_EFFECT, 6)
setCombatParam(fuego, COMBAT_PARAM_DISTANCEEFFECT, 4)
setCombatFormula(fuego, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)

local hielo = createCombatObject()  -- 5
setCombatParam(hielo, COMBAT_PARAM_TYPE, COMBAT_ICEDAMAGE)
setCombatParam(hielo, COMBAT_PARAM_EFFECT, 43)
setCombatParam(hielo, COMBAT_PARAM_DISTANCEEFFECT, 29)
setCombatFormula(hielo, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)

local holy = createCombatObject()  -- 6
setCombatParam(holy, COMBAT_PARAM_TYPE, COMBAT_HOLYDAMAGE)
setCombatParam(holy, COMBAT_PARAM_EFFECT, 40)
setCombatParam(holy, COMBAT_PARAM_DISTANCEEFFECT, 38)
setCombatFormula(holy, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)

local death = createCombatObject()  -- 7
setCombatParam(death, COMBAT_PARAM_TYPE, COMBAT_DEATHDAMAGE)
setCombatParam(death, COMBAT_PARAM_EFFECT, 39)
setCombatParam(death, COMBAT_PARAM_DISTANCEEFFECT, 11)
setCombatFormula(death, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)
local storage = 6999
function onUseWeapon(cid, var)
    local valor = getPlayerStorageValue(cid, storage)
    doCombat(cid, valor == 2 and energy or valor == 3 and tierra or valor == 4 and fuego or valor == 5 and hielo or valor == 6 and holy or valor == 7 and death or fisico, var)
    return true
end
Ok, I want to change this line:
Code:
setCombatFormula(death, COMBAT_FORMULA_LEVELMAGIC, -config.min1, -config.min2, -config.max1, -config.max2)
... to something like this:
Code:
function onGetFormulaValues(player, level, maglevel, attack, factor)
    local min = (attack + 53) + (maglevel + 32) 
    local max = (attack + 57) + (maglevel + 37)
    return -min, -max
end
combat:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")
I'm using tfs 1.2. I want this is because I'm using attack and defense in my wands and rods and I need this script to work with attack (from weapon), magic lvl and level from player. I've been trying this for hours and I can't build this kind of script... I'd be thankful if someone can help with this mess. Thanks for your time!
 
I used that script from @strutZ, but I edited a few things:
Action:
Code:
-- Config

-- Set wand how the wand deals damage
DamageTypeWand = {
    values = false, -- If this is set to true then it will use the min and max values. If set to false the wand will use the formula
  
    -- Damage Values min/max
    wandMinDam = 20,
    wandMaxDam = 50,
  
    -- Damage Formula
    formula = {
        wandMinDam = function(maglevel, attack) return -(attack * 4.35 + (maglevel * 2.65) + 350) end,
        wandMaxDam = function(maglevel, attack) return -(attack * 4.93 + (maglevel * 3.05) + 550) end,
    }
}

-- Modal window config and storage id
local config = {
    storage = "10009",
    titleMsg = "Change Weapon Damage Type",
    mainMsg = "Choose a damage type from the list",
-- End Config

    -- Damage Table
    [1] = {element = "Holy"},
    [2] = {element = "Fire"},
    [3] = {element = "Death"},
    [4] = {element = "Poison"},
    [5] = {element = "Energy"},
    [6] = {element = "Earth"},
    [7] = {element = "Ice"},
}

function onUse(player, item, fromPosition, itemEx, toPosition, isHotkey)
    player:sendDamageWindow(config)
    return true
end

weapons:
Code:
local DamageTypes = {
    [1] = {DamageType = COMBAT_HOLYDAMAGE, DamageEffect = CONST_ANI_HOLY},
    [2] = {DamageType = COMBAT_FIREDAMAGE, DamageEffect = CONST_ANI_FIRE},
    [3] = {DamageType = COMBAT_DEATHDAMAGE, DamageEffect = CONST_ANI_DEATH},
    [4] = {DamageType = COMBAT_POISONDAMAGE, DamageEffect = CONST_ANI_POISON},
    [5] = {DamageType = COMBAT_ENERGYDAMAGE, DamageEffect = CONST_ANI_ENERGY},
    [6] = {DamageType = COMBAT_EARTHDAMAGE, DamageEffect = CONST_ANI_EARTH},
    [7] = {DamageType = COMBAT_ICEDAMAGE, DamageEffect = CONST_ANI_ICE}
}

function onGetFormulaValues(player, level, maglevel)
    if DamageTypeWand.values == true then
        min = -(DamageTypeWand.wandMinDam)
        max = -(DamageTypeWand.wandMaxDam)
    else
        min = DamageTypeWand.formula.wandMinDam(level, maglevel, attack)
        max = DamageTypeWand.formula.wandMaxDam(level, maglevel, attack)
    end
    return min, max
end

local combat = {}
for k, dam_Table in pairs(DamageTypes) do
    combat[k] = Combat()
    combat[k]:setParameter(COMBAT_PARAM_BLOCKARMOR, 1)
    combat[k]:setParameter(COMBAT_PARAM_BLOCKSHIELD, 1)
    combat[k]:setParameter(COMBAT_PARAM_TYPE, dam_Table.DamageType)
    combat[k]:setParameter(COMBAT_PARAM_DISTANCEEFFECT, dam_Table.DamageEffect)
  
    -- _G Is used to manually define 'onGetFormulaValues' in this loop in doesnt seem to be able to find the function.
    _G['onGetFormulaValues' .. k] = onGetFormulaValues
    combat[k]:setCallback(CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues" .. k)
end

function onUseWeapon(player, var)
    local value = player:getStorageValue(10009)
    local combatUse = combat[value]
    if not combatUse then
        return true
    end
    return combatUse:execute(player, var)
end

And now my wand deals damage with attack and maglevel and for sure you can change the element of the damage. You NEED to add the modal window to change the element.
Thanks for the help. I share this in case someone need it.
See you!
 
Back
Top