Ir para conteúdo
  • Cadastre-se

Tile que upa skill | TFS 0.4 REV 3996


Posts Recomendados

Alguém possui um script de move que quando um jogador se mover em certo tile, uma skill dele upa como se tivesse treinando com os dunny. 

 

Exemplo: Vou em um tile equipado com algum item e ao andar naquele tile, minha skill vai subindo como se tivesse treinando

Link para o post
Compartilhar em outros sites
  • Sub-Admin
15 minutos atrás, HexusAlphos disse:

Alguém possui um script de move que quando um jogador se mover em certo tile, uma skill dele upa como se tivesse treinando com os dunny. 

 

Exemplo: Vou em um tile equipado com algum item e ao andar naquele tile, minha skill vai subindo como se tivesse treinando

function onStepIn(creature, item, position, fromPosition)
    local skillToTrain = SKILL_SWORD -- Substitua SKILL_SWORD pela habilidade que você deseja treinar
    local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
    local gainChance = 50 -- Chance de ganhar skill, em porcentagem
    local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar

    if creature:isPlayer() then
        local player = creature:getPlayer()
        
        -- Verifica se o jogador está equipado com o item necessário
        if player:getSlotItem(CONST_SLOT_RIGHT) and player:getSlotItem(CONST_SLOT_RIGHT):getId() == requiredItemID then
            local skillLevel = player:getSkillLevel(skillToTrain)

            if skillLevel >= minSkill then
                -- Verifica se o jogador ganha skill
                if math.random(100) <= gainChance then
                    player:addSkillTries(skillToTrain, 1)
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                else
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                end
            else
                player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            end
        else
            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
        end
    end
    return true
end

 

Ou pra cada vocação

 

function onStepIn(creature, item, position, fromPosition)
    if creature:isPlayer() then
        local player = creature:getPlayer()
        local vocation = player:getVocation():getId()

        -- Defina as habilidades correspondentes para cada vocação
        local skillsToTrain = {
            [VOCATION_NONE] = {SKILL_SWORD, SKILL_SHIELD}, -- Vocação sem classe
            [VOCATION_KNIGHT] = {SKILL_SWORD, SKILL_SHIELD}, -- Cavaleiro
            [VOCATION_PALADIN] = {SKILL_DISTANCE}, -- Paladino
            [VOCATION_SORCERER] = {SKILL_MAGLEVEL}, -- Sorcerer
            [VOCATION_DRUID] = {SKILL_MAGLEVEL}, -- Druida
            [VOCATION_MASTER_SORCERER] = {SKILL_MAGLEVEL}, -- Mestre dos Sorcerer
            [VOCATION_ELDER_DRUID] = {SKILL_MAGLEVEL} -- Mestre dos Druid
        }

        local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
        local gainChance = 50 -- Chance de ganhar skill, em porcentagem
        local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar

        if skillsToTrain[vocation] then
            for _, skillToTrain in ipairs(skillsToTrain[vocation]) do
                local skillLevel = player:getSkillLevel(skillToTrain)

                if skillLevel >= minSkill then
                    -- Verifica se o jogador está equipado com o item necessário
                    if player:getSlotItem(CONST_SLOT_RIGHT) and player:getSlotItem(CONST_SLOT_RIGHT):getId() == requiredItemID then
                        -- Verifica se o jogador ganha skill
                        if math.random(100) <= gainChance then
                            player:addSkillTries(skillToTrain, 1)
                            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                        else
                            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                        end
                    else
                        player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
                    end
                else
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
                end
            end
        else
            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Esta vocação não pode treinar aqui.")
        end
    end
    return true
end

 

 

 

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

Wow, valeu

Uma dúvida meio que leiga da minha parte, essa parte 

 local gainChance = 50 -- Chance de ganhar skill, em porcentagem

Quer dizer que será 50% de chance do jogador ganhar 1 nível a cada vez que passar no tile?

Link para o post
Compartilhar em outros sites
  • Sub-Admin
1 minuto atrás, HexusAlphos disse:

Wow, valeu

Uma dúvida meio que leiga da minha parte, essa parte 


 local gainChance = 50 -- Chance de ganhar skill, em porcentagem

Quer dizer que será 50% de chance do jogador ganhar 1 nível a cada vez que passar no tile?

S

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites
1 hora atrás, L3K0T disse:


function onStepIn(creature, item, position, fromPosition)
    local skillToTrain = SKILL_SWORD -- Substitua SKILL_SWORD pela habilidade que você deseja treinar
    local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
    local gainChance = 50 -- Chance de ganhar skill, em porcentagem
    local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar

    if creature:isPlayer() then
        local player = creature:getPlayer()
        
        -- Verifica se o jogador está equipado com o item necessário
        if player:getSlotItem(CONST_SLOT_RIGHT) and player:getSlotItem(CONST_SLOT_RIGHT):getId() == requiredItemID then
            local skillLevel = player:getSkillLevel(skillToTrain)

            if skillLevel >= minSkill then
                -- Verifica se o jogador ganha skill
                if math.random(100) <= gainChance then
                    player:addSkillTries(skillToTrain, 1)
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                else
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                end
            else
                player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            end
        else
            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
        end
    end
    return true
end

 

Ou pra cada vocação

 



function onStepIn(creature, item, position, fromPosition)
    if creature:isPlayer() then
        local player = creature:getPlayer()
        local vocation = player:getVocation():getId()

        -- Defina as habilidades correspondentes para cada vocação
        local skillsToTrain = {
            [VOCATION_NONE] = {SKILL_SWORD, SKILL_SHIELD}, -- Vocação sem classe
            [VOCATION_KNIGHT] = {SKILL_SWORD, SKILL_SHIELD}, -- Cavaleiro
            [VOCATION_PALADIN] = {SKILL_DISTANCE}, -- Paladino
            [VOCATION_SORCERER] = {SKILL_MAGLEVEL}, -- Sorcerer
            [VOCATION_DRUID] = {SKILL_MAGLEVEL}, -- Druida
            [VOCATION_MASTER_SORCERER] = {SKILL_MAGLEVEL}, -- Mestre dos Sorcerer
            [VOCATION_ELDER_DRUID] = {SKILL_MAGLEVEL} -- Mestre dos Druid
        }

        local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
        local gainChance = 50 -- Chance de ganhar skill, em porcentagem
        local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar

        if skillsToTrain[vocation] then
            for _, skillToTrain in ipairs(skillsToTrain[vocation]) do
                local skillLevel = player:getSkillLevel(skillToTrain)

                if skillLevel >= minSkill then
                    -- Verifica se o jogador está equipado com o item necessário
                    if player:getSlotItem(CONST_SLOT_RIGHT) and player:getSlotItem(CONST_SLOT_RIGHT):getId() == requiredItemID then
                        -- Verifica se o jogador ganha skill
                        if math.random(100) <= gainChance then
                            player:addSkillTries(skillToTrain, 1)
                            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                        else
                            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
                        end
                    else
                        player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
                    end
                else
                    player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
                end
            end
        else
            player:sendTextMessage(MESSAGE_EVENT_DEFAULT, "Esta vocação não pode treinar aqui.")
        end
    end
    return true
end

 

 

 

 

Você fez o script para TFS 1.x, mas o rapaz pediu especificamente para TFS 0.4. Revise isso.

 

Editado por Mateus Robeerto (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return false
    end

    local playerPosition = getCreaturePosition(cid)
    local vocation = getPlayerVocation(cid)

    -- Defina as habilidades correspondentes para cada vocação
    local skillsToTrain = {
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }

    local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
    local gainChance = 50 -- Chance de ganhar skill, em porcentagem
    local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar

    if not skillsToTrain[vocation] then
        return false
    end

    for _, skillToTrain in ipairs(skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        if skillLevel < minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está equipado com o item necessário
        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está na posição correta
        if not isInRange(playerPosition, position, 1) then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está na posição correta para treinar.")
            return true
        end

        -- Verifica se o jogador ganha skill
        if math.random(100) <= gainChance then
            doPlayerAddSkillTry(cid, skillToTrain)
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
        else
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
        end
    end

    return true
end

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites
Em 31/03/2024 em 13:48, L3K0T disse:

function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return false
    end

    local playerPosition = getCreaturePosition(cid)
    local vocation = getPlayerVocation(cid)

    -- Defina as habilidades correspondentes para cada vocação
    local skillsToTrain = {
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }

    local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
    local gainChance = 50 -- Chance de ganhar skill, em porcentagem
    local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar

    if not skillsToTrain[vocation] then
        return false
    end

    for _, skillToTrain in ipairs(skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        if skillLevel < minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está equipado com o item necessário
        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está na posição correta
        if not isInRange(playerPosition, position, 1) then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está na posição correta para treinar.")
            return true
        end

        -- Verifica se o jogador ganha skill
        if math.random(100) <= gainChance then
            doPlayerAddSkillTry(cid, skillToTrain)
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
        else
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
        end
    end

    return true
end

 

 

 

Desculpa tá enchendo o saco, mas como seria esse script sem a parte de vocation? É um tile que só vai treinar uma skill para todas as vocations do servidor (existem muitas)

 

Link para o post
Compartilhar em outros sites
  • Sub-Admin
1 hora atrás, HexusAlphos disse:

 

 

Desculpa tá enchendo o saco, mas como seria esse script sem a parte de vocation? É um tile que só vai treinar uma skill para todas as vocations do servidor (existem muitas)

 

       [0] = {1, 2}, -- Vocação sem classe vai trenr skill 1 e 2
        [1] = {1, 2}, -- Knight vai trenr skill 1 e 2
        [2] = {3}, -- Paladin vai trenr skill 3
        [3] = {4}, -- Sorcerer vai trenarr skill 4 ml
        [4] = {4}, -- Druid vai trenarr skill 4 ml
        [5] = {4}, -- Master Sorcerer vai trenarr skill 4 ml
        [6] = {4} -- Elder Druid vai trenarr skill 4 ml

coloquei tempo em tempo pra subir

 

local skillEvents = {} -- Tabela para armazenar os eventos temporizados por jogador

function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return false
    end

    local playerPosition = getCreaturePosition(cid)
    local vocation = getPlayerVocation(cid)

    -- Defina as habilidades correspondentes para cada vocação
    local skillsToTrain = {
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }

    local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
    local gainChance = 50 -- Chance de ganhar skill, em porcentagem
    local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar aqui

    if not skillsToTrain[vocation] then
        return false
    end

    for _, skillToTrain in ipairs(skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        if skillLevel < minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está equipado com o item necessário
        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está na posição correta
        if not isInRange(playerPosition, position, 1) then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está na posição correta para treinar.")
            return true
        end

        -- Adiciona um evento para ganhar skill a cada 3 segundos
        local event = addEvent(function()
            -- Verifica se o jogador ainda está na posição correta
            local currentPlayerPosition = getCreaturePosition(cid)
            if not isInRange(currentPlayerPosition, position, 1) then
                -- Se o jogador não estiver mais na posição, cancela o evento e remove da tabela de eventos
                if skillEvents[cid] then
                    stopEvent(skillEvents[cid])
                    skillEvents[cid] = nil
                end
                return
            end

            -- Verifica se o jogador ganha skill
            if math.random(100) <= gainChance then
                doPlayerAddSkillTry(cid, skillToTrain)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            else
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            end
        end, 3000) -- 3000 milissegundos = 3 segundos
        
        -- Armazena o evento na tabela de eventos, associando ao jogador
        skillEvents[cid] = event
    end

    return true
end

function onLogout(cid)
    -- Verifica se o jogador está na tabela de eventos
    if skillEvents[cid] then
        -- Cancela o evento temporizado e remove da tabela de eventos
        stopEvent(skillEvents[cid])
        skillEvents[cid] = nil
    end
    return true
end

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites
  • Sub-Admin
21 horas atrás, HexusAlphos disse:

tá dando esse erro

Screenshot_2.thumb.png.31f5f12e6e3dc74eed4fe02a914e07bd.png

function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return false
    end

    local playerPosition = getCreaturePosition(cid)
    local vocation = getPlayerVocation(cid)

    -- Defina as habilidades correspondentes para cada vocação
    local skillsToTrain = {
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }

    local minSkill = 10 -- Substitua 10 pelo valor mínimo da habilidade para começar a treinar
    local gainChance = 50 -- Chance de ganhar skill, em porcentagem
    local requiredItemID = 1234 -- Substitua 1234 pelo ID do item necessário para treinar aqui

    if not skillsToTrain[vocation] then
        return false
    end

    for _, skillToTrain in ipairs(skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        if skillLevel < minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está equipado com o item necessário
        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        -- Verifica se o jogador está na posição correta
        if not isInRange(playerPosition, position, 1) then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está na posição correta para treinar.")
            return true
        end

        -- Adiciona um evento para ganhar skill a cada 3 segundos
        local event = addEvent(function()
            -- Verifica se o jogador ainda está na posição correta
            local currentPlayerPosition = getCreaturePosition(cid)
            if not isInRange(currentPlayerPosition, position, 1) then
                -- Se o jogador não estiver mais na posição, cancela o evento e remove da tabela de eventos
                if skillEvents[cid] then
                    stopEvent(skillEvents[cid])
                    skillEvents[cid] = nil
                end
                return
            end

            -- Verifica se o jogador ganha skill
            if math.random(100) <= gainChance then
                doPlayerAddSkillTry(cid, skillToTrain)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            else
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            end
        end, 3000) -- 3000 milissegundos = 3 segundos
        
        -- Armazena o evento na tabela de eventos, associando ao jogador
        skillEvents[cid] = event
    end

    return true
end

function onLogout(cid)
    -- Verifica se o jogador está na tabela de eventos
    if skillEvents[cid] then
        -- Cancela o evento temporizado e remove da tabela de eventos
        stopEvent(skillEvents[cid])
        skillEvents[cid] = nil
    end
    return true
end

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites

nao testado!

local config = {
    minSkill = 10, -- Valor mínimo da habilidade para começar a treinar
    gainChance = 50, -- Chance de ganhar skill, em porcentagem
    requiredItemID = 1234, -- ID do item necessário para treinar
    trainInterval = 3000, -- Intervalo de tempo para tentar ganhar skill (em milissegundos)
    skillsToTrain = { -- Habilidades correspondentes para cada vocação
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }
}

local skillEvents = {} -- Tabela para armazenar os eventos de treino

function isInRange(playerPosition, centerPosition, range)
    return math.abs(centerPosition.x - playerPosition.x) <= range and
           math.abs(centerPosition.y - playerPosition.y) <= range and
           centerPosition.z == playerPosition.z
end

function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return false
    end

    local vocation = getPlayerVocation(cid)

    if not config.skillsToTrain[vocation] then
        return false
    end

    for _, skillToTrain in ipairs(config.skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        if skillLevel < config.minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= config.requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        if skillEvents[cid] then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você já está em treinamento.")
            return true
        end

        skillEvents[cid] = addEvent(function()
            if not isPlayer(cid) then
                skillEvents[cid] = nil
                return
            end

            local currentPlayerPosition = getCreaturePosition(cid)
            if not isInRange(currentPlayerPosition, position, 1) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está mais na posição correta para treinar.")
                stopEvent(skillEvents[cid])
                skillEvents[cid] = nil
                return
            end

            if math.random(100) <= config.gainChance then
                doPlayerAddSkillTry(cid, skillToTrain)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            else
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            end
        end, config.trainInterval)
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Iniciando treinamento em " .. getSkillName(skillToTrain) .. "...")
    end

    return true
end

function onLogout(cid)
    if skillEvents[cid] then
        stopEvent(skillEvents[cid])
        skillEvents[cid] = nil
    end
    return true
end

 

Link para o post
Compartilhar em outros sites
  • Sub-Admin
Em 04/04/2024 em 14:04, HexusAlphos disse:

continua igual

Screenshot_3.png

posta sua lib 032-position pra nos ver que tipo de pos vc usa

 

 

20230912_034613.png.cf49b650c34dd7d7b1f79bd49c70f53c.png

Eu sou um entusiasta da programação apaixonado por ajudar a comunidade open source a crescer. Sempre em busca de novos desafios e oportunidades para contribuir com meu código.  #OpenSource #Programação #Contribuição

 

Link para o post
Compartilhar em outros sites
Postado (editado)
11 horas atrás, L3K0T disse:

posta sua lib 032-position pra nos ver que tipo de pos vc usa

 

function isInRange(position, fromPosition, toPosition)
	return (position.x >= fromPosition.x and position.y >= fromPosition.y and position.z >= fromPosition.z and position.x <= toPosition.x and position.y <= toPosition.y and position.z <= toPosition.z)
end

function getDistanceBetween(fromPosition, toPosition)
	local x, y = math.abs(fromPosition.x - toPosition.x), math.abs(fromPosition.y - toPosition.y)
	local diff = math.max(x, y)
	if(fromPosition.z ~= toPosition.z) then
		diff = diff + 9 + 6
	end

	return diff
end

function getDirectionTo(pos1, pos2)
	local dir = NORTH
	if(pos1.x > pos2.x) then
		dir = WEST
		if(pos1.y > pos2.y) then
			dir = NORTHWEST
		elseif(pos1.y < pos2.y) then
			dir = SOUTHWEST
		end
	elseif(pos1.x < pos2.x) then
		dir = EAST
		if(pos1.y > pos2.y) then
			dir = NORTHEAST
		elseif(pos1.y < pos2.y) then
			dir = SOUTHEAST
		end
	else
		if(pos1.y > pos2.y) then
			dir = NORTH
		elseif(pos1.y < pos2.y) then
			dir = SOUTH
		end
	end

	return dir
end

function getCreatureLookPosition(cid)
	return getPosByDir(getThingPos(cid), getCreatureLookDirection(cid))
end

function getPositionByDirection(position, direction, size)
	local n = size or 1
	if(direction == NORTH) then
		position.y = position.y - n
	elseif(direction == SOUTH) then
		position.y = position.y + n
	elseif(direction == WEST) then
		position.x = position.x - n
	elseif(direction == EAST) then
		position.x = position.x + n
	elseif(direction == NORTHWEST) then
		position.y = position.y - n
		position.x = position.x - n
	elseif(direction == NORTHEAST) then
		position.y = position.y - n
		position.x = position.x + n
	elseif(direction == SOUTHWEST) then
		position.y = position.y + n
		position.x = position.x - n
	elseif(direction == SOUTHEAST) then
		position.y = position.y + n
		position.x = position.x + n
	end

	return position
end

function doComparePositions(position, positionEx)
	return position.x == positionEx.x and position.y == positionEx.y and position.z == positionEx.z
end

function getArea(position, x, y)
	local t = {}
	for i = (position.x - x), (position.x + x) do
		for j = (position.y - y), (position.y + y) do
			table.insert(t, {x = i, y = j, z = position.z})
		end
	end

	return t
end

 

11 horas atrás, Mateus Robeerto disse:

nao testado!


local config = {
    minSkill = 10, -- Valor mínimo da habilidade para começar a treinar
    gainChance = 50, -- Chance de ganhar skill, em porcentagem
    requiredItemID = 1234, -- ID do item necessário para treinar
    trainInterval = 3000, -- Intervalo de tempo para tentar ganhar skill (em milissegundos)
    skillsToTrain = { -- Habilidades correspondentes para cada vocação
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }
}

local skillEvents = {} -- Tabela para armazenar os eventos de treino

function isInRange(playerPosition, centerPosition, range)
    return math.abs(centerPosition.x - playerPosition.x) <= range and
           math.abs(centerPosition.y - playerPosition.y) <= range and
           centerPosition.z == playerPosition.z
end

function onStepIn(cid, item, position, fromPosition)
    if not isPlayer(cid) then
        return false
    end

    local vocation = getPlayerVocation(cid)

    if not config.skillsToTrain[vocation] then
        return false
    end

    for _, skillToTrain in ipairs(config.skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        if skillLevel < config.minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= config.requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        if skillEvents[cid] then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você já está em treinamento.")
            return true
        end

        skillEvents[cid] = addEvent(function()
            if not isPlayer(cid) then
                skillEvents[cid] = nil
                return
            end

            local currentPlayerPosition = getCreaturePosition(cid)
            if not isInRange(currentPlayerPosition, position, 1) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está mais na posição correta para treinar.")
                stopEvent(skillEvents[cid])
                skillEvents[cid] = nil
                return
            end

            if math.random(100) <= config.gainChance then
                doPlayerAddSkillTry(cid, skillToTrain)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            else
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            end
        end, config.trainInterval)
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Iniciando treinamento em " .. getSkillName(skillToTrain) .. "...")
    end

    return true
end

function onLogout(cid)
    if skillEvents[cid] then
        stopEvent(skillEvents[cid])
        skillEvents[cid] = nil
    end
    return true
end

 


não aponta nenhum erro na distro, mas também não upa a skill. Não sei se é pq meu servidor possui muitas voc (800+), já que é uma variação de nto

Editado por HexusAlphos (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Adicionei o comando "print" para imprimir no console e saber o que aconteceu, etc. Isso vai ajudar bastante.

local config = {
    minSkill = 10, -- Valor mínimo da habilidade para começar a treinar
    gainChance = 50, -- Chance de ganhar skill, em porcentagem
    requiredItemID = 2140, -- ID do item necessário para treinar
    trainInterval = 3000, -- Intervalo de tempo para tentar ganhar skill (em milissegundos)
    skillsToTrain = { -- Habilidades correspondentes para cada vocação
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }
}

local skillEvents = {} -- Tabela para armazenar os eventos de treino

function isInRange(playerPosition, centerPosition, range)
    return math.abs(centerPosition.x - playerPosition.x) <= range and
           math.abs(centerPosition.y - playerPosition.y) <= range and
           centerPosition.z == playerPosition.z
end

function onStepIn(cid, item, position, fromPosition)
    print("Entrou na função onStepIn")
    if not isPlayer(cid) then
        print("O personagem não é um jogador")
        return false
    end

    local vocation = getPlayerVocation(cid)
    print("Vocação do jogador: " .. vocation)

    if not config.skillsToTrain[vocation] then
        print("Vocação não encontrada na configuração de treino")
        return false
    end

    for _, skillToTrain in ipairs(config.skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        print("Nível da habilidade " .. skillToTrain .. ": " .. skillLevel)

        if skillLevel < config.minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= config.requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        if skillEvents[cid] then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você já está em treinamento.")
            return true
        end

        skillEvents[cid] = addEvent(function()
            print("Iniciando evento de treinamento")
            if not isPlayer(cid) then
                skillEvents[cid] = nil
                return
            end

            local currentPlayerPosition = getCreaturePosition(cid)
            if not isInRange(currentPlayerPosition, position, 1) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está mais na posição correta para treinar.")
                stopEvent(skillEvents[cid])
                skillEvents[cid] = nil
                return
            end

            if math.random(100) <= config.gainChance then
                doPlayerAddSkillTry(cid, skillToTrain)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            else
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            end
        end, config.trainInterval)
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Iniciando treinamento em " .. getSkillName(skillToTrain) .. "...")
    end

    return true
end

function onLogout(cid)
    if skillEvents[cid] then
        stopEvent(skillEvents[cid])
        skillEvents[cid] = nil
    end
    return true
end

 

Link para o post
Compartilhar em outros sites
9 horas atrás, Mateus Robeerto disse:

Adicionei o comando "print" para imprimir no console e saber o que aconteceu, etc. Isso vai ajudar bastante.


local config = {
    minSkill = 10, -- Valor mínimo da habilidade para começar a treinar
    gainChance = 50, -- Chance de ganhar skill, em porcentagem
    requiredItemID = 2140, -- ID do item necessário para treinar
    trainInterval = 3000, -- Intervalo de tempo para tentar ganhar skill (em milissegundos)
    skillsToTrain = { -- Habilidades correspondentes para cada vocação
        [0] = {1, 2}, -- Vocação sem classe
        [1] = {1, 2}, -- Knight
        [2] = {3}, -- Paladin
        [3] = {4}, -- Sorcerer
        [4] = {4}, -- Druid
        [5] = {4}, -- Master Sorcerer
        [6] = {4} -- Elder Druid
    }
}

local skillEvents = {} -- Tabela para armazenar os eventos de treino

function isInRange(playerPosition, centerPosition, range)
    return math.abs(centerPosition.x - playerPosition.x) <= range and
           math.abs(centerPosition.y - playerPosition.y) <= range and
           centerPosition.z == playerPosition.z
end

function onStepIn(cid, item, position, fromPosition)
    print("Entrou na função onStepIn")
    if not isPlayer(cid) then
        print("O personagem não é um jogador")
        return false
    end

    local vocation = getPlayerVocation(cid)
    print("Vocação do jogador: " .. vocation)

    if not config.skillsToTrain[vocation] then
        print("Vocação não encontrada na configuração de treino")
        return false
    end

    for _, skillToTrain in ipairs(config.skillsToTrain[vocation]) do
        local skillLevel = getPlayerSkillLevel(cid, skillToTrain)

        print("Nível da habilidade " .. skillToTrain .. ": " .. skillLevel)

        if skillLevel < config.minSkill then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não tem a habilidade necessária para treinar aqui.")
            return true
        end

        local rightSlotItem = getPlayerSlotItem(cid, CONST_SLOT_RIGHT)
        if not rightSlotItem or rightSlotItem.itemid ~= config.requiredItemID then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você precisa estar equipado com o item necessário para treinar aqui.")
            return true
        end

        if skillEvents[cid] then
            doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você já está em treinamento.")
            return true
        end

        skillEvents[cid] = addEvent(function()
            print("Iniciando evento de treinamento")
            if not isPlayer(cid) then
                skillEvents[cid] = nil
                return
            end

            local currentPlayerPosition = getCreaturePosition(cid)
            if not isInRange(currentPlayerPosition, position, 1) then
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não está mais na posição correta para treinar.")
                stopEvent(skillEvents[cid])
                skillEvents[cid] = nil
                return
            end

            if math.random(100) <= config.gainChance then
                doPlayerAddSkillTry(cid, skillToTrain)
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            else
                doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Você não ganhou experiência em " .. getSkillName(skillToTrain) .. ".")
            end
        end, config.trainInterval)
        doPlayerSendTextMessage(cid, MESSAGE_EVENT_DEFAULT, "Iniciando treinamento em " .. getSkillName(skillToTrain) .. "...")
    end

    return true
end

function onLogout(cid)
    if skillEvents[cid] then
        stopEvent(skillEvents[cid])
        skillEvents[cid] = nil
    end
    return true
end

 

Screenshot_1.thumb.png.aae4f0e9f140d887fddcdda73fa2b065.png

 

esse é o erro

Link para o post
Compartilhar em outros sites

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo