• 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.3 How to edit addSkillLevels and add Speed gain

Rhyund

New Member
Joined
May 3, 2010
Messages
23
Reaction score
0
Hey there!

I got this code (without credits cause I don't know the owner) in an old server in my computer:


Code:
-- config
--promoted vocations included in function
local gainVoc = {
    [0] = {health = 20, mana = 20, magic = 1, skill = 1, cap = 50},
    [1] = {health = 20, mana = 20, magic = 1, skill = 1, cap = 50},
    [2] = {health = 20, mana = 20, magic = 1, skill = 1, cap = 50},
    [3] = {health = 20, mana = 20, magic = 1, skill = 1, cap = 50},
    [4] = {health = 20, mana = 20, magic = 1, skill = 1, cap = 50}
}
 
local skillStorage = 62490
local modalId = 4869
local TextModalId = 4870 -- so player may return to skill window
local skillPointsPerLevel = 1 -- points per level
local skillPointsAdvanceStorage = 62491 -- storage to avoid giving points twice for same level
local skillPointsTalkaction = "!skillpoints" -- so player knows command when he gets level up
 
local skills = {
-- name, get value, set value
    [1] = {'Health', function(player) return player:getMaxHealth() end, function(player) local gain = gainVoc[player:getBaseVocId()].health player:setMaxHealth(player:getMaxHealth() + gain) return gain end, 2},
    [2] = {'Mana', function(player) return player:getMaxMana() end, function(player) local gain = gainVoc[player:getBaseVocId()].mana player:setMaxMana(player:getMaxMana() + gain) return gain end, 2},
    [3] = {'Capacity', function(player) return player:getCapacity() / 100 end, function(player) local gain = gainVoc[player:getBaseVocId()].cap player:setCapacity(player:getCapacity() + (gain * 100)) return gain end, 2},
    [4] = {'Magic', function(player) return player:getBaseMagicLevel() end, function(player) local gain = gainVoc[player:getBaseVocId()].magic player:addSkillLevels(SKILL_MAGLEVEL, gain) return gain end, 1},
    [5] = {'Fist', function(player) return player:getSkillLevel(SKILL_FIST) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_FIST, gain) return gain end, 1},
    [6] = {'Club', function(player) return player:getSkillLevel(SKILL_CLUB) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_CLUB, gain) return gain end, 1},
    [7] = {'Sword', function(player) return player:getSkillLevel(SKILL_SWORD) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_SWORD, gain) return gain end, 1},
    [8] = {'Axe', function(player) return player:getSkillLevel(SKILL_AXE) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_AXE, gain) return gain end, 1},
    [9] = {'Distance', function(player) return player:getSkillLevel(SKILL_DISTANCE) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_DISTANCE, gain) return gain end, 1},
    [10] = {'Shielding', function(player) return player:getSkillLevel(SKILL_SHIELD) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_SHIELD, gain) return gain end, 1},
    [11] = {'Fishing', function(player) return player:getSkillLevel(SKILL_FISHING) end, function(player) local gain = gainVoc[player:getBaseVocId()].skill player:addSkillLevels(SKILL_FISHING, gain) return gain end, 1}
}
 
local skillForVoc = {
    [1] = {1, 2, 3, 4, 6, 10}, -- sorcerer
    [2] = {1, 2, 3, 4, 10, 11}, -- druid
    [3] = {1, 2, 3, 4, 9, 10, 11}, -- paladin
    [4] = {1, 2, 3, 5, 6, 7, 8, 10, 11}, -- knight
}
 
function Player:getBaseVocId()
    local basevoc = self:getVocation():getDemotion()
    if basevoc then
        return basevoc:getId()
    end
    return self:getVocation():getId()
end
 
function getExpForLevel(level)
    level = level - 1
    return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3
end
 
function Player:addSkillLevels(skill, count)
    count = math.max(1, count or 1)
  
    if isInArray({SKILL_FIST, SKILL_CLUB, SKILL_SWORD, SKILL_AXE, SKILL_DISTANCE, SKILL_SHIELD, SKILL_FISHING}, skill) then
        for i = 1, count do
            local xp = math.ceil(self:getVocation():getRequiredSkillTries(skill, self:getSkillLevel(skill) + 1) - self:getSkillTries(skill))
            self:addSkillTries(skill, xp)
        end
        return true
    end
 
    if skill == SKILL_MAGLEVEL then
        for i = 1, count do
            local xp = math.ceil(self:getVocation():getRequiredManaSpent(self:getBaseMagicLevel() + 1) - self:getManaSpent())
            self:addManaSpent(xp)
        end
        return true
    end
 
    if skill == SKILL_LEVEL then
        for i = 1, count do
            local lv = self:getLevel()
            local xp = getExpForLevel(lv + 1) - getExpForLevel(lv)
            self:addExperience(xp, false)
        end
        return true
    end
    return false
end
 
function Player:sendSkillPointsWindow()
    local pts = self:getStorageValue(skillStorage)
    if pts < 0 then
        self:setStorageValue(skillStorage, 0)
        pts = 0
    end
 
    local window = ModalWindow(modalId, "Character Mastery", "Available points: [" .. pts .. "]")
    window:addButton(1, "Assign")
    window:addButton(2, "Exit")
 
    for i = 1, #skills do
        if isInArray(skillForVoc[self:getBaseVocId()], i) then
            window:addChoice(i, skills[i][1] .. ": [" .. skills[i][2](self) .. "][cost: " .. skills[i][4] .. "]")
        end
    end
  
    window:setDefaultEnterButton(1)
    window:setDefaultEscapeButton(2)
    window:sendToPlayer(self)
    return true
end
 
function Player:skillWindowChoice(windowId, buttonId, choiceId)
    if windowId == modalId then
        if buttonId == 1 then
            if not skills[choiceId] then
                local textWindow = ModalWindow(TextModalId, "Error", "No skill selected.")
                textWindow:addButton(1, "Ok")
                textWindow:setDefaultEnterButton(1)
                textWindow:setDefaultEscapeButton(1)
                textWindow:sendToPlayer(self)
                return true
            end
            local pts = self:getStorageValue(skillStorage)
            if pts < 0 then
                self:setStorageValue(skillStorage, 0)
                pts = 0
            end
          
            if pts - skills[choiceId][4] >= 0 then
                local textWindow = ModalWindow(TextModalId, "Point assigned.", skills[choiceId][1] .. " +" .. skills[choiceId][3](self))
                textWindow:addButton(1, "Ok")
                textWindow:setDefaultEnterButton(1)
                textWindow:setDefaultEscapeButton(1)
                textWindow:sendToPlayer(self)
                self:setStorageValue(skillStorage, pts - skills[choiceId][4])
                return true
            end
 
            local textWindow = ModalWindow(TextModalId, "Error", "Not enough points")
            textWindow:addButton(1, "Ok")
            textWindow:setDefaultEnterButton(1)
            textWindow:setDefaultEscapeButton(1)
            textWindow:sendToPlayer(self)
            return true
        end
        return false
    end
  
    if not (windowId == TextModalId) then
        return false
    end
      
    self:sendSkillPointsWindow()
    return false
end
 
function Player:addSkillPoints(count)
    count = math.max(1, count or 1)
  
    local pts = self:getStorageValue(skillStorage)
    if pts < 0 then
        self:setStorageValue(skillStorage, 0)
        pts = 0
    end
  
    return self:setStorageValue(skillStorage, pts + count)
end
 
function Player:skillPointsAdvance(nlevel)
    if self:getStorageValue(skillPointsAdvanceStorage) < nlevel then
        self:addSkillPoints(skillPointsPerLevel * (nlevel - self:getStorageValue(skillPointsAdvanceStorage)))
        self:setStorageValue(skillPointsAdvanceStorage, nlevel)
        self:say('Skillpoints Added!', TALKTYPE_MONSTER_SAY, false, player)
        self:getPosition():sendMagicEffect(CONST_ME_FIREAREA)
        self:sendTextMessage(MESSAGE_STATUS_CONSOLE_ORANGE, "New skill points available. Type " .. skillPointsTalkaction .. " to open character mastery window.")
    end
    return true
end

But I wanna edit two things:

1) This code gives to character skills. When I tested, it gives Club Fighting to a sorcerer until skill 17. After that it gives % for reach to 18. I want that it always gives 1 skill.

2) I want to add a [12] to gives a little walk speed too, but I dont know how to do it.

Can someone help me? :)
 
Back
Top