Ir para conteúdo
  • Cadastre-se

Programação [Oferta de Scripts] Ajuda gratuita para desenvolvimento de OTServer - Envie seus pedidos!"


Posts Recomendados

  • Moderador

Olá a todos!

Estou aqui para ajudar no desenvolvimento de scripts para servidores de jogos baseados em OTS (Open Tibia Server). Se você precisa de algum script para o seu servidor e quer exercitar suas habilidades de programação, fique à vontade para enviar seus pedidos. Vou tentar ajudar da melhor forma possível.

Para facilitar a comunicação, por favor, siga as diretrizes abaixo ao fazer seu pedido de script:

  1. Título do pedido: Comece seu pedido de script com um título claro e descritivo que resuma o que você está procurando. Por exemplo: "[Pedido de script - DataPackArea - Actions] Sistema de eventos automatizados".

  2. Descrição do script: Forneça uma descrição detalhada do que você deseja alcançar com o script. Explique o propósito do script, a funcionalidade desejada e como você gostaria que ele interagisse com o servidor de jogo. Quanto mais informações você fornecer, melhor poderei entender seus requisitos e oferecer uma solução adequada.

  3. Requisitos específicos: Liste quaisquer requisitos específicos que o script deve atender. Isso pode incluir restrições de tempo, recursos específicos do servidor, integrações com outros sistemas, etc. Certifique-se de fornecer detalhes claros sobre esses requisitos para que eu possa fornecer uma solução adequada.

  4. Exemplos e referências: Se você tiver exemplos de outros scripts semelhantes ou referências que possam ajudar a entender melhor o que você está procurando, inclua-os na sua solicitação. Isso pode ser um código existente, links para recursos relevantes ou descrições detalhadas de funcionalidades em outros servidores.

  5. Contexto do servidor: Forneça informações sobre o servidor em que o script será implementado. Isso pode incluir detalhes sobre a versão do servidor, as bibliotecas e sistemas utilizados, e qualquer outra informação relevante. Isso ajudará a adaptar a solução conforme o ambiente em que o script será executado.

  6. Prazo e orçamento: Se você tiver um prazo específico para a entrega do script ou um orçamento limitado para o trabalho, mencione essas restrições na sua solicitação. Isso ajudará a avaliar a viabilidade do projeto e ajustar as expectativas, scripts podem ser entregues mais rápidos se doações forem feitas.

Por favor, seja educado e respeitoso ao fazer seu pedido. Lembre-se de que estou oferecendo meu tempo e esforço gratuitamente para ajudar a comunidade.
Farei o possível para atender aos pedidos, mas esteja ciente de que nem todas as solicitações podem ser atendidas.

Estou ansioso para colaborar com vocês e ajudar no desenvolvimento de scripts para seus servidores.
Vamos tornar o ambiente de jogo ainda mais interessante e divertido juntos!

Atenciosamente, Underewar


 

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Ola, boa tarde. Primeiramente agradeço pelo disposição e pelo tempo doado para ajudar  a comunidade.

 

•Gostaria de elaborar um script por talkaciton onde consigo reduzir e aumentar (x) level de todos os player registrados no server, inclusive os offlines, claro.

•Aproveitando o gancho gostaria tambem de alterar o formado dos hits de danos recebidos,  em vez de serem aleatorios, como ice, fire e outros sendo esquerda meio e direita,gostaria que saissem sequenciais um embaixo do outro

como os server mais antigos.

Link para o post
Compartilhar em outros sites
  • Moderador
21 horas atrás, Max Medeiros disse:

Ola, boa tarde. Primeiramente agradeço pelo disposição e pelo tempo doado para ajudar  a comunidade.

 

•Gostaria de elaborar um script por talkaciton onde consigo reduzir e aumentar (x) level de todos os player registrados no server, inclusive os offlines, claro.

•Aproveitando o gancho gostaria tambem de alterar o formado dos hits de danos recebidos,  em vez de serem aleatorios, como ice, fire e outros sendo esquerda meio e direita,gostaria que saissem sequenciais um embaixo do outro

como os server mais antigos.

Olá,

Segue abaixo o script pronto para você utilizar:

Seu primeiro pedido ja foi feito, não entendi muito bem o segundo, poderia me explicar de outra maneira ?

 

Canary RevScript

Spoiler


local function getExpForLevel(level)
    level = level - 1
    return ((50 * level * level * level) - (150 * level * level) + (400 * level)) / 3
end

local addLevel = TalkAction("/addlevel")

function addLevel.onSay(player, words, param)
    if not player:getGroup():getAccess() or player:getAccountType() < ACCOUNT_TYPE_GOD then
        return true
    end

    if param == "" then
        player:sendCancelMessage("Command param required.")
        return false
    end

    local split = param:split(",")
    if not split[2] then
        player:sendCancelMessage("Insufficient parameters.")
        return false
    end

    local count = tonumber(split[2])
    if not count then
        player:sendCancelMessage("Invalid level count.")
        return false
    end

    -- Update online players
    for _, target in ipairs(Game.getPlayers()) do
        local targetLevel = target:getLevel() + count
        local targetExp = getExpForLevel(targetLevel)
        local addExp = targetExp - target:getExperience()
        target:addExperience(addExp, false)
    end

    -- Update offline players via database query
    local players = db.storeQuery("SELECT `name`, `level`, `experience` FROM `players`")
    if players ~= nil then
        repeat
            local playerName = result.getDataString(players, "name")
            local playerLevel = result.getDataInt(players, "level")
            local playerExp = result.getDataInt(players, "experience")

            local targetLevel = playerLevel + count
            local targetExp = getExpForLevel(targetLevel)
            local addExp = targetExp - playerExp

            -- Update the player's experience in the database
            db.query("UPDATE `players` SET `experience` = " .. targetExp .. " WHERE `name` = '" .. playerName .. "'")

        until not result.next(players)
        result.free(players)
    end

    return false
end

addLevel:separator(" ")
addLevel:register()

 


TFS 1.x(XML)

Spoiler


function onSay(player, words, param)
    if not player:getGroup():getAccess() then
        return true
    end

    if player:getAccountType() < ACCOUNT_TYPE_GOD then
        return false
    end

    local split = param:splitTrimmed(",")
    if not split[2] then
        player:sendCancelMessage("Insufficient parameters.")
        return false
    end

    local count = tonumber(split[2])
    if not count then
        player:sendCancelMessage("Invalid level count.")
        return false
    end

    -- Update levels for online players
    for _, target in ipairs(Game.getPlayers()) do
        local targetLevel = target:getLevel() + count
        target:setLevel(targetLevel)
    end

    -- Update levels for offline players via database query
    local players = db.storeQuery("SELECT `name`, `level` FROM `players`")
    if players ~= nil then
        repeat
            local playerName = result.getDataString(players, "name")
            local playerLevel = result.getDataInt(players, "level")

            local targetLevel = playerLevel + count
            -- Update the player's level in the database
            db.query("UPDATE `players` SET `level` = " .. targetLevel .. " WHERE `name` = '" .. playerName .. "'")

        until not result.next(players)
        result.free(players)
    end

    return false
end

 


TFS 0.x(XML)
 

Spoiler


function onSay(cid, words, param, channel)
    if param == '' then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Command param required.")
        return true
    end

    local t = string.explode(param, ",")
    if not t[2] then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Not enough params.")
        return true
    end

    local amount = tonumber(t[2])
    if not amount or amount == 0 then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Invalid level amount.")
        return true
    end

    -- Update online players
    local players = getPlayersOnline()
    for _, pid in ipairs(players) do
        local currentLevel = getPlayerLevel(pid)
        local newLevel = currentLevel + amount
        doPlayerSetLevel(pid, newLevel)
    end

    -- Update offline players via database query
    local offlinePlayers = db.storeQuery("SELECT `id` FROM `players`")
    if offlinePlayers ~= nil then
        repeat
            local playerId = result.getDataInt(offlinePlayers, "id")
            local player = Player(playerId)
            if player then
                local currentLevel = getPlayerLevel(playerId)
                local newLevel = currentLevel + amount
                doPlayerSetLevel(playerId, newLevel)
            else
                -- Update the player's level in the database
                db.query(string.format("UPDATE `players` SET `level` = `level` + %d WHERE `id` = %d", amount, playerId))
            end
        until not result.next(offlinePlayers)
        result.free(offlinePlayers)
    end

    return true
