Ir para conteúdo
  • Cadastre-se

8.5x - 8.7x TFS 1.5 {8.6} Nekiro Downgrade com montarias e modal window apenas para OTClient.


Posts Recomendados

9 horas atrás, luanluciano93 disse:

@GM Vortex é bom deixar claro no tópico que essas opções de mounts e modal são funcionais apenas no otclient, e se voce quier usa-los em um old cliente (cipsoft) é necessário uma DLL especial.

Ok, muito obrigado. Vou atualizar o post fixo.

 

12 horas atrás, Fabi Marzan disse:

@GM Vortex Muito interessante, estou muito interessado em um repositório de mounts e modal window. Para me dar uma ideia do que precisa ser adicionado

Não há commit pelo GitHub. Apenas baixei o TFS 1.5 7.72, peguei alguns códigos e coloquei no 8.6 e compilei de boa... Mas não é difícil, foi menos de 5 minutos. :)

Link para o post
Compartilhar em outros sites
  • Mateus Robeerto mudou o título para TFS 1.5 {8.6} Nekiro Downgrade com montarias e modal window apenas para OTClient.
  • Respostas 60
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Para aqueles que estão interessados em adotar a base do Nekiro, gostaria de anunciar que as montarias e a modal widow agora estão disponíveis. Se você deseja implementar sistemas como o de crafting co

Caso alguém tenha interesse na dll, é só entrar em contato por aqui mesmo ou pelo meu discord: sharingan.exe

@doukxxt   Desculpa pela demora. Os últimos dias foram corridos. Decidi compartilhar isso com vocês   Abra o diretório otc/data/layouts/retro/styles/40-inventory.otui e procure por

Posted Images

@Fabi MarzanOlha o que eu encontrei no GitHub para modal window... Se não me engano, está correto. Vale a pena dar uma olhada.

https://github.com/otland/forgottenserver/pull/27/commits/790ab135d258d4f802b17d76d0ea36f6bee7c3ed

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

@Fabi MarzanOlha o que eu encontrei no GitHub para modal window... Se não me engano, está correto. Vale a pena dar uma olhada.

https://github.com/otland/forgottenserver/pull/27/commits/790ab135d258d4f802b17d76d0ea36f6bee7c3ed

Muito obrigado, vou tentar <3

Editado por Fabi Marzan (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
12 horas atrás, GM Vortex disse:

@Fabi MarzanOlha o que eu encontrei no GitHub para modal window... Se não me engano, está correto. Vale a pena dar uma olhada.

https://github.com/otland/forgottenserver/pull/27/commits/790ab135d258d4f802b17d76d0ea36f6bee7c3ed

mt obrigado <3

Link para o post
Compartilhar em outros sites

Caso alguém tenha interesse na dll, é só entrar em contato por aqui mesmo
ou pelo meu discord: sharingan.exe

Editado por SHARINGAN.exe
sla (veja o histórico de edições)

Break Old Client limitations with TibiaEx

https://discord.gg/pRphhFeCPz

only for 8.60

Link para o post
Compartilhar em outros sites
6 horas atrás, paola92 disse:

Any idea? I cannot compile. 

Przechwytywanie.PNG

That's strange... I compiled it and there were no errors at all. I'm using Windows.

Link para o post
Compartilhar em outros sites
Em 07/10/2023 em 22:04, GM Vortex disse:

Para aqueles que estão interessados em adotar a base do Nekiro, gostaria de anunciar que as montarias e a modal widow agora estão disponíveis. Se você deseja implementar sistemas como o de crafting com modal e outros recursos, sinta-se à vontade para fazer o download e testar.

É importante observar que o Nekiro não incluiu mapas nesta versão. Portanto, será necessário migrar seus próprios mapas para o TFS 1.5 8.6. Alternativamente, você pode considerar utilizar a base do Luciano, conhecida como STYLLER OT. Após realizar testes, posso confirmar que essa é uma opção bastante interessante. Esta versão já está completa, permitindo que você utilize seus próprios mapas sem dificuldades significativas.

Além disso, estou disponibilizando os sprites no formato 13x para a versão 8.6, juntamente com os arquivos items.otb e XML. Quanto à correção de eventuais erros, isso fica a seu critério, mas gostaria de ressaltar que não é uma tarefa difícil de realizar.

 

É com satisfação que compartilho que a source está agora disponível para acesso público. Caso você deseje, pode realizar atualizações através dos commits. Estou preparando uma lista abrangente de atualizações necessárias, pois há muitas modificações a serem feitas.

Para acessar a source, por favor, clique no link abaixo:

https://www.mediafire.com/file/0680a4b624163pd/TFS-1.5-Downgrades-8.60.rar/file

 

Dentro da SRC que implementei, você encontrará os seguintes recursos:

Sistema de Montaria: Agora você pode adicionar essa funcionalidade ao seu servidor.

Modal Window: Esta é uma janela modal, proporcionando uma experiência mais interativa para os jogadores.

 

Custom Attributes(Boost e Relfect:: https://github.com/otland/forgottenserver/pull/2807/commits/18f5afa52a36a02ea56dae97b29e683233d15c25.

 

Além disso, gostaria de compartilhar três repositórios no GitHub que podem ser valiosos para você. Três deles são mantidos pelos usuários @Movie e @ralke23 e a Sarah (MillhioreBT). Esses repositórios contêm recursos e scripts úteis que podem aprimorar a experiência do seu servidor. Sinta-se à vontade para explorar e utilizar esses recursos conforme necessário.

https://github.com/moviebr/TFS-1.5-Downgrades

https://github.com/ralke23/Greed-TFS-1.5-Downgrades

https://github.com/MillhioreBT/forgottenserver-downgrade

 

Para os interessados nos sprites 13x para a versão 8.6, estou disponibilizando o link para download abaixo:

https://mega.nz/folder/5FQEnT4R#pAbmAAhpBhmcP1jaVkXm8Q

 

Recomendo também o uso do ObjectBuilder_0_5_5-dev para facilitar o processo:

https://github.com/punkice3407/ObjectBuilder/releases/tag/v0.5.5

 

Para aqueles que enfrentam dificuldades na compilação do executável, estou disponibilizando um arquivo para download que pode ajudar:

https://www.mediafire.com/file/cxirgq7n1cm2p3i/dlls+e+exe.rar/file

 

 

Quanto à ativação do sistema de montarias via OTClient, basta acessar o arquivo game_features/features.lua e localizar a linha: 'if(version >= 860) then!' e adicionar abaixo 'g_game.enableFeature(GamePlayerMounts)'.

 

É necessário baixar ambos os arquivos, mounts.xml e outfits.xml, para que o OtClient funcione corretamente. Sem esses arquivos, o cliente pode apresentar bugs ou até mesmo crashar sozinho. É obrigatório o uso desses arquivos. Basta fazer o download e colocá-los na base do Luciano. Basta ir até a pasta data/xml e inserir os arquivos lá. Se você estiver usando seu próprio mapa, os arquivos são igualmente necessários, independentemente de suas preferências.

outfits.xml 20.13 kB · 28 downloads

mounts.xml 15.55 kB · 29 downloads

 


ATENÇÃO: Sobre a base do Luciano ou do Nekiro downgrade que você baixou (schemas.sql), ela está totalmente limpa, sem implementações adicionais. Cabe a você implementar por conta própria. Por exemplo, se você for usar o Znote, ele solicitará o esquema e as colunas necessárias. Isso não são erros, são apenas avisos. Você deve procurar pelas colunas necessárias e inseri-las para que funcione corretamente. Isso não é difícil de fazer.

https://github.com/slawkens/myaac

https://github.com/gesior/Gesior2012

https://github.com/Znote/ZnoteAAC/tree/v2

 

 

Antes de prosseguir com o download, sugiro que realize uma verificação de vírus nos arquivos. Seguem os links para o scan:

 

Scan da SRC

https://www.virustotal.com/gui/file/1364b14cab10a34ca7102d3581e427396f8224cc5156d6bc3859b4ebcb155de6?nocache=1

Scan das DLLs e Executável

https://www.virustotal.com/gui/file/603c853dbd5b40ff21b0b0004c129e5039c9954277da22722b2980fcbfcbe0ce?nocache=1

 

IMPORTANTE: Por favor, note que a funcionalidade de montaria e janela modal não está disponível para versão old do client (CipSoft). Infelizmente, não estou oferecendo suporte para essas versões no momento. No entanto, é possível adquirir uma DLL especial que pode ser injetada no client old (CipSoft) para habilitar essas funcionalidades. Caso esteja interessado, conheço um vendedor confiável que oferece essa DLL. Para mais informações, por favor, entre em contato através do Discord: Sharingan.

 

Parabéns pela iniciativa mano, era realmente um conteudo que não tinha no forum.

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

@GM Vortex vc saberia me dizer o pq dessa script nao funcionar neste servidor?

Spoiler

<!-- Stat System -->
    <event type="login" name="randomstats_register" script="randomstats.lua"/>
   <event type="kill" name="randomstats_loot" script="randomstats.lua"/>

 

Spoiler

local rare_popup = true
local rare_text = "*random item*"
local rare_effect = true
local rare_effect_id = CONST_ME_FIREATTACK
 
local tiers = {
    [1] = {
        prefix = 'rare',
        showattr = true, -- attr prefix will be shown instead
        extra = {0, 0},
        chance = {
            [1] = 10000, -- chance for basic stat
            [2] = 5000 -- chance for second stat
        }
    },
 
    [2] = {
        prefix = 'epic',
        extra = {7, 20}, -- additional percent bonus
        chance = {
            [1] = 3333,
            [2] = 25000
        }
    },
 
    [3] = {
        prefix = 'legendary',
        extra = {20, 35},
        chance = {
            [1] = 1000,
            [2] = 100000 -- 2 bonuses always
        }
    },
}
 
--! attributes
local attr = {
    atk = {
        name = 'atk',
        prefix = 'sharpened',
        percent = {7, 25},
    },
    def = {
        name = 'def',
        prefix = 'fortified',
        percent = {7, 25},
    },
    extradef = {
        name = 'extra def',
        prefix = 'balanced',
        percent = {7, 25},
    },
    arm = {
        name = 'arm',
        prefix = 'flawless',
        percent = {7, 20},
    },
    hitchance = {
        name = 'accuracy',
        prefix = 'accurate',
        percent = {10, 25},
    },
    shootrange = {
        name = 'range',
        prefix = 'powerful',
        percent = {17, 34},
    },
    charges = {
        name = 'charges',
        prefix = 'charged',
        percent = {30, 45},
    },
    duration = {
        name = 'time',
        prefix = 'unique',
        percent = {35, 50},
    },
 
    --[[ not available in 1.1
    attackSpeed = {},
    extraAttack = {},
    ]]
}
 
local stats = {
    [1] = {ITEM_ATTRIBUTE_ATTACK, attr.atk},
    [2] = {ITEM_ATTRIBUTE_DEFENSE, attr.def},
    [3] = {ITEM_ATTRIBUTE_EXTRADEFENSE, attr.extradef},
    [4] = {ITEM_ATTRIBUTE_ARMOR, attr.arm},
    [5] = {ITEM_ATTRIBUTE_HITCHANCE, attr.hitchance},
    [6] = {ITEM_ATTRIBUTE_SHOOTRANGE, attr.shootrange},
    [7] = {ITEM_ATTRIBUTE_CHARGES, attr.charges},
    [8] = {ITEM_ATTRIBUTE_DURATION, attr.duration},
    -- not available in 1.1
    -- [9] = {ITEM_ATTRIBUTE_ATTACKSPEED, attr.attackSpeed},
    -- [10] = {ITEM_ATTRIBUTE_EXTRAATTACK, attr.extraAttack},
}
 
function stat_getItemDuration(item)
    local it_id = item:getId()
    local tid = ItemType(it_id):getTransformEquipId()
    if tid > 0 then
        item:transform(tid)
        local vx = item:getAttribute(ITEM_ATTRIBUTE_DURATION)
        item:transform(it_id)
        item:removeAttribute(ITEM_ATTRIBUTE_DURATION)
        return vx
    end
    return 0
end
 
function loot_attrToVal(item, attr)
    local id = ItemType(item:getId())
    local v = {
        [ITEM_ATTRIBUTE_ATTACK] = id:getAttack(),
        [ITEM_ATTRIBUTE_DEFENSE] = id:getDefense(),
        [ITEM_ATTRIBUTE_EXTRADEFENSE] = id:getExtraDefense(),
        [ITEM_ATTRIBUTE_ARMOR] = id:getArmor(),
        [ITEM_ATTRIBUTE_HITCHANCE] = id:getHitChance(),
        [ITEM_ATTRIBUTE_SHOOTRANGE] = id:getShootRange(),
        [ITEM_ATTRIBUTE_CHARGES] = id:getCharges(),
        [ITEM_ATTRIBUTE_DURATION] = stat_getItemDuration(item),
 
        -- not available in 1.1
        -- [ITEM_ATTRIBUTE_ATTACKSPEED] = item:getAttackSpeed(),
        -- [ITEM_ATTRIBUTE_EXTRAATTACK] = item:getExtraAttack(),
    }
    return v[attr]
end
 
function assign_loot_Stat(c)
    local rares = 0
    local h = c:getItemHoldingCount()
    if h > 0 then
        for i = 1, h do
            local available_stats = {}
            local it_u = c:getItem(i - 1)
            local it_id = ItemType(it_u:getId())
            if it_u:isContainer() then
                local crares = assign_loot_Stat(it_u)
                rares = rares + crares
            else
                if not it_id:isStackable() then
                    local wp = it_id:getWeaponType()
                    if wp > 0 then
                        if wp == WEAPON_SHIELD then -- type shield
                            table.insert(available_stats, stats[2])
                        elseif wp == WEAPON_DISTANCE then -- type bow
                            table.insert(available_stats, stats[1])
                            table.insert(available_stats, stats[5])
                            table.insert(available_stats, stats[6])
                            -- not available in 1.1
                            -- table.insert(available_stats, stats[9])
                        elseif wp == WEAPON_WAND then -- type wand
                            table.insert(available_stats, stats[6])
                        -- not available in 1.1
                        -- table.insert(available_stats, stats[9])
                        elseif isInArray({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, wp) then -- melee weapon
 
                            if it_id:getAttack() > 0 then
                                table.insert(available_stats, stats[1])
                            end
                           
                            if it_id:getDefense() > 0 then
                                table.insert(available_stats, stats[2])
                            end
                           
                            if it_id:getExtraDefense() ~= 0 then
                                table.insert(available_stats, stats[3])
                            end
                            -- not available in 1.1
                            -- table.insert(available_stats, stats[10])
                        end
                    else -- armors, amulets, runes and rings
                        if it_id:getArmor() > 0 then
                            table.insert(available_stats, stats[4])
                        end
 
                        if it_id:getCharges() > 0 then
                            table.insert(available_stats, stats[7])
                        end
 
                        local eq_id = it_id:getTransformEquipId()
                        if eq_id > 0 then
                            table.insert(available_stats, stats[8])
                        end
                    end
                end
            end
 
            if #available_stats > 0 then
                -- skips it all if it's empty
                local tier = math.random(1, #tiers)
                if #tiers[tier].chance > 0 then
                    local statsStored = 0
                    local stats_used = {}
                    for stat = 1, #tiers[tier].chance do
                        if #available_stats > 0 then
                            -- stops if no more stats available
                            if stat - 1 == statsStored then
                                -- checks when it's time to stop adding stats
                                if math.random(1, 100000) <= tiers[tier].chance[stat] then
                                    statsStored = statsStored + 1
 
                                    local selected_stat = math.random(1, #available_stats)
                                    table.insert(stats_used, available_stats[selected_stat])
                                    table.remove(available_stats, selected_stat)
                                end
                            end
                        end
                    end
 
                    if #stats_used > 0 then
                        rares = rares + 1
                        local stat_desc = {}
                        for stat = 1, #stats_used do
                            local v = math.random(
                                stats_used[stat][2].percent[1],
                                stats_used[stat][2].percent[2]
                            ) + math.random(
                                tiers[tier].extra[1],
                                tiers[tier].extra[2]
                            )
                            local basestat = loot_attrToVal(it_u, stats_used[stat][1])
                            it_u:setAttribute(stats_used[stat][1], basestat + math.abs(basestat * v / 100))
                            table.insert(stat_desc, '[' .. stats_used[stat][2].name .. ': +' .. v .. '%]')
                        end
 
                        if tiers[tier].showattr then
                            for stat = 1, #stats_used do
                                it_u:setAttribute(ITEM_ATTRIBUTE_NAME, "[" .. stats_used[stat][2].prefix .. "]" .. it_u:getAttribute(ITEM_ATTRIBUTE_NAME))
                            end
                            it_u:setAttribute(ITEM_ATTRIBUTE_NAME, it_u:getAttribute(ITEM_ATTRIBUTE_NAME) .. " " .. it_id:getName())
                        else
                            it_u:setAttribute(ITEM_ATTRIBUTE_NAME, tiers[tier].prefix .. " " .. it_id:getName())
                        end
 
                        it_u:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, table.concat(stat_desc, "\n"))
                    end
                end
            end
        end
    end
    return rares
end
 
function find_loot_Container(pos)
    local rares = 0
    local c = Tile(pos):getTopDownItem()
    if c ~= nil then
        if c:isContainer() then
            rares = rares + assign_loot_Stat(c)
            if rares > 0 then
                if rare_popup then
                    local spectators = Game.getSpectators(pos, false, true, 7, 7, 5, 5)
                    for i = 1, #spectators do
                        spectators[i]:say(rare_text, TALKTYPE_MONSTER_SAY, false, spectators[i], pos)
                    end
                end
 
                if rare_effect then
                    pos:sendMagicEffect(rare_effect_id)
                end
            end
            return true
        end
    end
end
 
function onKill(player, target, lastHit)
    if (not isSummon(target)) then
        addEvent(find_loot_Container, 2, target:getPosition())
    end
    return true
end
 
function onLogin(player)
    player:registerEvent("randomstats_loot")
    return true
end

 

Link para o post
Compartilhar em outros sites
11 horas atrás, Douk disse:

@GM Vortex vc saberia me dizer o pq dessa script nao funcionar neste servidor?

  Ocultar conteúdo

<!-- Stat System -->
    <event type="login" name="randomstats_register" script="randomstats.lua"/>
   <event type="kill" name="randomstats_loot" script="randomstats.lua"/>

 

  Mostrar conteúdo oculto

local rare_popup = true
local rare_text = "*random item*"
local rare_effect = true
local rare_effect_id = CONST_ME_FIREATTACK
 
local tiers = {
    [1] = {
        prefix = 'rare',
        showattr = true, -- attr prefix will be shown instead
        extra = {0, 0},
        chance = {
            [1] = 10000, -- chance for basic stat
            [2] = 5000 -- chance for second stat
        }
    },
 
    [2] = {
        prefix = 'epic',
        extra = {7, 20}, -- additional percent bonus
        chance = {
            [1] = 3333,
            [2] = 25000
        }
    },
 
    [3] = {
        prefix = 'legendary',
        extra = {20, 35},
        chance = {
            [1] = 1000,
            [2] = 100000 -- 2 bonuses always
        }
    },
}
 
--! attributes
local attr = {
    atk = {
        name = 'atk',
        prefix = 'sharpened',
        percent = {7, 25},
    },
    def = {
        name = 'def',
        prefix = 'fortified',
        percent = {7, 25},
    },
    extradef = {
        name = 'extra def',
        prefix = 'balanced',
        percent = {7, 25},
    },
    arm = {
        name = 'arm',
        prefix = 'flawless',
        percent = {7, 20},
    },
    hitchance = {
        name = 'accuracy',
        prefix = 'accurate',
        percent = {10, 25},
    },
    shootrange = {
        name = 'range',
        prefix = 'powerful',
        percent = {17, 34},
    },
    charges = {
        name = 'charges',
        prefix = 'charged',
        percent = {30, 45},
    },
    duration = {
        name = 'time',
        prefix = 'unique',
        percent = {35, 50},
    },
 
    --[[ not available in 1.1
    attackSpeed = {},
    extraAttack = {},
    ]]
}
 
local stats = {
    [1] = {ITEM_ATTRIBUTE_ATTACK, attr.atk},
    [2] = {ITEM_ATTRIBUTE_DEFENSE, attr.def},
    [3] = {ITEM_ATTRIBUTE_EXTRADEFENSE, attr.extradef},
    [4] = {ITEM_ATTRIBUTE_ARMOR, attr.arm},
    [5] = {ITEM_ATTRIBUTE_HITCHANCE, attr.hitchance},
    [6] = {ITEM_ATTRIBUTE_SHOOTRANGE, attr.shootrange},
    [7] = {ITEM_ATTRIBUTE_CHARGES, attr.charges},
    [8] = {ITEM_ATTRIBUTE_DURATION, attr.duration},
    -- not available in 1.1
    -- [9] = {ITEM_ATTRIBUTE_ATTACKSPEED, attr.attackSpeed},
    -- [10] = {ITEM_ATTRIBUTE_EXTRAATTACK, attr.extraAttack},
}
 
function stat_getItemDuration(item)
    local it_id = item:getId()
    local tid = ItemType(it_id):getTransformEquipId()
    if tid > 0 then
        item:transform(tid)
        local vx = item:getAttribute(ITEM_ATTRIBUTE_DURATION)
        item:transform(it_id)
        item:removeAttribute(ITEM_ATTRIBUTE_DURATION)
        return vx
    end
    return 0
end
 
function loot_attrToVal(item, attr)
    local id = ItemType(item:getId())
    local v = {
        [ITEM_ATTRIBUTE_ATTACK] = id:getAttack(),
        [ITEM_ATTRIBUTE_DEFENSE] = id:getDefense(),
        [ITEM_ATTRIBUTE_EXTRADEFENSE] = id:getExtraDefense(),
        [ITEM_ATTRIBUTE_ARMOR] = id:getArmor(),
        [ITEM_ATTRIBUTE_HITCHANCE] = id:getHitChance(),
        [ITEM_ATTRIBUTE_SHOOTRANGE] = id:getShootRange(),
        [ITEM_ATTRIBUTE_CHARGES] = id:getCharges(),
        [ITEM_ATTRIBUTE_DURATION] = stat_getItemDuration(item),
 
        -- not available in 1.1
        -- [ITEM_ATTRIBUTE_ATTACKSPEED] = item:getAttackSpeed(),
        -- [ITEM_ATTRIBUTE_EXTRAATTACK] = item:getExtraAttack(),
    }
    return v[attr]
end
 
function assign_loot_Stat(c)
    local rares = 0
    local h = c:getItemHoldingCount()
    if h > 0 then
        for i = 1, h do
            local available_stats = {}
            local it_u = c:getItem(i - 1)
            local it_id = ItemType(it_u:getId())
            if it_u:isContainer() then
                local crares = assign_loot_Stat(it_u)
                rares = rares + crares
            else
                if not it_id:isStackable() then
                    local wp = it_id:getWeaponType()
                    if wp > 0 then
                        if wp == WEAPON_SHIELD then -- type shield
                            table.insert(available_stats, stats[2])
                        elseif wp == WEAPON_DISTANCE then -- type bow
                            table.insert(available_stats, stats[1])
                            table.insert(available_stats, stats[5])
                            table.insert(available_stats, stats[6])
                            -- not available in 1.1
                            -- table.insert(available_stats, stats[9])
                        elseif wp == WEAPON_WAND then -- type wand
                            table.insert(available_stats, stats[6])
                        -- not available in 1.1
                        -- table.insert(available_stats, stats[9])
                        elseif isInArray({WEAPON_SWORD, WEAPON_CLUB, WEAPON_AXE}, wp) then -- melee weapon
 
                            if it_id:getAttack() > 0 then
                                table.insert(available_stats, stats[1])
                            end
                           
                            if it_id:getDefense() > 0 then
                                table.insert(available_stats, stats[2])
                            end
                           
                            if it_id:getExtraDefense() ~= 0 then
                                table.insert(available_stats, stats[3])
                            end
                            -- not available in 1.1
                            -- table.insert(available_stats, stats[10])
                        end
                    else -- armors, amulets, runes and rings
                        if it_id:getArmor() > 0 then
                            table.insert(available_stats, stats[4])
                        end
 
                        if it_id:getCharges() > 0 then
                            table.insert(available_stats, stats[7])
                        end
 
                        local eq_id = it_id:getTransformEquipId()
                        if eq_id > 0 then
                            table.insert(available_stats, stats[8])
                        end
                    end
                end
            end
 
            if #available_stats > 0 then
                -- skips it all if it's empty
                local tier = math.random(1, #tiers)
                if #tiers[tier].chance > 0 then
                    local statsStored = 0
                    local stats_used = {}
                    for stat = 1, #tiers[tier].chance do
                        if #available_stats > 0 then
                            -- stops if no more stats available
                            if stat - 1 == statsStored then
                                -- checks when it's time to stop adding stats
                                if math.random(1, 100000) <= tiers[tier].chance[stat] then
                                    statsStored = statsStored + 1
 
                                    local selected_stat = math.random(1, #available_stats)
                                    table.insert(stats_used, available_stats[selected_stat])
                                    table.remove(available_stats, selected_stat)
                                end
                            end
                        end
                    end
 
                    if #stats_used > 0 then
                        rares = rares + 1
                        local stat_desc = {}
                        for stat = 1, #stats_used do
                            local v = math.random(
                                stats_used[stat][2].percent[1],
                                stats_used[stat][2].percent[2]
                            ) + math.random(
                                tiers[tier].extra[1],
                                tiers[tier].extra[2]
                            )
                            local basestat = loot_attrToVal(it_u, stats_used[stat][1])
                            it_u:setAttribute(stats_used[stat][1], basestat + math.abs(basestat * v / 100))
                            table.insert(stat_desc, '[' .. stats_used[stat][2].name .. ': +' .. v .. '%]')
                        end
 
                        if tiers[tier].showattr then
                            for stat = 1, #stats_used do
                                it_u:setAttribute(ITEM_ATTRIBUTE_NAME, "[" .. stats_used[stat][2].prefix .. "]" .. it_u:getAttribute(ITEM_ATTRIBUTE_NAME))
                            end
                            it_u:setAttribute(ITEM_ATTRIBUTE_NAME, it_u:getAttribute(ITEM_ATTRIBUTE_NAME) .. " " .. it_id:getName())
                        else
                            it_u:setAttribute(ITEM_ATTRIBUTE_NAME, tiers[tier].prefix .. " " .. it_id:getName())
                        end
 
                        it_u:setAttribute(ITEM_ATTRIBUTE_DESCRIPTION, table.concat(stat_desc, "\n"))
                    end
                end
            end
        end
    end
    return rares
end
 
function find_loot_Container(pos)
    local rares = 0
    local c = Tile(pos):getTopDownItem()
    if c ~= nil then
        if c:isContainer() then
            rares = rares + assign_loot_Stat(c)
            if rares > 0 then
                if rare_popup then
                    local spectators = Game.getSpectators(pos, false, true, 7, 7, 5, 5)
                    for i = 1, #spectators do
                        spectators[i]:say(rare_text, TALKTYPE_MONSTER_SAY, false, spectators[i], pos)
                    end
                end
 
                if rare_effect then
                    pos:sendMagicEffect(rare_effect_id)
                end
            end
            return true
        end
    end
end
 
function onKill(player, target, lastHit)
    if (not isSummon(target)) then
        addEvent(find_loot_Container, 2, target:getPosition())
    end
    return true
end
 
function onLogin(player)
    player:registerEvent("randomstats_loot")
    return true
end

 

Funciona sim, mas o que você  mandou é bem antigo. Recomendo que você use o sistema do Leo ou do Oen, pois são mais avançados. Aconselho a usar o sistema do Oen... Atualmente, eu uso o sistema do Leo porque gosto da maneira como funciona para o que eu queria fazer. No entanto, ambos estão funcionando bem.

 

system Leo.

https://otland.net/threads/tfs-1-x-rarity-rolls-custom-attributes-library.268888/

 system Oen 

Obs:este sistema do Oen é feito pela revscripts. Basta baixar e colocar na pasta data/script, nem precisa registrar nada nos XMLs e assim por diante... Os códigos que você mandou são bem semelhantes, mas muito fáceis de personalizar.

 

https://github.com/Oen44/TFS-Upgrade-System

 

Editado por GM Vortex (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 3 weeks later...
Em 18/01/2024 em 19:28, doukxxt disse:

alguem conseguiu colocar gamestore/shop in game nessa soucer?

 

Estes dias, eu adicionei à source do TFS 1.5, e ao entrar no inGame, ocorreram erros. Acredito que algo esteja faltando... ainda vou estudar sobre o caso. Isso porque o TFS 1.5 8.6 está incompleto, faltando muitas coisas... e ao comparar com o TFS 1.5 8.0 e 7.72, percebo que são bastante diferentes. O TFS 1.5 7.72, mesmo sendo completo, está todo comentado... precisa descomentar e adicionar o gamestore. Já está funcionando perfeitamente... mas é possível adicionar uma custom game store sim.

Link para o post
Compartilhar em outros sites
Em 23/01/2024 em 11:13, GM Vortex disse:

Estes dias, eu adicionei à source do TFS 1.5, e ao entrar no inGame, ocorreram erros. Acredito que algo esteja faltando... ainda vou estudar sobre o caso. Isso porque o TFS 1.5 8.6 está incompleto, faltando muitas coisas... e ao comparar com o TFS 1.5 8.0 e 7.72, percebo que são bastante diferentes. O TFS 1.5 7.72, mesmo sendo completo, está todo comentado... precisa descomentar e adicionar o gamestore. Já está funcionando perfeitamente... mas é possível adicionar uma custom game store sim.

entendo,e uma pena, uma base tao boa dessa so faltava ter uma gamestore.

Link para o post
Compartilhar em outros sites
44 minutos atrás, doukxxt disse:

entendo,e uma pena, uma base tao boa dessa so faltava ter uma gamestore.

Sim, mas você pode usar a custom store, dá para fazer sim...

Link para o post
Compartilhar em outros sites

como consigo ativar pra usar montaria na source do nekiro tfs 1.5, 860? 

fiz essa parte

 

"Quanto à ativação do sistema de montarias via OTClient, basta acessar o arquivo game_features/features.lua e localizar a linha: 'if(version >= 860) then!' e adicionar abaixo 'g_game.enableFeature(GamePlayerMounts)'."

 

mas quando entro no jogo, buga tudo... acredito que seja pq na source está comentada o sistema de montaria. Alguem poderia me ajudar com isso?

Link para o post
Compartilhar em outros sites
11 horas atrás, Bruce Pereira disse:

como consigo ativar pra usar montaria na source do nekiro tfs 1.5, 860? 

fiz essa parte

 

"Quanto à ativação do sistema de montarias via OTClient, basta acessar o arquivo game_features/features.lua e localizar a linha: 'if(version >= 860) then!' e adicionar abaixo 'g_game.enableFeature(GamePlayerMounts)'."

 

mas quando entro no jogo, buga tudo... acredito que seja pq na source está comentada o sistema de montaria. Alguem poderia me ajudar com isso?

Você está usando minha source ou você baixou pelo oficial, Nekiro?

 

Se não for baixou a minha source, então você tem que adicionar alguns códigos adicionais na source. Porque o TFS 1.5 8.6 Nekiro não veio com quase nada... Precisa extrair os códigos do TFS 1.5 7.7 e adicionar na sua source, depois compilar e testar. Pronto, se quiser um commit que eu fiz e postei pelo GitHub, então está aqui.

 

 

https://github.com/Mateuzkl/TFS-1.5-Downgrades-8.60/commit/a98ba04db958d281d1a2ce82fa0a93f1df956882

 

 

veja o GIF está funcionando corretamente. No entanto, é necessário que você tenha sprites 13x(8.6), ou então você pode exportar as montarias e outfits (incluindo aqueles em que o personagem está sentado) e adicionar ao seu cliente 8.6. Alternativamente, você pode utilizar os sprites 13x (8.6) fornecidos por mim, juntamente com os arquivos items.otb e XMLs, para garantir o funcionamento adequado. Se você utilizar apenas os sprites fornecidos por mim, é provável que ocorra uma tela preta devido à incompatibilidade com o items.otb original, projetado para sprites 13x. É crucial que os componentes sejam utilizados em conjunto para evitar esse problema. Além disso, recomendo que você exporte as montarias em seu próprio sprite e, em seguida, substitua os outfits correspondentes. Após realizar esses procedimentos, compile o cliente e teste novamente para verificar se está funcionando corretamente.

 

https://imgur.com/upvRhsJ

Editado por GM Vortex (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
Em 26/01/2024 em 18:17, doukxxt disse:

entendo,e uma pena, uma base tao boa dessa so faltava ter uma gamestore.

O gringo não para de me pedir todos os dias... não tive paciência e resolvi fazer uns scripts + module store e enviei para ele. Ele ficou muito feliz por ter essa store custom.. Ele também usa TFS 1.5 e 8.6. Veja como a store ficou... Se você estiver interessado, posso separar e organizar certinho de acordo com o Znote e Gesior... Depois posto aqui xD

Nesse módulo, não é necessário lidar com opcodes... é apenas o script diretamente, simples... muito prático e ágil.

store2.png

store.png

image.png

image.png

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

O gringo não para de me pedir todos os dias... não tive paciência e resolvi fazer uns scripts + module store e enviei para ele. Ele ficou muito feliz por ter essa store custom.. Ele também usa TFS 1.5 e 8.6. Veja como a store ficou... Se você estiver interessado, posso separar e organizar certinho de acordo com o Znote e Gesior... Depois posto aqui xD

Nesse módulo, não é necessário lidar com opcodes... é apenas o script diretamente, simples... muito prático e ágil.

store2.png

store.png

image.png

image.png

muito bom,por favor compartilhe com a gente

Link para o post
Compartilhar em outros sites
  • Erimyth pinned this tópico

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 Mateus Robeerto
      Vi que muitas pessoas estão reclamando e que não funciona, bugs, erros no console, etc. Então, resolvi baixar a base do Thunder feita por MovieBr, atualizei do TFS 1.3 para o TFS 1.5 e corrigi cerca de 80% dos problemas. No entanto, ainda não consigo encontrar alguns bugs. Quem encontrar os bugs pode me relatar pelo Discord: 82mateusroberto. Dependendo do meu dia, pode levar alguns dias para eu responder e corrigir ou não. Acredito que vocês conseguem corrigir os erros, apenas precisam aprender a consertá-los. Não é difícil. Aproveitem para usar como base do seu mapa ou mesmo do projeto Thunder futuramente! Seguem as imagens que mostram a implementação de montaria e modal widow.
       
      Obs: Alguns mapas/cavernas podem estar vazios por falta de adição. Eu não tinha boas ideias para adicionar, mas vocês podem adicionar ao seu gosto. Tenham uma boa utilização e sucesso com o projeto no futuro!
       
      https://www.mediafire.com/file/0jtn2slt2j67666/baiakthunder-master.rar/file
      https://www.mediafire.com/file/bougg0q6dlpu2fq/tfs+1.5+source.rar/file
      https://www.mediafire.com/file/yq1s63xo6np9v53/860.rar/file
       
      Este servidor só usa o OtClient. Abra o arquivo otclient/modules/game_feature/feature.lua e procure por esta linha.
      if (versão >= 860) then adicione abaixo e salve.. pronto
      g_game.enableFeature(GamePlayerMounts)  
       
      Aqui estão os GIFs
      https://imgur.com/UGdQoSS
      https://imgur.com/OwJ4hpp
      https://imgur.com/7sN1MaJ
       
       
       
      Para quem deseja usar uma gamestore personalizada, há uma disponível para TFS 1.5 e 8.6. Já a compartilhei há alguns dias. Dê uma olhada aqui.
       
       
    • Por GM Antica
      Olá galera tudo bem?
      Achei esse mapa aqui no fórum, porém ele nao estava funcional. Foi retirado alguns bugs visuais, e certificado que não ocorra PVP dentro dos Treiners:
      Modificações:
      ● Capacidade total = 76 players
      ● Treiners divididos com "Wall" para o bom funcionamento e evitar que ocorra mortes dentro dos Treiners...
      ● Paisagens refeitas, um andar "Lobby" foi adicionado para interação e comércio
      ● Teleport adicionado no final de cada corredor para uma possível extensão
      CRÉDITOS: Alissow + GM Antica
       
      Segue alguns Prints:







       
       
      Scan Vírus Total: https://www.virustotal.com/gui/file/456c5959bd38bd7bd61f8c46af1117e0425963da0f8e5afce0bf411bdd366171?nocache=1
       
      Download:
       
      Training Room 8.60 - by Alissow & GM Antica.rar
    • Por Underewar
      https://www.eternalglobal.online/
      Server Features
      Protocol 8.60 and 12.30 Features (working 100%) Bestiary -> Janela  Em Contrução para Client 8.60 ja funcional no servidor. Charm -> Janela Em Contrução para Client 8.60 ja funcional no servidor. Store -> Janela  Em construção para CLIENT 8.60 Quickloot -> Janela  Em Contrução para Client 8.60 ja funcional no servidor. Cast system Wrap system  Custom spawns loading syste WarSystem RaidSystem Offline Trainers Sala de Trainers Stamina Refil Itens Donate Boosted Boss Boosted Creature 5 Eventos Automaticos.
      12x Updates

      NEW ITEMS
      Umbral Items ,Cobra Items,Falcon Items,Warzone Items,Gnome Item

       
      NEW AREAS

      Issavi


       
      Roshamuul

      Oramond

      Cobras

       
       
      Falcons



       
      Warzone 1,2,3


      Warzones 4,5,6


       
       

       

       
       
       
       
       
       
    • Por luanluciano93
      STYLLER OT - 2023 - TFS 1.5 (8.60)
       
      Olá pessoal, hoje venho apresentar meu projeto open para vocês. Sou muito fã do mapa STYLLER, sempre em horas vagas procurava joga-lo, para quem não conhece: é um servidor estilo baiak com mais RPG, e como tenho me interessado pelas engines 1.X, resolvi criar um projeto de servidor Styller usando o TFS 1.5 para versão 8.60. O projeto está sendo desenvolvido no github (projeto github) onde posto atualizações diárias (changelog). Vocês podem postar dúvidas, erros/bugs, dicas e qualquer outra coisa aqui no tópico ou criar um issue no github. Lembre-se de dar FOLLOW no projeto no github e SEGUIR o projeto aqui no fórum para acompanhar as atualizações.
      Informações do Servidor e Sistemas:
      Versão: 8.60 Engine: TFS 1.5 MillhioreBT Downgrade - Branch: main (Nov 11, 2023, 104 commits) Informações. Atualizações. Server Info:
      Dúvidas, erros, dicas e contribuições:
      Caso tenha dúvidas, ou queira resolver algum bug/erro, dar dicas para o projeto, ou também ajudar em sua construção, crie um issue / pull requests pelo github ou use esse tópico.
      Website compatível:
      ZnoteACC - ranch: v2 (Jul 10, 2022, 613 commits) Créditos:
      luanluciano93 GOD Bon (mapa yourots) MillhioreBT, Nekiro e TFS team (pela engine do servidor) leoloko12 (mapa styller) outros Download:
      Todos os arquivos, libs e executável (para windows) estão no repositório do projeto no github (que é onde eu atualizo constantemente), basta fazer o download lá e juntar com a primeira parte.
       
      - LINK GITHUB DO PROJETO STYLLER: https://github.com/luanluciano93/styller
       
      Clique em CODE e depois Download ZIP
       

       
      Imagens: 
       
       
       




×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo