Ir para conteúdo

[TFS 1.1] Skill Point System


Furabio

Posts Recomendados

O sistema é simples ao upar cada level você ganha x pontos de habilidade, onde é possível com esse pontos, comprar mana, hp, skill, etc ...

 

 

/creaturescripts/scripts/skillpoints.lua

 

local function addSkills(player, skillId)
    player:addSkillTries(skillId, math.ceil(player:getVocation():getRequiredSkillTries(skill, player:getSkillLevel(skill) + 1) / configManager.getNumber(configKeys.RATE_SKILL)))
 return false
end
 
 
local skillids = {
    ["shield"] = SKILL_SHIELD,
    ["sword"] = SKILL_SWORD,
    ["axe"] = SKILL_AXE,
    ["club"] = SKILL_CLUB,
    ["fist"] = SKILL_FIST,
    ["dist"] = SKILL_DISTANCE
    }
local attributes = {
    ["health"] =    {reqPoints = 1, increaseBy = 2, name = "Hit Points"},
    ["mana"] =      {reqPoints = 1, increaseBy = 2, name = "Mana Points"},
    ["magic"] =     {reqPoints = 15, increaseBy = 1, name = "Magic Level"},
    ["shielding"] = {reqPoints = 15, increaseBy = 1, name = "Shielding Skill"},
    ["sword"] =     {reqPoints = 15, increaseBy = 1, name = "Sword Skill"},
    ["axe"] =       {reqPoints = 15, increaseBy = 1, name = "Axe Skill"},
    ["club"] =      {reqPoints = 15, increaseBy = 1, name = "Club Skill"},
    ["fist"] =      {reqPoints = 15, increaseBy = 1, name = "Fist Skill"},
    ["distance"] =  {reqPoints = 15, increaseBy = 1, name = "Distance Skill"},
    }
 
function onModalWindow(player, modalWindowId, buttonId, choiceId)
local SKILL_POINTS = 45200 --- Change here the storage value used to save the skill points
local points = player:getStorageValue(SKILL_POINTS)
 
local function sendCancel()
    player:sendTextMessage(MESSAGE_INFO_DESCR, "You do not have the required amount of Skill Points!")
end
 
local function doAddHealth(param, attributes)
    player:setMaxHealth(player:getMaxHealth() + attributes["health"].increaseBy*param)
    player:addHealth(attributes["health"].increaseBy*param)
    player:setStorageValue(SKILL_POINTS, points - attributes["health"].reqPoints*param)
    player:sendTextMessage(MESSAGE_INFO_DESCR, "You have gained " ..attributes["health"].increaseBy.. " " ..attributes["health"].name.. "!")
return true
end
 
local function doAddMana(param, attributes)
    player:setMaxMana(player:getMaxMana() + attributes["mana"].increaseBy*param)
    player:addMana(attributes["mana"].increaseBy*param)
    player:setStorageValue(SKILL_POINTS, points - attributes["mana"].reqPoints*param)
    player:sendTextMessage(MESSAGE_INFO_DESCR, "You have gained " ..attributes["mana"].increaseBy.. " " ..attributes["mana"].name.. "!")
return true
end
 
if (not modalWindowId == 1) or (buttonId == 4) then
    return false
end
 
    if choiceId == 1 then
        if buttonId == 1 then
            if points >= attributes["health"].reqPoints then
                doAddHealth(1, attributes)
            else
                sendCancel()
            end
        end
        if buttonId == 2 then
            if points >= attributes["health"].reqPoints*2 then
                doAddHealth(2, attributes)
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["health"].reqPoints*5 then
                doAddHealth(5, attributes)
            else
                sendCancel()
            end
        end
    end
    if choiceId == 2 then
        if buttonId == 1 then
            if points >= attributes["mana"].reqPoints then
                doAddMana(1, attributes)
            else
                sendCancel()
            end
        end
        if buttonId == 2 then
            if points >= attributes["mana"].reqPoints*2 then
                doAddMana(2, attributes)
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["mana"].reqPoints*5 then
                doAddMana(5, attributes)
            else
                sendCancel()
            end
        end
    end
    if choiceId == 3 then
        if buttonId == 1 then
            if points >= attributes["magic"].reqPoints then
                player:addManaSpent(math.ceil(player:getVocation():getRequiredManaSpent(player:getBaseMagicLevel() + 1) / configManager.getNumber(configKeys.RATE_MAGIC)))
                player:setStorageValue(SKILL_POINTS, points - attributes["magic"].reqPoints)
            else
                sendCancel()
            end
        end
        if buttonId == 2 then
            if points >= attributes["magic"].reqPoints*2 then
                for i = 1,2 do
                    player:addManaSpent(math.ceil(player:getVocation():getRequiredManaSpent(player:getBaseMagicLevel() + 1) / configManager.getNumber(configKeys.RATE_MAGIC)))
                    player:setStorageValue(SKILL_POINTS, points - attributes["magic"].reqPoints)
                end
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
           if points >= attributes["magic"].reqPoints*5 then
                for i = 1,5 do
                    player:addManaSpent(math.ceil(player:getVocation():getRequiredManaSpent(player:getBaseMagicLevel() + 1) / configManager.getNumber(configKeys.RATE_MAGIC)))
                    player:setStorageValue(SKILL_POINTS, points - attributes["magic"].reqPoints)
                end
            else
                sendCancel()
            end
        end
    end
    if choiceId == 4 then
        if buttonId == 1 then
            if points >= attributes["sword"].reqPoints then
                addSkills(player, skillids["sword"])
            end
        end
        if buttonId == 2 then
            if points >= attributes["sword"].reqPoints*2 then
                for i = 1,2 do
                    addSkills(player, skillids["sword"])
                end
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["sword"].reqPoints*5 then
                for i = 1,5 do
                    addSkills(player, skillids["sword"])
                end
            else
                sendCancel()
            end
        end
    end
    if choiceId == 5 then
        if buttonId == 1 then
            if points >= attributes["axe"].reqPoints then
                addSkills(player, skillids["axe"])
            end
        else
                sendCancel()
        end
        if buttonId == 2 then
            if points >= attributes["axe"].reqPoints*2 then
                for i = 1,2 do
                    addSkills(player, skillids["axe"])
                end
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["axe"].reqPoints*5 then
                for i = 1,5 do
                    addSkills(player, skillids["axe"])
                end
            else
                sendCancel()
            end
        end
    end
    if choiceId == 6 then
        if buttonId == 1 then
            if points >= attributes["club"].reqPoints then
                addSkills(player, skillids["club"])
            end
        else
            sendCancel()
        end
        if buttonId == 2 then
            if points >= attributes["club"].reqPoints*2 then
                for i = 1,2 do
                    addSkills(player, skillids["club"])
                end
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["club"].reqPoints*5 then
                for i = 1,5 do
                    addSkills(player, skillids["club"])
                end
            else
                sendCancel()
            end
        end
    end
    if choiceId == 7 then
        if buttonId == 1 then
            if points >= attributes["shielding"].reqPoints then
                addSkills(player, skillids["shield"])
            end
        else
            sendCancel()
        end
        if buttonId == 2 then
            if points >= attributes["shielding"].reqPoints*2 then
                for i = 1,2 do
                    addSkills(player, skillids["shield"])
                end
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["shielding"].reqPoints*5 then
                for i = 1,5 do
                    addSkills(player, skillids["shield"])
                end
            else
                sendCancel()
            end
        end
    end
    if choiceId == 8 then
        if buttonId == 1 then
            if points >= attributes["distance"].reqPoints then
                addSkills(player, skillids["dist"])
            end
        else
            sendCancel()
        end
        if buttonId == 2 then
            if points >= attributes["distance"].reqPoints*2 then
                for i = 1,2 do
                    addSkills(player, skillids["dist"])
                end
            else
                sendCancel()
            end
        end
        if buttonId == 3 then
            if points >= attributes["distance"].reqPoints*5 then
                for i = 1,5 do
                    addSkills(player, skillids["dist"])
                end
            else
                sendCancel()
            end
        end
    end
end
 
local SkillPoints = {
  [1] = 1,
  [2] = 1,
  [3] = 1,
  [4] = 1,
  [5] = 1,
  [6] = 1,
  [7] = 1,
  [8] = 1,
  }
function onAdvance(player, skill, oldlevel, newlevel)
    local cid = player:getId()
    if not (SkillPoints[getPlayerVocation(cid)]) then
        return true
    end
    if (skill == 8) then
        if (getPlayerStorageValue(cid, 14573) < newlevel) then
            if (getPlayerStorageValue(cid, 14574) < 0) then
                    setPlayerStorageValue(cid, 14574, 0)
                setPlayerStorageValue(cid, 14573, 0)
            end
 
                    setPlayerStorageValue(cid, 14573, newlevel)
                setPlayerStorageValue(cid, 14574, getPlayerStorageValue(cid, 14574) + (newlevel - oldlevel) * (SkillPoints[getPlayerVocation(cid)]))
            doCreatureSay(cid, '+1 Skill Point!', TALKTYPE_MONSTER_SAY)
        end
    end
 
  return true
end

 

/creaturescripts/scripts/login.lua

 player:registerEvent("SkillPointSystem")

/talkactions/scripts/skillpoints.lua

<event type="modalwindow" name="PointWindow" script="skillpoints.lua"/>
<event type="advance" name="SkillPointSystem" script="skillpoints.lua"/>

/talkactions/scripts/skillpoints.lua

function onSay(player, words, param)
local SKILL_POINTS = 45200

local Point = ModalWindow(1, "Skill Points", "You have skill " ..player:getStorageValue(SKILL_POINTS)..  " points make your choice:\n\n Skill          Required Points         Increase Amount")
    Point:addChoice(1, "1. Health              1                                                2")
    Point:addChoice(2, "2. Mana")
    Point:addChoice(3, "3. Magic Level")
    Point:addChoice(4, "4. Sword")
    Point:addChoice(5, "5. Axe")
    Point:addChoice(6, "6. Club")
    Point:addChoice(7, "7. Shielding")
    Point:addChoice(8, "8. Distance")

    Point:addButton(1, 'Gain 1')
    Point:addButton(2, 'Gain 2')
    Point:addButton(3, 'Gain 5')
    Point:addButton(4, 'Cancel')

    player:registerEvent("PointWindow")
    Point:sendToPlayer(player)
    return false
end

/talkactions/talkactions.xml

 <talkaction words="!points" separator=" " script="skillpoints.lua"/>

Créditos : zbisu, codinabacl, ninja, MadMook

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...