end

 

Caso tenha alguma dúvida ou precise de mais informações, fique à vontade para perguntar.

Espero que esse script atenda às suas necessidades.

Atenciosamente, @Underewar

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  • Moderador
4 horas atrás, Bielzinks disse:

Boa tarde amigo.

Sistema de Reflete por stones, igual a dodge e critial, só que refletindo danos.

Emulador Otx 2.1

Seu pedido está muito vago, oque seria as stones, o sistema de reflect deve ser ativado quando usa uma stone? Ou equipa algum item?
Reformule o seu pedido.

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Perdão amigo.

Pedras que ao usar dar 1 ponto de Reflete, usando ate o máximo de 100. e a cada pedra usada ele aumenta 0.2% de chance de ativar o refletir. Toda vez que refletir, não refletir 100% do dano, no caso se a pessoa tirar 1k ele vai refletir metade do dano que o player tirar. E ao dar look mostra a quantidade de reflete que o player tem.

Editado por Bielzinks (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
Em 05/06/2023 em 21:54, Bielzinks disse:

Perdão amigo.

Pedras que ao usar dar 1 ponto de Reflete, usando ate o máximo de 100. e a cada pedra usada ele aumenta 0.2% de chance de ativar o refletir. Toda vez que refletir, não refletir 100% do dano, no caso se a pessoa tirar 1k ele vai refletir metade do dano que o player tirar. E ao dar look mostra a quantidade de reflete que o player tem.

 

Dodge System

 

Spoiler

 

Em

/data/action/action.xml:

XML:






<action itemid="ID DO SEU ITEM AQUI" event="script" value="dodge.lua" />

Em seguida, adicione em

/data/action/script:

Nomeie como dodge.lua

Lua:






local config = {
    effectonuse = 28, -- efeito (/z)
    levelsdodge = 100, -- Dodge máximo que você pode usar
    storagedodge = 48902 -- verificação de storage
}

function onUse(cid, item, frompos, item2, topos)
    if getPlayerStorageValue(cid, config.storagedodge) < config.levelsdodge then
        doRemoveItem(item.uid, 1)
        doSendMagicEffect(topos, config.effectonuse)
        doPlayerSendTextMessage(cid, 22, "Você avançou sua habilidade de dodge para [" .. (getPlayerStorageValue(cid, config.storagedodge) + 1) .. "/100].")
        setPlayerStorageValue(cid, config.storagedodge, getPlayerStorageValue(cid, config.storagedodge) + 1)
    elseif getPlayerStorageValue(cid, config.storagedodge) >= config.levelsdodge then
        doPlayerSendTextMessage(cid, 22, "Você já alcançou o nível máximo de habilidade de dodge.\nParabéns!!!!")
        return 0
    end
    return 1
end

 

Em seguida, adicione em

 

/data/creaturescript/creaturescript.xml:

XML:






<event type="statschange" name="dodge" event="script" value="dodge.lua"/>

Em seguida, adicione novamente em

/data/creaturescript/script:

Nomeie como dodge.lua

Lua:






local lvldodge = 48902
local percent = 1

function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) then
        if (getPlayerStorageValue(cid, lvldodge) * 3) >= math.random(0, 1000) then
            value = math.ceil(value * percent)
            doTargetCombatHealth(attacker, cid, combat, -value, -value, 255)
            doSendAnimatedText(getCreaturePos(cid), "DODGE", 6)
            return false
        end
    end
    return true
end

data/creaturescript/script/login.lua






if getPlayerStorageValue(cid, 48902) == -1 then -- sistema de dodge essencial
    setPlayerStorageValue(cid, 48902, 0)
end

registerCreatureEvent(cid, "dodge")

 

 

 

 

 

Critical System
 

Spoiler

 

Em

/data/action/action.xml:

XML:






<action itemid="ID DO SEU ITEM AQUI" event="script" value="critical.lua" />

Em seguida, adicione em

/data/action/script: Nomeie como critical.lua

Lua:






local config = {
    effectonuse = 28, -- efeito (/z)
    levelscritical = 100, --- Critical máximo que você pode usar
    storagecritical = 48903 -- verificação de storage
}

function onUse(cid, item, frompos, item2, topos)
    if getPlayerStorageValue(cid, config.storagecritical) < config.levelscritical then
        doRemoveItem(item.uid, 1)
        doSendMagicEffect(topos, config.effectonuse)
        doPlayerSendTextMessage(cid, 22, "Você avançou sua habilidade de critical para [" .. (getPlayerStorageValue(cid, config.storagecritical) + 1) .. "/100].")
        setPlayerStorageValue(cid, config.storagecritical, getPlayerStorageValue(cid, config.storagecritical) + 1)
    elseif getPlayerStorageValue(cid, config.storagecritical) >= config.levelscritical then
        doPlayerSendTextMessage(cid, 22, "Você já alcançou o nível máximo de habilidade de critical.\nParabéns!!!!")
        return 0
    end
    return 1
end
Em seguida, adicione em

/data/creaturescript/creaturescript.xml:

XML:






<event type="statschange" name="critical" event="script" value="critical.lua"/>

 

Em seguida, adicione novamente em

/data/creaturescript/script: Nomeie como critical.lua

Lua:






local lvlcritical = 48903
local percent = 1.2

function onStatsChange(cid, attacker, type, combat, value)
    if type == STATSCHANGE_HEALTHLOSS and isCreature(attacker) then
        if (getPlayerStorageValue(cid, lvlcritical) * 3) >= math.random(0, 1000) then
            value = math.ceil(value * percent)
            doTargetCombatHealth(attacker, cid, combat, -value, -value, 255)
            doSendAnimatedText(getCreaturePos(cid), "CRITICAL", 6)
            return false
        end
    end
    return true
end

 

Por fim, adicione em

/data/creaturescript/script/login.lua:

Lua:






if getPlayerStorageValue(cid, 48903) == -1 then -- sistema de critical essencial
    setPlayerStorageValue(cid, 48903, 0)
end

registerCreatureEvent(cid, "critical")

 

 

Certifique-se de substituir "ID DO SEU ITEM AQUI" pelo ID do item desejado.

Me enganei no seu pedido não sei porq kkkkkk acabei fazendo Dodge e critical system ao invés de reflect, não sei oq rolou kkk em breve atualizo aqui com o reflect 


@Bielzinks

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  • 3 months later...

Boa tarde, agradeço a ajuda! Estou com dificuldade em uma magia.

Quando o player solta a magia , ele é teleportado até cada um dos monstros ao seu redor, da 1 hit em cada por vez

.Ao término, volta para a posição inicial de onde soltou a magia.

local combat = createCombatObject()
setCombatParam(combat, COMBAT_PARAM_TYPE, COMBAT_PHYSICALDAMAGE)
setCombatParam(combat, COMBAT_PARAM_BLOCKARMOR, true)

function onGetFormulaValues(cid, level, skill, attack, factor)
	local skillTotal, levelTotal = skill + attack, level / 5
	return -(skillTotal / 3 + levelTotal), -(skillTotal + levelTotal)
end

setCombatCallback(combat, CALLBACK_PARAM_SKILLVALUE, "onGetFormulaValues")



function attack(cid, pos, toPos, fromPos, var)
    if #validTargets > 0 then
            if doCombat(cid, combat, var) == LUA_NO_ERROR then
                doTeleportThing(cid,validTargets[1])
                doSendMagicEffect(getPlayerPosition(cid), 61)
                table.remove(validTargets, validTargets[1])
                addEvent(attack, 200, cid)
            end
    else
        doTeleportThing(cid, playerfirstpos[1])
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Nenhum alvo valido encontrado.")
        for k in pairs(playerfirstpos) do
            playerfirstpos[k] = nil
        end
    end
return true
end

playerfirstpos = {}
validTargets = {}
function onCastSpell(cid, var)
local pos = getCreaturePosition(cid)  
local creatures = getSpectators(pos, 3, 3, false) 
    if table.insert(playerfirstpos, pos) then
        if creatures then
            for _, target in ipairs(creatures) do
                if isCreature(target) and (isPlayer(target) or isMonster(target)) then
                    table.insert(validTargets, target) 
                end
            end
            addEvent(attack, 1, cid)
        else
            doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "Nenhum alvo valido encontrado.")
        end
    end
