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

Galera, atualizei a source. Sobre os erros que estavam ocorrendo, era o opcode 201. Sabe por quê? Eu tentei habilitar o opcode para ter uma store, mas não funcionou. Resolvi remover todos os códigos e agora não está mais dando erros de opcode 201 e tudo mais. Em breve, vou postar a store customizada, aquela das prints que vocês viram. Vou ter que organizar para cada site compatível, como Gesior, Znote, e outros. Depois posto aqui para vocês baixarem e testarem.

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 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

Em 31/01/2024 em 20:46, Mateus Robeerto 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

@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 essa linha.

 

      Panel
        id: conditionPanel
        layout:
          type: horizontalBox
        height: 22
        padding: 2
        anchors.top: slot8.bottom
        anchors.left: slot6.left
        anchors.right: slot5.right
        margin-top: 4
        border-width: 1
        border-color: #00000077
        background-color: #ffffff22

Adicione abaixo disso.

   StoreButton
        size: 0 20
        anchors.top: prev.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        margin-left: 6
        margin-top: 4
        margin-right: 6
        @onClick: modules.store_module.toggle()

Agora, sobre como comprar itens por pontos, vou postar dois tutoriais para Gesior e Znote.

 

APENAS GESIOR..

Este script serve para trocar itens por pontos. Vou dar um exemplo com a Magic Sword.

 

data/scripts.

local StoreCustom = TalkAction("!shopMagic Sword")

function StoreCustom.onSay(player, words, param)
    local pointsToDeduct = 10

    removePoints(player, pointsToDeduct)

    local newItemID = 2401 -- Replace with the ID of the item the player will receive
    local newItemCount = 1 -- Quantity of the new item to be added to the player's inventory
    player:addItem(newItemID, newItemCount)
    
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully purchased a new item in exchange for" .. pointsToDeduct .. " premium points.")
    
    return false
end

function removePoints(player, amount)
    local accountId = player:getAccountId()
    local query = "UPDATE `accounts` SET `premium_points` = `premium_points` - " .. amount .. " WHERE `id` = " .. accountId
    db.query(query)
end


StoreCustom:separator(" ")
StoreCustom:register()

Para saber quantos pontos você tem, digite !points.

local talkaction = TalkAction("!points")

function Player.getPremiumPoints(self)
    local query = db.storeQuery("SELECT `premium_points` FROM `accounts` WHERE `id` = " .. self:getAccountId())
    if not query then
        return false
    end

    local value = result.getNumber(query, "premium_points")
    result.free(query)
    return value
end

function talkaction.onSay(player, words, param, type)
    if words:lower() == "!points" then
        local points = player:getPremiumPoints() 

        if points > 0 then
            local message = "Your premium points balance is: " .. points
            player:popupFYI(message)
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have premium points.")
        end

        return false
    end
    return true
end

talkaction:separator(" ")
talkaction:register()

Para comprar outfits ou addons.

local outfitsCustom = TalkAction("!shopMage", "!shopCitizen", "!shopHunter", "!shopKnight", "!shopNoblewoman", "!shopNobleman", "!shopSummoner", "!shopWarrior", "!shopBarbarian", "!shopDruid", "!shopWizard", "!shopOriental", "!shopPirate", "!shopAssassin", "!shopBeggar", "!shopShaman", "!shopNorsewoman", "!shopNorseman", "!shopNightmare", "!shopJester", "!shopBrotherhood", "!shopDemon Hunter", "!shopYalaharian", "!shopNewly Wed", "!shopWarmaster", "!shopWayfarer", "!shopRetro Warrior", "!shopRetro Citizen", "!shopRetro Hunter", "!shopRetro Knight", "!shopRetro Mage", "!shopRetro Noblewoman", "!shopRetro Nobleman", "!shopRetro Summoner")

function outfitsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    
    if words == "!shopMage" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 138 or 130 -- Mage outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Mage outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Mage outfit!")
        end
		----------------
    elseif words == "!shopCitizen" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 136 or 128 -- Citizen outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Citizen outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Citizen outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Citizen outfit!")
        end
		----------------
    elseif words == "!shopHunter" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 137 or 129 -- Hunter outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Hunter outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Hunter outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Hunter outfit!")
        end
		----------------
	elseif words == "!shopKnight" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 139 or 131 -- Knight outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Knight outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Knight outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Knight outfit!")
        end
	
    -- Add more commands and messages as necessary
    end

    return false
end

outfitsCustom:separator(" ")
outfitsCustom:register()

Para comprar uma montaria.

local shopsCustom = TalkAction("!shopMidnight Panther", "!shopWidow Queen", "!shopRacing Bird", "!shopWar Bear", "!shopBlack Sheep", "!shopDraptor", "!shopTitanica", "!shopTin Lizzard", "!shopBlazebringer", "!shopRapid Boar", "!shopStampor", "!shopUndead Cavebear", "!shopDonkey", "!shopTiger Slug", "!shopUniwheel", "!shopCrystal Wolf", "!shopWar Horse", "!shopKingly Deer", "!shopTamed Panda", "!shopDromedary", "!shopScorpion King", "!shopDarkbrown Rented Horse", "!shopArmoured War Horse", "!shopShadow Draptor", "!shopGrey Rented Horse", "!shopBrown Rented Horse", "!shopLady Bug", "!shopManta Ray", "!shopIronblight", "!shopMagma Crawler", "!shopDragonling", "!shopGnarlhound", "!shopCrimson Ray", "!shopSteelbeak", "!shopWater Buffalo", "!shopTombstinger", "!shopPlatesaurian", "!shopUrsagrodon", "!shopThe Hellgrip", "!shopNoble Lion", "!shopDesert King", "!shopShock Head", "!shopWalker", "!shopAzudocus", "!shopCarpacosaurus", "!shopDeath Crawler", "!shopFlamesteed", "!shopJade Lion", "!shopJade Pincer", "!shopNethersteed", "!shopTempest", "!shopWinter King", "!shopDoombringer", "!shopWoodland Prince", "!shopHailstorm Fury", "!shopSiegebreaker", "!shopPoisonbane", "!shopBlackpelt", "!shopGolden Dragonfly", "!shopSteel Bee", "!shopCopper Fly", "!shopTundra Rambler", "!shopHighland Yak", "!shopGlacier Vagabond", "!shopShadow Hart", "!shopBlack Stag", "!shopEmperor Deer", "!shopFlying Divan", "!shopMagic Carpet", "!shopFloating Kashmir", "!shopRingtail Waccoon", "!shopNight Waccoon", "!shopEmerald Waccoon", "!shopFlitterkatzen", "!shopVenompaw", "!shopBatcat", "!shopSea Devil", "!shopCoralripper", "!shopPlumfish", "!shopGorongra", "!shopNoctungra", "!shopSilverneck", "!shopSlagsnare", "!shopNightstinger", "!shopRazorcreep", "!shopRift Runner", "!shopNightdweller", "!shopFrostflare", "!shopCinderhoof", "!shopMouldpincer", "!shopBloodcurl", "!shopLeafscuttler", "!shopSparkion", "!shopSwamp Snapper", "!shopMould Shell", "!shopReed Lurker", "!shopNeon Sparkid", "!shopVortexion", "!shopIvory Fang", "!shopShadow Claw", "!shopSnow Pelt", "!shopJackalope", "!shopDreadhare", "!shopWolpertinger", "!shopStone Rhino", "!shopGold Sphinx", "!shopEmerald Sphinx", "!shopShadow Sphinx", "!shopJungle Saurian", "!shopEmber Saurian", "!shopLagoon Saurian", "!shopBlazing Unicorn", "!shopArctic Unicorn", "!shopPrismatic unicorn", "!shopCranium Spider", "!shopCave Tarantula", "!shopGloom Widow", "!shopMole", "!shopMarsh Toad", "!shopSanguine Frog", "!shopToxic Toad", "!shopEbony Tiger", "!shopFeral Tiger", "!shopJungle Tiger", "!shopFleeting Knowledge", "!shopTawny Owl", "!shopSnowy Owl", "!shopBoreal Owl", "!shopLacewing Moth", "!shopHibernal Moth", "!shopCold Percht Sleigh", "!shopBright Percht Sleigh", "!shopDark Percht Sleigh", "!shopFestive Snowman", "!shopMuffled Snowman", "!shopCaped Snowman", "!shopRabbit Rickshaw", "!shopBunny Dray", "!shopCony Cart", "!shopRiver Crocovile", "!shopSwamp Crocovile", "!shopNightmarish Crocovile", "!shopGryphon", "!shopJousting Eagle", "!shopCerberus Champion", "!shopCold Percht Sleigh Variant", "!shopBright Percht Sleigh Variant", "!shopDark Percht Sleigh Variant", "!shopCold Percht Sleigh Final", "!shopBright Percht Sleigh Final", "!shopDark Percht Sleigh Final", "!shopBattle Badger", "!shopEther Badger", "!shopZaoan Badger", "!shopBlue Rolling Barrel", "!shopRed Rolling Barrel", "!shopGreen Rolling Barrel", "!shopFloating Sage", "!shopFloating Scholar", "!shopFloating Augur", "!shopHaze", "!shopAntelope", "!shopSnow Strider", "!shopDusk Pryer", "!shopDawn Strayer", "!shopSpectral Horse", "!shopSavanna Ostrich", "!shopCoral Rhea", "!shopEventide Nandu", "!shopVoracious Hyaena", "!shopCunning Hyaena", "!shopScruffy Hyaena", "!shopWhite Lion", "!shopKrakoloss", "!shopMerry Mammoth", "!shopHoliday Mammoth", "!shopFestive Mammoth", "!shopVoid Watcher", "!shopRune Watcher", "!shopRift Watcher", "!shopPhant", "!shopShellodon", "!shopSingeing Steed", "!shopHyacinth", "!shopPeony", "!shopDandelion", "!shopRustwurm", "!shopBogwurm", "!shopGloomwurm", "!shopEmerald Raven", "!shopMystic Raven", "!shopRadiant Raven", "!shopGloothomotive", "!shopTopaz Shrine", "!shopJade Shrine", "!shopObsidian Shrine", "!shopPoppy Ibex", "!shopMint Ibex", "!shopCinnamon Ibex")

function shopsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    if words == "!shopMidnight Panther" then
        local shopId = 1 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Midnight Panther for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Midnight Panther!")
        end
    elseif words == "!shopWidow Queen" then
        local shopId = 2 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) --
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Widow Queen for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Widow Queen!")
        end
    elseif words == "!shopRacing Bird" then
        local shopId = 3 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Racing Bird for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Racing Bird!")
        end
    elseif words == "!shopWar Bear" then
        local shopId = 4 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the War Bear for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the War Bear!")
        end
 
    end
end

shopsCustom:separator(" ")
shopsCustom:register()

Clique no item para ganhar pontos e poder comprar na store!

local premiumPointsAction = Action()

local function doPlayerAddPremiumPoints(player, count)
    local accountId = player:getAccountId()
    db.query('UPDATE accounts SET premium_points = premium_points +' .. count .. ' WHERE id = ' .. db.escapeString(accountId))
end

function premiumPointsAction.onUse(player, item, fromPosition, target, toPosition)
    doPlayerAddPremiumPoints(player, 100)
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received 100 store point(s) in your account.")
    player:getPosition():sendMagicEffect(28)
    item:remove(1)
    return true
end

premiumPointsAction:id(24774)
premiumPointsAction:register()

 

AGORA É ZNOTE..

magic sword.

local StoreCustom = TalkAction("!shopteste")

function StoreCustom.onSay(player, words, param)
    local pointsToDeduct = 10 -- Replace with the number of points to be deducted

    removePoints(player, pointsToDeduct)

    local newItemID = 2401 -- Replace with the ID of the item the player will receive
    local newItemCount = 1 -- Quantity of the new item to be added to the player's inventory
    player:addItem(newItemID, newItemCount)
    
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully purchased a new item in exchange for " .. pointsToDeduct .. " premium points.")
    
    return false
end

function removePoints(player, amount)
    local accountId = player:getAccountId()
    local query = "UPDATE `znote_accounts` SET `points` = `points` - " .. amount .. " WHERE `id` = " .. accountId
    db.query(query)
end

StoreCustom:separator(" ")
StoreCustom:register()

!points

local StoreCustom = TalkAction("!shopteste")

function StoreCustom.onSay(player, words, param)
    local pointsToDeduct = 10 -- Replace with the number of points to be deducted

    removePoints(player, pointsToDeduct)

    local newItemID = 2401 -- Replace with the ID of the item the player will receive
    local newItemCount = 1 -- Quantity of the new item to be added to the player's inventory
    player:addItem(newItemID, newItemCount)
    
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully purchased a new item in exchange for " .. pointsToDeduct .. " premium points.")
    
    return false
end

function removePoints(player, amount)
    local accountId = player:getAccountId()
    local query = "UPDATE `znote_accounts` SET `points` = `points` - " .. amount .. " WHERE `id` = " .. accountId
    db.query(query)
end

StoreCustom:separator(" ")
StoreCustom:register()

outfits ou addons.

local outfitsCustom = TalkAction("!shopMage", "!shopCitizen", "!shopHunter", "!shopKnight", "!shopNoblewoman", "!shopNobleman", "!shopSummoner", "!shopWarrior", "!shopBarbarian", "!shopDruid", "!shopWizard", "!shopOriental", "!shopPirate", "!shopAssassin", "!shopBeggar", "!shopShaman", "!shopNorsewoman", "!shopNorseman", "!shopNightmare", "!shopJester", "!shopBrotherhood", "!shopDemon Hunter", "!shopYalaharian", "!shopNewly Wed", "!shopWarmaster", "!shopWayfarer", "!shopRetro Warrior", "!shopRetro Citizen", "!shopRetro Hunter", "!shopRetro Knight", "!shopRetro Mage", "!shopRetro Noblewoman", "!shopRetro Nobleman", "!shopRetro Summoner")

function outfitsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    
    if words == "!shopMage" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 138 or 130 -- Mage outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Mage outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Mage outfit!")
        end
		----------------
    elseif words == "!shopCitizen" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 136 or 128 -- Citizen outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Citizen outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Citizen outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Citizen outfit!")
        end
		----------------
    elseif words == "!shopHunter" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 137 or 129 -- Hunter outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Hunter outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Hunter outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Hunter outfit!")
        end
		----------------
	elseif words == "!shopKnight" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 139 or 131 -- Knight outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Knight outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Knight outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Knight outfit!")
        end
		----------------
		elseif words == "!shopNoblewoman" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 140 or 132 --  outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Noblewoman outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Noblewoman outfit!")
        end
	
    -- Add more commands and messages as necessary
    end

    return false
end

outfitsCustom:separator(" ")
outfitsCustom:register()

Montaria.

local shopsCustom = TalkAction("!shopMidnight Panther", "!shopWidow Queen", "!shopRacing Bird", "!shopWar Bear", "!shopBlack Sheep", "!shopDraptor", "!shopTitanica", "!shopTin Lizzard", "!shopBlazebringer", "!shopRapid Boar", "!shopStampor", "!shopUndead Cavebear", "!shopDonkey", "!shopTiger Slug", "!shopUniwheel", "!shopCrystal Wolf", "!shopWar Horse", "!shopKingly Deer", "!shopTamed Panda", "!shopDromedary", "!shopScorpion King", "!shopDarkbrown Rented Horse", "!shopArmoured War Horse", "!shopShadow Draptor", "!shopGrey Rented Horse", "!shopBrown Rented Horse", "!shopLady Bug", "!shopManta Ray", "!shopIronblight", "!shopMagma Crawler", "!shopDragonling", "!shopGnarlhound", "!shopCrimson Ray", "!shopSteelbeak", "!shopWater Buffalo", "!shopTombstinger", "!shopPlatesaurian", "!shopUrsagrodon", "!shopThe Hellgrip", "!shopNoble Lion", "!shopDesert King", "!shopShock Head", "!shopWalker", "!shopAzudocus", "!shopCarpacosaurus", "!shopDeath Crawler", "!shopFlamesteed", "!shopJade Lion", "!shopJade Pincer", "!shopNethersteed", "!shopTempest", "!shopWinter King", "!shopDoombringer", "!shopWoodland Prince", "!shopHailstorm Fury", "!shopSiegebreaker", "!shopPoisonbane", "!shopBlackpelt", "!shopGolden Dragonfly", "!shopSteel Bee", "!shopCopper Fly", "!shopTundra Rambler", "!shopHighland Yak", "!shopGlacier Vagabond", "!shopShadow Hart", "!shopBlack Stag", "!shopEmperor Deer", "!shopFlying Divan", "!shopMagic Carpet", "!shopFloating Kashmir", "!shopRingtail Waccoon", "!shopNight Waccoon", "!shopEmerald Waccoon", "!shopFlitterkatzen", "!shopVenompaw", "!shopBatcat", "!shopSea Devil", "!shopCoralripper", "!shopPlumfish", "!shopGorongra", "!shopNoctungra", "!shopSilverneck", "!shopSlagsnare", "!shopNightstinger", "!shopRazorcreep", "!shopRift Runner", "!shopNightdweller", "!shopFrostflare", "!shopCinderhoof", "!shopMouldpincer", "!shopBloodcurl", "!shopLeafscuttler", "!shopSparkion", "!shopSwamp Snapper", "!shopMould Shell", "!shopReed Lurker", "!shopNeon Sparkid", "!shopVortexion", "!shopIvory Fang", "!shopShadow Claw", "!shopSnow Pelt", "!shopJackalope", "!shopDreadhare", "!shopWolpertinger", "!shopStone Rhino", "!shopGold Sphinx", "!shopEmerald Sphinx", "!shopShadow Sphinx", "!shopJungle Saurian", "!shopEmber Saurian", "!shopLagoon Saurian", "!shopBlazing Unicorn", "!shopArctic Unicorn", "!shopPrismatic unicorn", "!shopCranium Spider", "!shopCave Tarantula", "!shopGloom Widow", "!shopMole", "!shopMarsh Toad", "!shopSanguine Frog", "!shopToxic Toad", "!shopEbony Tiger", "!shopFeral Tiger", "!shopJungle Tiger", "!shopFleeting Knowledge", "!shopTawny Owl", "!shopSnowy Owl", "!shopBoreal Owl", "!shopLacewing Moth", "!shopHibernal Moth", "!shopCold Percht Sleigh", "!shopBright Percht Sleigh", "!shopDark Percht Sleigh", "!shopFestive Snowman", "!shopMuffled Snowman", "!shopCaped Snowman", "!shopRabbit Rickshaw", "!shopBunny Dray", "!shopCony Cart", "!shopRiver Crocovile", "!shopSwamp Crocovile", "!shopNightmarish Crocovile", "!shopGryphon", "!shopJousting Eagle", "!shopCerberus Champion", "!shopCold Percht Sleigh Variant", "!shopBright Percht Sleigh Variant", "!shopDark Percht Sleigh Variant", "!shopCold Percht Sleigh Final", "!shopBright Percht Sleigh Final", "!shopDark Percht Sleigh Final", "!shopBattle Badger", "!shopEther Badger", "!shopZaoan Badger", "!shopBlue Rolling Barrel", "!shopRed Rolling Barrel", "!shopGreen Rolling Barrel", "!shopFloating Sage", "!shopFloating Scholar", "!shopFloating Augur", "!shopHaze", "!shopAntelope", "!shopSnow Strider", "!shopDusk Pryer", "!shopDawn Strayer", "!shopSpectral Horse", "!shopSavanna Ostrich", "!shopCoral Rhea", "!shopEventide Nandu", "!shopVoracious Hyaena", "!shopCunning Hyaena", "!shopScruffy Hyaena", "!shopWhite Lion", "!shopKrakoloss", "!shopMerry Mammoth", "!shopHoliday Mammoth", "!shopFestive Mammoth", "!shopVoid Watcher", "!shopRune Watcher", "!shopRift Watcher", "!shopPhant", "!shopShellodon", "!shopSingeing Steed", "!shopHyacinth", "!shopPeony", "!shopDandelion", "!shopRustwurm", "!shopBogwurm", "!shopGloomwurm", "!shopEmerald Raven", "!shopMystic Raven", "!shopRadiant Raven", "!shopGloothomotive", "!shopTopaz Shrine", "!shopJade Shrine", "!shopObsidian Shrine", "!shopPoppy Ibex", "!shopMint Ibex", "!shopCinnamon Ibex")

function shopsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    if words == "!shopMidnight Panther" then
        local shopId = 1 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Midnight Panther for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Midnight Panther!")
        end
    elseif words == "!shopWidow Queen" then
        local shopId = 2 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) --
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Widow Queen for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Widow Queen!")
        end
    elseif words == "!shopRacing Bird" then
        local shopId = 3 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Racing Bird for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Racing Bird!")
        end
    elseif words == "!shopWar Bear" then
        local shopId = 4 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the War Bear for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the War Bear!")
        end
   
    end
end

shopsCustom:separator(" ")
shopsCustom:register()

Clique no item para ganhar pontos e poder comprar na store.

local premiumPointsAction = Action()

local function doPlayerAddPremiumPoints(player, count)
    local accountId = player:getAccountId()
    db.query('UPDATE znote_accounts SET points = points +' .. count .. ' WHERE account_id = ' .. db.escapeString(accountId))
end

function premiumPointsAction.onUse(player, item, fromPosition, target, toPosition)
    doPlayerAddPremiumPoints(player, 100)
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received 100 store point(s) in your account.")
    player:getPosition():sendMagicEffect(28)
    item:remove(1)
    return true
end

premiumPointsAction:id(24774)
premiumPointsAction:register()

É só baixar o module e colocar no seu OTClient... Pronto! Espero que tenha gostado!

https://drive.google.com/file/d/1Cl06Dx2o1ix2AO7aUXJRe292tLvfgU45/view?usp=sharing

 

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

@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 essa linha.

 


      Panel
        id: conditionPanel
        layout:
          type: horizontalBox
        height: 22
        padding: 2
        anchors.top: slot8.bottom
        anchors.left: slot6.left
        anchors.right: slot5.right
        margin-top: 4
        border-width: 1
        border-color: #00000077
        background-color: #ffffff22

Adicione abaixo disso.


   StoreButton
        size: 0 20
        anchors.top: prev.bottom
        anchors.left: parent.left
        anchors.right: parent.right
        margin-left: 6
        margin-top: 4
        margin-right: 6
        @onClick: modules.store_module.toggle()

Agora, sobre como comprar itens por pontos, vou postar dois tutoriais para Gesior e Znote.

 

APENAS GESIOR..

Este script serve para trocar itens por pontos. Vou dar um exemplo com a Magic Sword.

 

data/scripts.


local StoreCustom = TalkAction("!shopMagic Sword")

function StoreCustom.onSay(player, words, param)
    local pointsToDeduct = 10

    removePoints(player, pointsToDeduct)

    local newItemID = 2401 -- Replace with the ID of the item the player will receive
    local newItemCount = 1 -- Quantity of the new item to be added to the player's inventory
    player:addItem(newItemID, newItemCount)
    
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully purchased a new item in exchange for" .. pointsToDeduct .. " premium points.")
    
    return false
end

function removePoints(player, amount)
    local accountId = player:getAccountId()
    local query = "UPDATE `accounts` SET `premium_points` = `premium_points` - " .. amount .. " WHERE `id` = " .. accountId
    db.query(query)
end


StoreCustom:separator(" ")
StoreCustom:register()

Para saber quantos pontos você tem, digite !points.


local talkaction = TalkAction("!points")

function Player.getPremiumPoints(self)
    local query = db.storeQuery("SELECT `premium_points` FROM `accounts` WHERE `id` = " .. self:getAccountId())
    if not query then
        return false
    end

    local value = result.getNumber(query, "premium_points")
    result.free(query)
    return value
end

function talkaction.onSay(player, words, param, type)
    if words:lower() == "!points" then
        local points = player:getPremiumPoints() 

        if points > 0 then
            local message = "Your premium points balance is: " .. points
            player:popupFYI(message)
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have premium points.")
        end

        return false
    end
    return true
end

talkaction:separator(" ")
talkaction:register()

Para comprar outfits ou addons.


local outfitsCustom = TalkAction("!shopMage", "!shopCitizen", "!shopHunter", "!shopKnight", "!shopNoblewoman", "!shopNobleman", "!shopSummoner", "!shopWarrior", "!shopBarbarian", "!shopDruid", "!shopWizard", "!shopOriental", "!shopPirate", "!shopAssassin", "!shopBeggar", "!shopShaman", "!shopNorsewoman", "!shopNorseman", "!shopNightmare", "!shopJester", "!shopBrotherhood", "!shopDemon Hunter", "!shopYalaharian", "!shopNewly Wed", "!shopWarmaster", "!shopWayfarer", "!shopRetro Warrior", "!shopRetro Citizen", "!shopRetro Hunter", "!shopRetro Knight", "!shopRetro Mage", "!shopRetro Noblewoman", "!shopRetro Nobleman", "!shopRetro Summoner")

function outfitsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    
    if words == "!shopMage" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 138 or 130 -- Mage outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Mage outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Mage outfit!")
        end
		----------------
    elseif words == "!shopCitizen" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 136 or 128 -- Citizen outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Citizen outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Citizen outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Citizen outfit!")
        end
		----------------
    elseif words == "!shopHunter" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 137 or 129 -- Hunter outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Hunter outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Hunter outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Hunter outfit!")
        end
		----------------
	elseif words == "!shopKnight" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 139 or 131 -- Knight outfit ID
        local outfitCost = 50 -- Cost in premium_points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Knight outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Knight outfit addons for " .. outfitCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Knight outfit!")
        end
	
    -- Add more commands and messages as necessary
    end

    return false
end

outfitsCustom:separator(" ")
outfitsCustom:register()

Para comprar uma montaria.


local shopsCustom = TalkAction("!shopMidnight Panther", "!shopWidow Queen", "!shopRacing Bird", "!shopWar Bear", "!shopBlack Sheep", "!shopDraptor", "!shopTitanica", "!shopTin Lizzard", "!shopBlazebringer", "!shopRapid Boar", "!shopStampor", "!shopUndead Cavebear", "!shopDonkey", "!shopTiger Slug", "!shopUniwheel", "!shopCrystal Wolf", "!shopWar Horse", "!shopKingly Deer", "!shopTamed Panda", "!shopDromedary", "!shopScorpion King", "!shopDarkbrown Rented Horse", "!shopArmoured War Horse", "!shopShadow Draptor", "!shopGrey Rented Horse", "!shopBrown Rented Horse", "!shopLady Bug", "!shopManta Ray", "!shopIronblight", "!shopMagma Crawler", "!shopDragonling", "!shopGnarlhound", "!shopCrimson Ray", "!shopSteelbeak", "!shopWater Buffalo", "!shopTombstinger", "!shopPlatesaurian", "!shopUrsagrodon", "!shopThe Hellgrip", "!shopNoble Lion", "!shopDesert King", "!shopShock Head", "!shopWalker", "!shopAzudocus", "!shopCarpacosaurus", "!shopDeath Crawler", "!shopFlamesteed", "!shopJade Lion", "!shopJade Pincer", "!shopNethersteed", "!shopTempest", "!shopWinter King", "!shopDoombringer", "!shopWoodland Prince", "!shopHailstorm Fury", "!shopSiegebreaker", "!shopPoisonbane", "!shopBlackpelt", "!shopGolden Dragonfly", "!shopSteel Bee", "!shopCopper Fly", "!shopTundra Rambler", "!shopHighland Yak", "!shopGlacier Vagabond", "!shopShadow Hart", "!shopBlack Stag", "!shopEmperor Deer", "!shopFlying Divan", "!shopMagic Carpet", "!shopFloating Kashmir", "!shopRingtail Waccoon", "!shopNight Waccoon", "!shopEmerald Waccoon", "!shopFlitterkatzen", "!shopVenompaw", "!shopBatcat", "!shopSea Devil", "!shopCoralripper", "!shopPlumfish", "!shopGorongra", "!shopNoctungra", "!shopSilverneck", "!shopSlagsnare", "!shopNightstinger", "!shopRazorcreep", "!shopRift Runner", "!shopNightdweller", "!shopFrostflare", "!shopCinderhoof", "!shopMouldpincer", "!shopBloodcurl", "!shopLeafscuttler", "!shopSparkion", "!shopSwamp Snapper", "!shopMould Shell", "!shopReed Lurker", "!shopNeon Sparkid", "!shopVortexion", "!shopIvory Fang", "!shopShadow Claw", "!shopSnow Pelt", "!shopJackalope", "!shopDreadhare", "!shopWolpertinger", "!shopStone Rhino", "!shopGold Sphinx", "!shopEmerald Sphinx", "!shopShadow Sphinx", "!shopJungle Saurian", "!shopEmber Saurian", "!shopLagoon Saurian", "!shopBlazing Unicorn", "!shopArctic Unicorn", "!shopPrismatic unicorn", "!shopCranium Spider", "!shopCave Tarantula", "!shopGloom Widow", "!shopMole", "!shopMarsh Toad", "!shopSanguine Frog", "!shopToxic Toad", "!shopEbony Tiger", "!shopFeral Tiger", "!shopJungle Tiger", "!shopFleeting Knowledge", "!shopTawny Owl", "!shopSnowy Owl", "!shopBoreal Owl", "!shopLacewing Moth", "!shopHibernal Moth", "!shopCold Percht Sleigh", "!shopBright Percht Sleigh", "!shopDark Percht Sleigh", "!shopFestive Snowman", "!shopMuffled Snowman", "!shopCaped Snowman", "!shopRabbit Rickshaw", "!shopBunny Dray", "!shopCony Cart", "!shopRiver Crocovile", "!shopSwamp Crocovile", "!shopNightmarish Crocovile", "!shopGryphon", "!shopJousting Eagle", "!shopCerberus Champion", "!shopCold Percht Sleigh Variant", "!shopBright Percht Sleigh Variant", "!shopDark Percht Sleigh Variant", "!shopCold Percht Sleigh Final", "!shopBright Percht Sleigh Final", "!shopDark Percht Sleigh Final", "!shopBattle Badger", "!shopEther Badger", "!shopZaoan Badger", "!shopBlue Rolling Barrel", "!shopRed Rolling Barrel", "!shopGreen Rolling Barrel", "!shopFloating Sage", "!shopFloating Scholar", "!shopFloating Augur", "!shopHaze", "!shopAntelope", "!shopSnow Strider", "!shopDusk Pryer", "!shopDawn Strayer", "!shopSpectral Horse", "!shopSavanna Ostrich", "!shopCoral Rhea", "!shopEventide Nandu", "!shopVoracious Hyaena", "!shopCunning Hyaena", "!shopScruffy Hyaena", "!shopWhite Lion", "!shopKrakoloss", "!shopMerry Mammoth", "!shopHoliday Mammoth", "!shopFestive Mammoth", "!shopVoid Watcher", "!shopRune Watcher", "!shopRift Watcher", "!shopPhant", "!shopShellodon", "!shopSingeing Steed", "!shopHyacinth", "!shopPeony", "!shopDandelion", "!shopRustwurm", "!shopBogwurm", "!shopGloomwurm", "!shopEmerald Raven", "!shopMystic Raven", "!shopRadiant Raven", "!shopGloothomotive", "!shopTopaz Shrine", "!shopJade Shrine", "!shopObsidian Shrine", "!shopPoppy Ibex", "!shopMint Ibex", "!shopCinnamon Ibex")

function shopsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    if words == "!shopMidnight Panther" then
        local shopId = 1 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Midnight Panther for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Midnight Panther!")
        end
    elseif words == "!shopWidow Queen" then
        local shopId = 2 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) --
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Widow Queen for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Widow Queen!")
        end
    elseif words == "!shopRacing Bird" then
        local shopId = 3 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Racing Bird for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Racing Bird!")
        end
    elseif words == "!shopWar Bear" then
        local shopId = 4 -- Mount ID
        local shopCost = 20 -- Cost in premium_points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE accounts SET premium_points = premium_points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the War Bear for " .. shopCost .. " premium_points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the War Bear!")
        end
 
    end
end

shopsCustom:separator(" ")
shopsCustom:register()

Clique no item para ganhar pontos e poder comprar na store!


local premiumPointsAction = Action()

local function doPlayerAddPremiumPoints(player, count)
    local accountId = player:getAccountId()
    db.query('UPDATE accounts SET premium_points = premium_points +' .. count .. ' WHERE id = ' .. db.escapeString(accountId))
end

function premiumPointsAction.onUse(player, item, fromPosition, target, toPosition)
    doPlayerAddPremiumPoints(player, 100)
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received 100 store point(s) in your account.")
    player:getPosition():sendMagicEffect(28)
    item:remove(1)
    return true
end

premiumPointsAction:id(24774)
premiumPointsAction:register()

 

AGORA É ZNOTE..

magic sword.


local StoreCustom = TalkAction("!shopteste")

function StoreCustom.onSay(player, words, param)
    local pointsToDeduct = 10 -- Replace with the number of points to be deducted

    removePoints(player, pointsToDeduct)

    local newItemID = 2401 -- Replace with the ID of the item the player will receive
    local newItemCount = 1 -- Quantity of the new item to be added to the player's inventory
    player:addItem(newItemID, newItemCount)
    
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully purchased a new item in exchange for " .. pointsToDeduct .. " premium points.")
    
    return false
end

function removePoints(player, amount)
    local accountId = player:getAccountId()
    local query = "UPDATE `znote_accounts` SET `points` = `points` - " .. amount .. " WHERE `id` = " .. accountId
    db.query(query)
end

StoreCustom:separator(" ")
StoreCustom:register()

!points


local StoreCustom = TalkAction("!shopteste")

function StoreCustom.onSay(player, words, param)
    local pointsToDeduct = 10 -- Replace with the number of points to be deducted

    removePoints(player, pointsToDeduct)

    local newItemID = 2401 -- Replace with the ID of the item the player will receive
    local newItemCount = 1 -- Quantity of the new item to be added to the player's inventory
    player:addItem(newItemID, newItemCount)
    
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have successfully purchased a new item in exchange for " .. pointsToDeduct .. " premium points.")
    
    return false
end

function removePoints(player, amount)
    local accountId = player:getAccountId()
    local query = "UPDATE `znote_accounts` SET `points` = `points` - " .. amount .. " WHERE `id` = " .. accountId
    db.query(query)
end

StoreCustom:separator(" ")
StoreCustom:register()

outfits ou addons.


local outfitsCustom = TalkAction("!shopMage", "!shopCitizen", "!shopHunter", "!shopKnight", "!shopNoblewoman", "!shopNobleman", "!shopSummoner", "!shopWarrior", "!shopBarbarian", "!shopDruid", "!shopWizard", "!shopOriental", "!shopPirate", "!shopAssassin", "!shopBeggar", "!shopShaman", "!shopNorsewoman", "!shopNorseman", "!shopNightmare", "!shopJester", "!shopBrotherhood", "!shopDemon Hunter", "!shopYalaharian", "!shopNewly Wed", "!shopWarmaster", "!shopWayfarer", "!shopRetro Warrior", "!shopRetro Citizen", "!shopRetro Hunter", "!shopRetro Knight", "!shopRetro Mage", "!shopRetro Noblewoman", "!shopRetro Nobleman", "!shopRetro Summoner")

function outfitsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    
    if words == "!shopMage" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 138 or 130 -- Mage outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Mage outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Mage outfit!")
        end
		----------------
    elseif words == "!shopCitizen" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 136 or 128 -- Citizen outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Citizen outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_RED)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Citizen outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Citizen outfit!")
        end
		----------------
    elseif words == "!shopHunter" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 137 or 129 -- Hunter outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Hunter outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Hunter outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Hunter outfit!")
        end
		----------------
	elseif words == "!shopKnight" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 139 or 131 -- Knight outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add Knight outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Knight outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Knight outfit!")
        end
		----------------
		elseif words == "!shopNoblewoman" then
        local outfitId = (player:getSex() == PLAYERSEX_FEMALE) and 140 or 132 --  outfit ID
        local outfitCost = 50 -- Cost in points to acquire the outfit
        if not player:hasOutfit(outfitId) or not player:hasOutfit(outfitId, 3) then
            db.query("UPDATE znote_accounts SET points = points - " .. outfitCost .. " WHERE account_id = " .. player:getAccountId())
            player:addOutfitAddon(outfitId, 3) -- Add outfit / addons
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_BLUE)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Noblewoman outfit addons for " .. outfitCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Noblewoman outfit!")
        end
	
    -- Add more commands and messages as necessary
    end

    return false
end

outfitsCustom:separator(" ")
outfitsCustom:register()

Montaria.


local shopsCustom = TalkAction("!shopMidnight Panther", "!shopWidow Queen", "!shopRacing Bird", "!shopWar Bear", "!shopBlack Sheep", "!shopDraptor", "!shopTitanica", "!shopTin Lizzard", "!shopBlazebringer", "!shopRapid Boar", "!shopStampor", "!shopUndead Cavebear", "!shopDonkey", "!shopTiger Slug", "!shopUniwheel", "!shopCrystal Wolf", "!shopWar Horse", "!shopKingly Deer", "!shopTamed Panda", "!shopDromedary", "!shopScorpion King", "!shopDarkbrown Rented Horse", "!shopArmoured War Horse", "!shopShadow Draptor", "!shopGrey Rented Horse", "!shopBrown Rented Horse", "!shopLady Bug", "!shopManta Ray", "!shopIronblight", "!shopMagma Crawler", "!shopDragonling", "!shopGnarlhound", "!shopCrimson Ray", "!shopSteelbeak", "!shopWater Buffalo", "!shopTombstinger", "!shopPlatesaurian", "!shopUrsagrodon", "!shopThe Hellgrip", "!shopNoble Lion", "!shopDesert King", "!shopShock Head", "!shopWalker", "!shopAzudocus", "!shopCarpacosaurus", "!shopDeath Crawler", "!shopFlamesteed", "!shopJade Lion", "!shopJade Pincer", "!shopNethersteed", "!shopTempest", "!shopWinter King", "!shopDoombringer", "!shopWoodland Prince", "!shopHailstorm Fury", "!shopSiegebreaker", "!shopPoisonbane", "!shopBlackpelt", "!shopGolden Dragonfly", "!shopSteel Bee", "!shopCopper Fly", "!shopTundra Rambler", "!shopHighland Yak", "!shopGlacier Vagabond", "!shopShadow Hart", "!shopBlack Stag", "!shopEmperor Deer", "!shopFlying Divan", "!shopMagic Carpet", "!shopFloating Kashmir", "!shopRingtail Waccoon", "!shopNight Waccoon", "!shopEmerald Waccoon", "!shopFlitterkatzen", "!shopVenompaw", "!shopBatcat", "!shopSea Devil", "!shopCoralripper", "!shopPlumfish", "!shopGorongra", "!shopNoctungra", "!shopSilverneck", "!shopSlagsnare", "!shopNightstinger", "!shopRazorcreep", "!shopRift Runner", "!shopNightdweller", "!shopFrostflare", "!shopCinderhoof", "!shopMouldpincer", "!shopBloodcurl", "!shopLeafscuttler", "!shopSparkion", "!shopSwamp Snapper", "!shopMould Shell", "!shopReed Lurker", "!shopNeon Sparkid", "!shopVortexion", "!shopIvory Fang", "!shopShadow Claw", "!shopSnow Pelt", "!shopJackalope", "!shopDreadhare", "!shopWolpertinger", "!shopStone Rhino", "!shopGold Sphinx", "!shopEmerald Sphinx", "!shopShadow Sphinx", "!shopJungle Saurian", "!shopEmber Saurian", "!shopLagoon Saurian", "!shopBlazing Unicorn", "!shopArctic Unicorn", "!shopPrismatic unicorn", "!shopCranium Spider", "!shopCave Tarantula", "!shopGloom Widow", "!shopMole", "!shopMarsh Toad", "!shopSanguine Frog", "!shopToxic Toad", "!shopEbony Tiger", "!shopFeral Tiger", "!shopJungle Tiger", "!shopFleeting Knowledge", "!shopTawny Owl", "!shopSnowy Owl", "!shopBoreal Owl", "!shopLacewing Moth", "!shopHibernal Moth", "!shopCold Percht Sleigh", "!shopBright Percht Sleigh", "!shopDark Percht Sleigh", "!shopFestive Snowman", "!shopMuffled Snowman", "!shopCaped Snowman", "!shopRabbit Rickshaw", "!shopBunny Dray", "!shopCony Cart", "!shopRiver Crocovile", "!shopSwamp Crocovile", "!shopNightmarish Crocovile", "!shopGryphon", "!shopJousting Eagle", "!shopCerberus Champion", "!shopCold Percht Sleigh Variant", "!shopBright Percht Sleigh Variant", "!shopDark Percht Sleigh Variant", "!shopCold Percht Sleigh Final", "!shopBright Percht Sleigh Final", "!shopDark Percht Sleigh Final", "!shopBattle Badger", "!shopEther Badger", "!shopZaoan Badger", "!shopBlue Rolling Barrel", "!shopRed Rolling Barrel", "!shopGreen Rolling Barrel", "!shopFloating Sage", "!shopFloating Scholar", "!shopFloating Augur", "!shopHaze", "!shopAntelope", "!shopSnow Strider", "!shopDusk Pryer", "!shopDawn Strayer", "!shopSpectral Horse", "!shopSavanna Ostrich", "!shopCoral Rhea", "!shopEventide Nandu", "!shopVoracious Hyaena", "!shopCunning Hyaena", "!shopScruffy Hyaena", "!shopWhite Lion", "!shopKrakoloss", "!shopMerry Mammoth", "!shopHoliday Mammoth", "!shopFestive Mammoth", "!shopVoid Watcher", "!shopRune Watcher", "!shopRift Watcher", "!shopPhant", "!shopShellodon", "!shopSingeing Steed", "!shopHyacinth", "!shopPeony", "!shopDandelion", "!shopRustwurm", "!shopBogwurm", "!shopGloomwurm", "!shopEmerald Raven", "!shopMystic Raven", "!shopRadiant Raven", "!shopGloothomotive", "!shopTopaz Shrine", "!shopJade Shrine", "!shopObsidian Shrine", "!shopPoppy Ibex", "!shopMint Ibex", "!shopCinnamon Ibex")

function shopsCustom.onSay(player, words, param)
    if words == "/shop" then
        return false
    end
    
    if words == "!shopMidnight Panther" then
        local shopId = 1 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Midnight Panther for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Midnight Panther!")
        end
    elseif words == "!shopWidow Queen" then
        local shopId = 2 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) --
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Widow Queen for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Widow Queen!")
        end
    elseif words == "!shopRacing Bird" then
        local shopId = 3 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the Racing Bird for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the Racing Bird!")
        end
    elseif words == "!shopWar Bear" then
        local shopId = 4 -- Mount ID
        local shopCost = 20 -- Cost in points to acquire the shop
        if not player:hasMount(shopId) then
            db.query("UPDATE znote_accounts SET points = points - " .. shopCost .. " WHERE account_id = " .. player:getAccountId())
            player:addMount(shopId) -- 
            player:getPosition():sendMagicEffect(CONST_ME_MAGIC_GREEN)
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You acquired the War Bear for " .. shopCost .. " points!")
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You already have the War Bear!")
        end
   
    end
end

shopsCustom:separator(" ")
shopsCustom:register()

Clique no item para ganhar pontos e poder comprar na store.


local premiumPointsAction = Action()

local function doPlayerAddPremiumPoints(player, count)
    local accountId = player:getAccountId()
    db.query('UPDATE znote_accounts SET points = points +' .. count .. ' WHERE account_id = ' .. db.escapeString(accountId))
end

function premiumPointsAction.onUse(player, item, fromPosition, target, toPosition)
    doPlayerAddPremiumPoints(player, 100)
    player:sendTextMessage(MESSAGE_EVENT_ADVANCE, "You have received 100 store point(s) in your account.")
    player:getPosition():sendMagicEffect(28)
    item:remove(1)
    return true
end

premiumPointsAction:id(24774)
premiumPointsAction:register()

É só baixar o module e colocar no seu OTClient... Pronto! Espero que tenha gostado!


https://drive.google.com/file/d/1Cl06Dx2o1ix2AO7aUXJRe292tLvfgU45/view?usp=sharing

 

muito obrigado mano,vc vai ajudar muita gente com esse tutorial :)

 

Link para o post
Compartilhar em outros sites
Em 23/02/2024 em 21:23, doukxxt disse:

!points

Postei sem querer. Agora, sim, está usando o comando !pontos para saber quantos pontos você tem, apenas para o Znote.

 

local talkaction = TalkAction("!points")

function Player.getZnotePoints(self)
    local query = db.storeQuery("SELECT `points` FROM `znote_accounts` WHERE `id` = " .. self:getAccountId())
    if not query then
        return 0
    end

    local value = result.getNumber(query, "points")
    result.free(query)
    return value or 0
end

function talkaction.onSay(player, words, param, type)
    if words:lower() == "!points" then
        local points = player:getZnotePoints()

       if points > 0 then
            local message = "Your premium points balance is: " .. points
            player:popupFYI(message)
        else
            player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "You don't have premium points.")
        end

        return false
    end
    return true
end

talkaction:separator(" ")
talkaction:register()

 

Link para o post
Compartilhar em outros sites
41 minutos atrás, SHARINGAN.exe disse:

Tem shop pro old client 8.60 tb

Que legal, curti! Você poderia me mostrar como funciona a modal window e a montaria para eu ver, mesmo que seja através de vídeo?

Link para o post
Compartilhar em outros sites
  • Erimyth pinned this tópico
  • 3 weeks later...

@doukxxt Você precisa abrir o arquivo do OTC com o Visual Studio Code para editar, não com o notepadd ou o editor de texto padrão do Windows. O Visual Studio Code ou o Sublime Text são ideais, sem erros

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

@doukxxt Você precisa abrir o arquivo do OTC com o Visual Studio Code para editar, não com o notepadd ou o editor de texto padrão do Windows. O Visual Studio Code ou o Sublime Text são ideais, sem erros

continua o msm erro

image.thumb.png.5c7d3a115d2fb4fdd0071c10bc597234.png

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

Como faço para abrir o items.otb no editor, não sei se o que estou usando que é o problema, mas baixei as sprite 13x to 8.60 que esta no link:


image.png.ea6e987aa48aba311c92639d55b4aac6.png
Em preferences eu busco essa pasta mostrada a cima:

image.png.8133a4469048a2081a460d7d99aaa466.png

 

Quando abro o items.otb da esse erro:
image.thumb.png.38d979eeb3b072f2ff47dc37debde344.png
 

 

>> OTB version 20.
>> PluginTwo: Error while parsing, unknown flag 0x46 at id 101.
>> Failed to load dat.
>> Loading client files.
>> Client version 860.

 

O items.otb veio no link tbm junto da spr e dat
 

Editado por 6676220
Resolvido, era o flag extended mesmo vlw (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

Abrimos normalmente aqui, mas você marcou o SPR como estendido? Segue a imagem.

 

image.png.7af6ace00524a168b87ef7796b6e5dc6.pngimage.thumb.png.7b33bf1730a5a192491fefc31f746ef5.png

Recomendo usar os arquivos items.otb e XML, pois são mais recentes e corrigem as coisas aqui. Basta baixar e ser feliz.

https://drive.google.com/file/d/1QRSvVnl4NxlytdPrdSh0_DDETTWrGTx-/view

Link para o post
Compartilhar em outros sites

resolvi o b.o. do item editor e já esta funcionando as novas sprites no OT mas agora não consigo abrir o RME para editar

 

eu só peguei esses arquivos e joguei aqui dentro dessa pata substituindo:


image.thumb.png.5c23f3e06b42fe41911910d93464acbe.png

 

 

mas quando vou abrir o mapa do OT fica nisso:
image.thumb.png.e4724acafb6f91a206ad0f3c6b9e65a8.png
 

 

E não vai, para de funcionar, o que poderia ser?

Link para o post
Compartilhar em outros sites

Acredito que seu RME Editor está desatualizado. É melhor baixar a versão mais recente, pois ela abriu o mapa normalmente, sem problemas

Link para o post
Compartilhar em outros sites

Opa, primeiro vlw por responder, baixei o editor que me passou e baixei as DLL, joguei as DLL dentro da pasta e assim consegui abrir ele, porém ainda continuo com problema:


image.thumb.png.47f15849d447f8bba9e86a7758d28ac3.png
 

só ocorre ao jogar o .dat e .spr que peguei do seu post, o servidor abre, consigo ver os itens novos e tudo, só abris o editor come essas sprites que esta sendo o b.o.

se eu jogo só o otb ele abre mas ai não aparece as imagens:

 

 

image.thumb.png.8490e490ac31020f88055f70dc9124cd.png

 

mas assim que jogo esse .dat e .spr que baixe do post:

 

image.thumb.png.29d45e41b6e849a0f45f0a1f73c2bc6e.png

 

a pasta 860 do Editor esta assim:

 

image.thumb.png.5495bcaa9fd0e04dede4ec82b37e947c.png

 

seria pedir demais me enviar essa pasta completa para testar? Desde já muito obrigado

Editado por 6676220
Resolvido, faltava o arquivo otfi marcado com extended no RME (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 4 weeks later...
Postado (editado)
14 horas atrás, KrzychuKurwy disse:

But @Mateus Robeerto how to fix that?

Call me on Discord, I'll guide you on how to compile the source code. The other items.xml have already been fixed, so I can send them to you

 

 

82mateusroberto

Editado por Mateus Robeerto (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • 3 weeks later...

Qual OTClient eu uso? To usando uma versão aqui do fórum que é o "OTClient_Personal" que é uma mistura de vários OTClient, porém se eu tento logar da aquele erro de Tibia.dat, alguém sabe resolver?

image.thumb.png.0edd645b1ab9fe9c1179e9d0e50c2cc1.png

 

Edit 1: Testei também com o https://github.com/mehah/otclient que é um dos OTClient mais atualizados, se não for o mais e também da erro de dat. ='(

Editado por pecci96
edit1 (veja o histórico de edições)
Link para o post
Compartilhar em outros sites
  • Sub-Admin
Em 11/06/2024 em 16:04, pecci96 disse:

Qual OTClient eu uso? To usando uma versão aqui do fórum que é o "OTClient_Personal" que é uma mistura de vários OTClient, porém se eu tento logar da aquele erro de Tibia.dat, alguém sabe resolver?

image.thumb.png.0edd645b1ab9fe9c1179e9d0e50c2cc1.png

 

Edit 1: Testei também com o https://github.com/mehah/otclient que é um dos OTClient mais atualizados, se não for o mais e também da erro de dat. ='(

compilar a versão do cliente para versão 8.60 v2 ou 8.60 v1 por isso... se ainda n funcionar, compile no modo estendido ou visse versa.

 

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 11/06/2024 em 16:04, pecci96 disse:

Qual OTClient eu uso

Eu recomendo que você baixe o otclient da Academy, é bem melhor do que o Kondra. Eu sei que o otclient da Mehah é mais atualizado sim. Tente seguir o que o L3K0T disse. Se não funcionar, vou me empenhar para resolver o caso e fazer com que funcione tanto o otclient da Academy quanto o da Mehah.

9 horas atrás, Mateus Robeerto disse:

Eu recomendo que você baixe o otclient da Academy, é bem melhor do que o Kondra. Eu sei que o otclient da Mehah é mais atualizado sim. Tente seguir o que o L3K0T disse. Se não funcionar, vou me empenhar para resolver o caso e fazer com que funcione tanto o otclient da Academy quanto o da Mehah.

Desista da minha base TFS que tem montaria e modal widow... e baixe a base da Sarah, muito melhor e mais atualizada. Ela possui montaria e suporta opcode através do config.lua do servidor para ativar a montaria, entre outras coisas. Vale a pena experimentar a base da Sarah!

Link para o post
Compartilhar em outros sites
  • 3 months later...
Em 07/10/2023 em 22:04, Mateus Robeerto 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 · 142 downloads

mounts.xml 15.55 kB · 136 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.

como abrir o mapa usando o rme? tentei usando várias maneiras e nenhuma corresponde

aka aka

 

monki-flip-monkey.gif

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 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