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

Action [TFS 1.2] Exercise Weapons

Hello, tell me where i change charge ? My exercise items have 1 charge left. I need change it to 1000x
 
Need Help :(

Lua Script Error: [Event Interface]
data/events/scripts/player.lua
data/events/scripts/player.lua:355: attempt to index global 'item' (a nil value)
stack traceback:
[C]: in function '__index'
data/events/scripts/player.lua:355: in main chunk
[Warning - Events::load] Can not load script: player.lua
 
Hello eveyone. I like to share the modifications I've made to the code.
I fixed the rates and the issue that allowed players to start the training several times with the same training weapon.

Lua:
local skills = {
    [32384] = {id=SKILL_SWORD,voc=4}, -- KNIGHT
    [32385] = {id=SKILL_AXE,voc=4}, -- KNIGHT
    [32386] = {id=SKILL_CLUB,voc=4}, -- KNIGHT
    [32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW}, -- PALADIN
    [32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY}, -- DRUID
    [32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE}, -- SORCERER
}
 
------- CONFIG -----//
local dummies = {32142, 32143 ,32147, 32149} -- missing few dummies yet
local skillRate = 1*configManager.getNumber(configKeys.RATE_SKILL)
local isTraining = 37
-- skillRate = 1.1*30 = 30 + 3 (10%) = 33x
 
local function start_train(pid,start_pos,itemid,fpos)
    local player = Player(pid)
    if player ~= nil then
        local pos_n = player:getPosition()
        if start_pos:getDistance(pos_n) == 0 and getTilePzInfo(pos_n) then
            if player:getItemCount(itemid) >= 1 then
                local exercise = player:getItemById(itemid,true)
                if exercise:isItem() then
                    if exercise:hasAttribute(ITEM_ATTRIBUTE_CHARGES) then
                        local charges_n = exercise:getAttribute(ITEM_ATTRIBUTE_CHARGES)
                        if charges_n >= 1 then
                            exercise:setAttribute(ITEM_ATTRIBUTE_CHARGES, (charges_n-1))
 
                            local voc = player:getVocation()
                           
                            if skills[itemid].id == SKILL_MAGLEVEL then
                                magicTry = voc:getRequiredManaSpent(player:getBaseMagicLevel() + 1)-player:getManaSpent()
                                player:addManaSpent(math.ceil(250))
                            else
                                player:addSkillTries(skills[itemid].id, 1*skillRate)
                            end
                             fpos:sendMagicEffect(CONST_ME_HITAREA)
                            if skills[itemid].range then
                                pos_n:sendDistanceEffect(fpos, skills[itemid].range)
                            end
                            --player:setStamina(player:getStamina() + 60)
                            if charges_n == 1 then
                                exercise:remove(1)
                                return true
                            end
                            local training = addEvent(start_train, voc:getAttackSpeed(), pid,start_pos,itemid,fpos)
                            player:setStorageValue(isTraining, 1)
                        else
                            exercise:remove(1)
                            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your training weapon vanished.")
                            stopEvent(training)
                            player:setStorageValue(isTraining, 0)
                        end
                    end
                end
            end
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your training has stopped.")
            stopEvent(training)
            player:setStorageValue(isTraining, 0)
        end
    else
        stopEvent(training)
        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your training has stopped.")
        player:setStorageValue(isTraining, 0)
    end
    return true
end
 
function onUse(player, item, fromPosition, target, toPosition, isHotkey)
    local start_pos = player:getPosition()
    if target:isItem() then
        if isInArray(dummies,target:getId()) then
            if not skills[item.itemid].range and (start_pos:getDistance(target:getPosition()) > 1) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Get closer to the dummy.")
                stopEvent(training)
                return false
            end
            if player:getStorageValue(isTraining) == 1 then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You are already training.")
                return false
            end
            if not player:getVocation():getId() == skills[item.itemid].voc or not player:getVocation():getId() == (skills[item.itemid].voc+4) then
                player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Your vocation cannot use this training weapon.")
                stopEvent(training)
                return false
            end
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You started training.")
            start_train(player:getId(),start_pos,item.itemid,target:getPosition())
        end
    end
 
    return true
end

Hello friend, yours worked for me... but when the exercise ends it doesn't show a message saying it's over, and if I use it again, it says I'm already running

Can you please send me the corrected code?I couldn't make the changes through github
 
Hey guys, could anyone tell me if it works in tfs 1.4.2? I tried here and it just says that training has started but it doesn't train at all
 
Hey guys, could anyone tell me if it works in tfs 1.4.2? I tried here and it just says that training has started but it doesn't train at all
How many charges are there on your training weapon?
 
How many charges are there on your training weapon?
That's what we're talking about?

<item id="31243" article="a" name="exercise sword">
<attribute key="weight" value="500" />
<attribute key="charges" value="1" />
</item>
 
Last edited:
That's what we're talking about?

<item id="31243" article="a" name="exercise sword">
<attribute key="weight" value="500" />
<attribute key="charges" value="1" />
</item>
the system uses 1 charge per cycle, so if you are using a weapon that has 1 charge, then it wont continue to train...
 
Back
Top