• 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 TFS 1.2 Attributes dsn't work/ how to add attributes

nevereq

Member
Joined
Apr 16, 2011
Messages
51
Reaction score
5
Hello! I want to add Upgrade System to my server but its look like attributes dsn't work. I tried to find some script which can add attributes for this version of TFS but i cant... Maybe someone has the same problem with this and knows how to do it?
I want to edit this script(enchanting by rubys):
and make it work like upgrade stone: attack +1/skill +1
can someone help me with this?
Code:
General

local config = {
    manaCost = 300,
    soulCost = 2,
}

local spheres = {
    [7759] = {3, 7},
    [7760] = {1, 5},
    [7761] = {2, 6},
    [7762] = {4, 8}
}

local enchantableGems = {2147, 2146, 2149, 2150}
local enchantableItems = {2383, 7383, 7384, 7406, 7402, 2429, 2430, 7389, 7380, 2454, 2423, 2445, 7415, 7392, 2391, 2544, 8905}

local enchantingAltars = {
    {7504, 7505, 7506, 7507},
    {7508, 7509, 7510, 7511},
    {7516, 7517, 7518, 7519},
    {7512, 7513, 7514, 7515}
}

local enchantedGems = {7760, 7759, 7761, 7762}
local enchantedItems = {
    [2383] = {7744, 7763, 7854, 7869},
    [7383] = {7745, 7764, 7855, 7870},
    [7384] = {7746, 7765, 7856, 7871},
    [7406] = {7747, 7766, 7857, 7872},
    [7402] = {7748, 7767, 7858, 7873},
    [2429] = {7749, 7768, 7859, 7874},
    [2430] = {7750, 7769, 7860, 7875},
    [7389] = {7751, 7770, 7861, 7876},
    [7380] = {7752, 7771, 7862, 7877},
    [2454] = {7753, 7772, 7863, 7878},
    [2423] = {7754, 7773, 7864, 7879},
    [2445] = {7755, 7774, 7865, 7880},
    [7415] = {7756, 7775, 7866, 7881},
    [7392] = {7757, 7776, 7867, 7882},
    [2391] = {7758, 7777, 7868, 7883},
    [2544] = {7840, 7839, 7850, 7838},
    [8905] = {8906, 8907, 8909, 8908}
}

function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    if isInArray({33268, 33269}, toPosition.x) and toPosition.y == 31830 and toPosition.z == 10 and player:getStorageValue(Storage.ElementalSphere.QuestLine) > 0 then
        if not isInArray(spheres[item.itemid], player:getVocation():getId()) then
            return false
        elseif isInArray({7915, 7916}, target.itemid) then
            player:say('Turn off the machine first.', TALKTYPE_MONSTER_SAY)
            return true
        else
            player:setStorageValue(Storage.ElementalSphere.MachineGemCount, math.max(1, player:getStorageValue(Storage.ElementalSphere.MachineGemCount) + 1))
            toPosition:sendMagicEffect(CONST_ME_PURPLEENERGY)
            item:transform(item.itemid, item.type - 1)
            return true
        end
    end

    if item.itemid == 2147 and target.itemid == 2342 then
        target:transform(2343)
        target:decay()
        item:remove(1)
        toPosition:sendMagicEffect(CONST_ME_MAGIC_RED)
        return true
    end

    if item.itemid == 7760 and isInArray({9934, 10022}, target.itemid) then
        target:transform(9933)
        item:remove(1)
        toPosition:sendMagicEffect(CONST_ME_MAGIC_RED)
        return true
    end

    if isInArray(enchantableGems, item.itemid) then
        local subtype = item.type
        if subtype == 0 then
            subtype = 1
        end

        local mana = config.manaCost * subtype
        if player:getMana() < mana then
            player:say('Not enough mana, separate one gem in your backpack and try again.', TALKTYPE_MONSTER_SAY)
            return false
        end

        local soul = config.soulCost * subtype
        if player:getSoul() < soul then
            player:sendCancelMessage(RETURNVALUE_NOTENOUGHSOUL)
            return false
        end

        local targetId = table.find(enchantableGems, item.itemid)
        if not targetId or not isInArray(enchantingAltars[targetId], target.itemid) then
            return false
        end

        player:addMana(-mana)
        player:addSoul(-soul)
        item:transform(enchantedGems[targetId])
        player:addManaSpent(mana * configManager.getNumber(configKeys.RATE_MAGIC))
        player:getPosition():sendMagicEffect(CONST_ME_HOLYDAMAGE)
        return true
    end

    if item.itemid == 7761 and isInArray({9949, 9954}, target.itemid) then
        target:transform(target.itemid - 1)
        target:decay()
        item:remove(1)
        toPosition:sendMagicEffect(CONST_ME_MAGIC_GREEN)
        return true
    end

    if isInArray(enchantedGems, item.itemid) then
        if not isInArray(enchantableItems, target.itemid) then
            fromPosition:sendMagicEffect(CONST_ME_POFF)
            return false
        end

        local targetId = table.find(enchantedGems, item.itemid)
        if not targetId then
            return false
        end

        local subtype = target.type
        if not isInArray({2544, 8905}, target.itemid) then
            subtype = 1000
        end

        target:transform(enchantedItems[target.itemid][targetId], subtype)
        target:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
        item:remove(1)
        return true
    end
    return false
end

code

item should not take mana or soul, just simple use on item and stone desapear.
 
Last edited:
Wouldnt be able to know without seeing your script. Im running OTX 3.0 (which uses a lot of tfs 1.2+ features) and the attributes work on mine. So i would say post your script first.
 
You need to add event to movements.xml

if lets say you add attributes to a random helmet in items.xml

XML:
    <item id="2342" article="a" name="helmet of the ancients">
       <attribute key="description" value="The gem of the helmet is burned out and should be replaced." />
       <attribute key="weight" value="2760" />
       <attribute key="armor" value="8" />
       <attribute key="slotType" value="head" />
       <attribute key="absorbPercentPhysical" value="1" />
       <attribute key="absorbPercentMagic" value="1" />
       <attribute key="showattributes" value="1" />
   </item>
to apply those attributes you need to create event where player equips item and takes it off. The new values are applied after player equips item.

ex.
XML:
<movevent event="Equip" itemid="2342" slot="head" function="onEquipItem"/>
   <movevent event="DeEquip" itemid="2342" slot="head" function="onDeEquipItem"/>

The added attributes won't work otherwise.
 
Last edited:
Code:
General
function doSetItemText(uid, text)
    local item = Item(uid)
    if item == nil then
        return false
    end

    if text ~= "" then
        item:setAttribute(ITEM_ATTRIBUTE_TEXT, text)
    else
        item:removeAttribute(ITEM_ATTRIBUTE_TEXT)
    end
    return true
end

code

Its from my compat.lua need something which can get item attribute ATTACK and add another +1 to attack, and script to item like "id:2400" which can get amount of attack of (example : magic long sword 55atk) and set 56atk on use on this sword.
 
Lua:
local attack = item:hasAttribute(ITEM_ATTRIBUTE_ATTACK) and item:getAttribute(ITEM_ATTRIBUTE_ATTACK) or item:getType():getAttack()
item:setAttribute(ITEM_ATTRIBUTE_ATTACK, attack + 1)
 
Back
Top