Postado Abril 12, 2023 2 anos Olá, pessoal! Acabei encontrando um script que tinha feito a um tempo atrás. Estou compartilhando aqui para quem quiser usar ou melhorar. É bem parecido com os outros sistemas de roleta, igual deste tópico: https://tibiaking.com/forums/topic/101557-action-cassino-roleta-de-items/ Como funciona? O "Treasure Chest" é um item custom, onde o jogador têm a possibilidade de ganhar itens raros ou bem meia boca. Tudo dependerá da sorte. O jogador precisa tacar o treasure chest na bancada e acionar a alavanca. O treasure chest irá se transformar em vários itens de forma randômica no qual o jogador poderá ou não ganhar. No final, apenas um item é entregue ao jogador. Para entender melhor o seu funcionamento, segue o GIF abaixo: em data > actions > actions.xml Spoiler <!-- ACTIONID DA ALAVANCA --> <action actionid="11403" event="script" value="leverTreasureChest.lua" /> (não se esqueça de colocar o actionid lá no remere's map editor) em data > actions > scripts > crie um arquivo chamado leverTreasureChest.lua Spoiler local config = { treasureChestId = 11402, -- ID do Treasure Chest items = { -- Recompensas que o jogador poderá ganhar. {id = 2493, rare = false, amount = 1}, -- Demon Helmet {id = 2495, rare = true, amount = 1}, -- Demon legs {id = 2523, rare = true, amount = 1}, -- Blessed Shield {id = 6132, rare = true, amount = 1}, -- Pair of Soft Boots {id = 2361, rare = false, amount = 1}, -- Frozen starlight. {id = 5809, rare = true, amount = 1}, -- Soul stone {id = 8890, rare = false, amount = 1}, -- Robe of the underworld {id = 5792, rare = false, amount = 1}, -- Dice {id = 2160, rare = false, amount = 100}, -- Crystal Coin {id = 8918, rare = false, amount = 1}, -- Spellbook of dark mysteries {id = 8854, rare = false, amount = 1}, -- Warsinger bow {id = 2676, rare = false, amount = 1}, -- Banana {id = 5015, rare = true, amount = 1}, -- Mandrake {id = 5903, rare = true, amount = 1}, -- Ferumbras' Hat {id = 2646, rare = true, amount = 1}, -- Golden boots {id = 9932, rare = false, amount = 1}, -- Firewalker boots {id = 11144, rare = false, amount = 1}, -- Nightmare doll {id = 5803, rare = false, amount = 1}, -- Arbalest {id = 8930, rare = false, amount = 1}, -- Emerald sword {id = 9778, rare = false, amount = 1} -- Yalahari Mask }, countRandom = 20, -- Quantidade de vezes que os itens serão gerados até ser o vencedor. counterPosition = {x = 32336, y = 31930, z = 7} -- Posição da bancada. } -- Responsável por inserir o jogador que ganhou a recompensa rara na tabela. function insertLuckerInDatabase(playerId, itemId) local query = db.query or db.executeQuery query("INSERT INTO treasure_chest_luckers (player_id, item_id) VALUES ('"..playerId.."', '"..itemId.."')") end -- Responsável por criar itens aleatoriamente na bancada. function createItemFromCounter(cid, item, index) doCreateItem(item.id, item.amount, config.counterPosition) if index == config.countRandom then doSendMagicEffect(config.counterPosition, 40) giveRewardPlayer(cid, item) return true end end -- Responsável por remover os itens aleatorios da bancada. function removeItemFromCounter(itemId) doRemoveItem(getTileItemById(config.counterPosition, itemId).uid) end -- Responsável por entregar a recompensa ao jogador. -- Responsável por verificar se a recompensa é ou não rara. function giveRewardPlayer(cid, item) if item.rare then doBroadcastMessage("[TREASURE CHEST]: "..getCreatureName(cid).." ganhou "..item.amount.."x "..getItemNameById(item.id)..". Que sorte!!") insertLuckerInDatabase(getPlayerGUID(cid), item.id) else doPlayerSendTextMessage(cid, 22, "Parabens! Voce ganhou 1x "..getItemNameById(item.id).."!") end addEvent(doPlayerAddItem, 1450, cid, item.id, item.amount) addEvent(removeItemFromCounter, 1450, item.id) addEvent(doSendMagicEffect, 1450, getCreaturePosition(cid), 30) end function start(cid) local delay = 200 for i = 1, config.countRandom do local randomItem = config.items[math.random(#config.items)] addEvent(createItemFromCounter, delay - 300, cid, randomItem, i) if i < config.countRandom then addEvent(removeItemFromCounter, delay, randomItem.id) delay = delay + 300 end end end function onUse(cid, item) -- Verifica se o jogador colocou o treasure chest na bancada. if getTileItemById(config.counterPosition, config.treasureChestId).itemid ~= config.treasureChestId then doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Coloque "..getItemNameById(config.treasureChestId).." na bancada.") doSendMagicEffect(getCreaturePosition(cid), CONST_ME_POFF) return true end doRemoveItem(getTileItemById(config.counterPosition, config.treasureChestId).uid) doSendMagicEffect(config.counterPosition, 39) addEvent(start, 300, cid) return false end no banco de dados do servidor, adicione o seguinte código em "SQL": Spoiler CREATE TABLE treasure_chest_luckers ( id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY, player_id INT(11), item_id INT(11), time TIMESTAMP ); Também estou disponibilizando uma página PHP, para quem quiser usar no site do servidor. Na página tem informações sobre o funcionamento, quais são os possíveis prêmios e a lista de jogadores que ganharam os itens raros. Espero ter ajudado de alguma forma! : ) treasure_chest.php
Postado Abril 13, 2023 2 anos boa contribuição mano, sistema interessante pra se colocar no otzin, parabéns pela divulgação. ps: caso não tenha sido você que criou, coloque os créditos, caso tenha sido, de os créditos a você.
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.