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

Exercise Training tfs 1.3

Dorianek

Member
Joined
Nov 29, 2018
Messages
247
Reaction score
10
Location
Poland
code

C++:
local skills = {
    [32384] = {id=SKILL_SWORD,voc=4},
    [32385] = {id=SKILL_AXE,voc=4},
    [32386] = {id=SKILL_CLUB,voc=4},
    [32387] = {id=SKILL_DISTANCE,voc=3,range=CONST_ANI_SIMPLEARROW},
    [32388] = {id=SKILL_MAGLEVEL,voc=2,range=CONST_ANI_ENERGY},
    [32389] = {id=SKILL_MAGLEVEL,voc=1,range=CONST_ANI_FIRE},
}
 
------- CONFIG -----//
local dummies = {32142,32147,32148,32143,32144,32145,32146,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



11:40 You started training.
11:40 Your training has stopped.
 
First of all, local training should be outside start_train function and associated to each player. Then check where is Your training has stopped. message coming from, that should give you more insight on your problem.
 
Back
Top Bottom