return true
end

 

Tentei fazer , mas não consigo.

20120329195100.jpg
Link para o post
Compartilhar em outros sites
  • 1 month later...

Estou usando a base Canary, vi que existem sons para cada spell, gostaria de saber duas coisas:
Primeira, entender como consigo adicionar novos sons, porque eu abri o creatures_definition.hpp e vi somente o ID, mas não acho aonde eu consigo colocar novo ID para um novo som. Se for apenas colocar NOMEDASPELL = 1345 (Numero aleatorio), então até aí é simples, mas aonde eu vou por que 1345 é o som de nome Kabum.ogg?

Segundo, gostaria de que, quando clicar no NPC, ele saia um som para cada fala. Ex: Oi (Sai um som), xau (Sai outro som). Se me explicar o básico.

Link para o post
Compartilhar em outros sites
  • Moderador
12 minutos atrás, gabriellippa disse:

Estou usando a base Canary, vi que existem sons para cada spell, gostaria de saber duas coisas:
Primeira, entender como consigo adicionar novos sons, porque eu abri o creatures_definition.hpp e vi somente o ID, mas não acho aonde eu consigo colocar novo ID para um novo som. Se for apenas colocar NOMEDASPELL = 1345 (Numero aleatorio), então até aí é simples, mas aonde eu vou por que 1345 é o som de nome Kabum.ogg?

Segundo, gostaria de que, quando clicar no NPC, ele saia um som para cada fala. Ex: Oi (Sai um som), xau (Sai outro som). Se me explicar o básico.

Até onde eu sei os sons estão no cliente/server e não temos acesso ao código fonte do cliente então pegamos endereços e manipulamos, seria necessário uma dll ou alterar com ida ou outro software novos sounds no client da cip.
No server side apenas referenciamos os sons ja configurados.
Por não usar canary base eu imagino que se você utilizar o otcv8 ou mehah você não vai ter os sons disponiveis, isso porque não é server based e sim client based.

Não existem muitas ferramentas para o client 13.

Mas existe uma api capaz de manipular dados, o repositorio oficial esta desatualizado mas você encontra outros repositorios atualizados no github.
https://github.com/jo3bingham/TibiaAPI

Realmente não sei te dizer ao certo eu não uso atualmente nem um servidor com base canary e estou por fora de muitos updates do client 13x.

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Ainda posso fazer um pedido? Eu não sei se você tem conhecimento sobre a passiva do pokemon Magmortar no PokemonBR, em 2013 ele fazia como se fosse uma cruz em dano de fogo com 5 ou 7 quadrados para os lados. Eu gostaria de uma passiva proxima a isso.

 

Gostaria de testar no servidor PDA do Pota.

Editado por pClemp (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Moderador
3 horas atrás, pClemp disse:

Ainda posso fazer um pedido? Eu não sei se você tem conhecimento sobre a passiva do pokemon Magmortar no PokemonBR, em 2013 ele fazia como se fosse uma cruz em dano de fogo com 5 ou 7 quadrados para os lados. Eu gostaria de uma passiva proxima a isso.

 

Gostaria de testar no servidor PDA do Pota.

Claro se possivel deixe a referencia da passiva atual.

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
28 minutos atrás, Underewar disse:

Claro se possivel deixe a referencia da passiva atual.

Seria como essa lavareda de fogo maior, só que em cruz e não só horizontal. 

245453040_Semttulo.thumb.png.c2f72a55c9b56caeb5e892b9316d0b9f.png

Link para o post
Compartilhar em outros sites

servidor tfs 1.4.2

Eu gostaria de pedir algo na forma de creatorscript/source explicação:
sistema de história/saga
sobre o que seria o sistema?

o sistema consistiria no fato de que ao, por exemplo, falar com um NPC ou matar um monstro (que ataca apenas o jogador que tem uma determinada missão da história), o monstro pode atacar o jogador / o jogador pode atacar o monstro / falar para o NPC. e um roteiro para Talkaction que mostraria qual missão de história temos.
Se você não souber de algo ou puder entrar em contato comigo para discordar, ficarei muito feliz e grato

Meu Disscord : monarchacieni

Link para o post
Compartilhar em outros sites
  • Moderador
23 horas atrás, pClemp disse:

Seria como essa lavareda de fogo maior, só que em cruz e não só horizontal. 

245453040_Semttulo.thumb.png.c2f72a55c9b56caeb5e892b9316d0b9f.png

Me manda a spell!

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites

Fazer esse script ser usado por apenas uma vocaçao [vocaçao 5 e 6]

 

Citar

---Config
local conf = {
maxSlotCount=1,
ignoredIds={}
}
--End
function choose(...) --- Function by mock.
        local arg = {...}
        return arg[math.random(1,#arg)]
end
if not getItemAttack then
        function getItemAttack(uid)
                return getItemAttribute(uid,'attack')
        end
        function getItemDefense(uid)
                return getItemAttribute(uid,'defense')
        end
end
local function isArmor(uid) -- Function by Mock the bear.
    if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
                return true
        end
        return false
end
local function isWeapon(uid) -- Function by Mock the bear.
        uid = uid or 0
        local f = getItemWeaponType(uid)
        if f == 1 or f == 2 or f == 3 then
                return true
        end
        return false
end
local function isShield(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 4 then
                return true
        end
        return false
end
local function isBow(uid) -- Function by Mock the bear.
        uid = uid or 0
        if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then
                return true
        end
        return false
end
function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
        if item.uid == 0 or item.itemid == 0 then return false end
        toPosition.stackpos = 255
        if item.uid == 0 or item.itemid == 0 then return false end
        toPosition.stackpos = 255
    if isInArray(conf.ignoredIds, itemEx.itemid)
        or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
        or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
        or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
        doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
        return TRUE
    end
    if isCreature(itemEx.uid) then
        return FALSE
    end
        local nam = getItemName(itemEx.uid)
        function getper()
                local n = 1
                for i=1,10 do
                        n = n+math.random(0,10)
                        if n < 8*i then
                                break
                        end
                end
                return n
        end
        function getSlotCount(nam)
                local c = 0
                for _ in nam:gmatch('%[(.-)%]') do
                        c = c+1
                end
                return c
        end
        if getSlotCount(nam) < conf.maxSlotCount then
                local l = choose('hp')
                local p = getper()

                doSendMagicEffect(toPosition,30)
                nam = nam..' ['..l..'.+'..p..'%]'
                doSendAnimatedText(toPosition,l..' '..p..'%',120)
                doItemSetAttribute(itemEx.uid,'name',nam)
                doRemoveItem(item.uid,1)
        else
                doPlayerSendTextMessage(cid, 24,"You cant open a slot on this item.")
        end
        return true
end

 

Link para o post
Compartilhar em outros sites
  • Moderador
Em 10/11/2023 em 19:48, Doidodepeda disse:

Fazer esse script ser usado por apenas uma vocaçao [vocaçao 5 e 6]

 

 

Aqui esta.
 

---Config
local conf = {
    maxSlotCount = 1,
    ignoredIds = {}
}
--End

function choose(...) --- Function by mock.
    local arg = {...}
    return arg[math.random(1, #arg)]
end

if not getItemAttack then
    function getItemAttack(uid)
        return getItemAttribute(uid, 'attack')
    end

    function getItemDefense(uid)
        return getItemAttribute(uid, 'defense')
    end
end

local function isArmor(uid) -- Function by Mock the bear.
    if (getItemInfo(uid.itemid).armor ~= 0) and (getItemWeaponType(uid.uid) == 0) then
        return true
    end
    return false
end

local function isWeapon(uid) -- Function by Mock the bear.
    uid = uid or 0
    local f = getItemWeaponType(uid)
    if f == 1 or f == 2 or f == 3 then
        return true
    end
    return false
end

local function isShield(uid) -- Function by Mock the bear.
    uid = uid or 0
    if getItemWeaponType(uid) == 4 then
        return true
    end
    return false
end

local function isBow(uid) -- Function by Mock the bear.
    uid = uid or 0
    if getItemWeaponType(uid) == 5 and not isItemStackable(uid) then
        return true
    end
    return false
end

function onUse(cid, item, fromPosition, itemEx, toPosition) -- Script by mock the bear (MTB)
    if item.uid == 0 or item.itemid == 0 then
        return false
    end

    toPosition.stackpos = 255
    if item.uid == 0 or item.itemid == 0 then
        return false
    end

    toPosition.stackpos = 255

    -- Check if the vocation is 4 (Paladin) or 5 (Knight)
    if getPlayerVocation(cid) ~= 4 and getPlayerVocation(cid) ~= 5 then
        doPlayerSendTextMessage(cid, 24, "Only Paladins and Knights can use this item.")
        return true
    end

    if isInArray(conf.ignoredIds, itemEx.itemid)
            or (not getItemWeaponType(itemEx.uid) or getItemWeaponType(itemEx.uid) > 5)
            or (getItemWeaponType(itemEx.uid) == 0 and not isArmor(itemEx))
            or itemEx.itemid == 0 or itemEx.type > 1 or isItemStackable(itemEx.uid) then
        doPlayerSendTextMessage(cid, 24, "You can't open a slot on this item.")
        return true
    end

    if isCreature(itemEx.uid) then
        return false
    end

    local nam = getItemName(itemEx.uid)

    function getper()
        local n = 1
        for i = 1, 10 do
            n = n + math.random(0, 10)
            if n < 8 * i then
                break
            end
        end
        return n
    end

    function getSlotCount(nam)
        local c = 0
        for _ in nam:gmatch('%[(.-)%]') do
            c = c + 1
        end
        return c
    end

    if getSlotCount(nam) < conf.maxSlotCount then
        local l = choose('hp')
        local p = getper()

        doSendMagicEffect(toPosition, 30)
        nam = nam .. ' [' .. l .. '.+' .. p .. '%]'
        doSendAnimatedText(toPosition, l .. ' ' .. p .. '%', 120)
        doItemSetAttribute(itemEx.uid, 'name', nam)
        doRemoveItem(item.uid, 1)
    else
        doPlayerSendTextMessage(cid, 24, "You can't open a slot on this item.")
    end
    return true
end

 

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

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.

  • Conteúdo Similar

    • Por Muvuka
      Alguem tem anti-nuker igual a esse 
       

       
    • Por Muvuka
      [SQLite] -=[TFS]=- 0.4 8.60 Alguem faz apk mobile pra mim ip: dexsoft.ddns.net
       
      pra mim
       
      https://www.mediafire.com/file/5klqnyy6k7jda0u/OTClientV8.rar/file
       
      TA TUDO AI
    • Por yuriowns
      Salve rapazes, estou precisando de um client próprio para o meu servidor 7.4, preciso que algum programador experiente e com referências faça um client do jeito que eu procuro. Responda aqui para fazermos um orçamento, obrigado!

      Não sei se estou no lugar certo, se não me desculpem e peço que movam por gentileza!
    • Por paulo thush
      Pessoal to com um grande problema, estou com um servidor TFS 1.4x 10.98, recentemente começou dar um problema, sempre quando falava "trade" com o npc dava um erros, com qual quer npc, o erro e o seguinte.
       
       
      me falaram que o problema e nas sourcer que precisava mudar umas coisas me passaram um link no github esse aqui 
      https://github.com/otland/forgottenserver/pull/3996/files
       
      porem eu vi vídeos no youtube ensinando a compilar, já vi muitos tópicos como compilar a sourcer, ai quando vou compilar da esse erro
      já tentei instalar, desinstala muitas coisas, alterar também não vai, minha sourcer e essa 
      https://github.com/otland/forgottenserver
       
       
      Alguém poderia me ajuda com esse erro, ou ate compilar 100% as sourcer. os Tópicos que eu tentei para compilar e esse daqui, se não poder o link me desculpe.
      https://forums.otserv.com.br/index.php?/forums/topic/169234-windowsvc2019-compilando-sources-tfs-14-vcpkg/
       
      alguém me da uma luz por favor kkk
    • Por Ryzek
      Uso tfs 0.4 trunk3884 bem simples.
      Queria acrescentar magic effects para 255 pois o meu só vai até 69. Encontrei um tópico que falava sobre porém parece ter sido removido, não consigo acessar!
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo