Ir para conteúdo

Featured Replies

Postado

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:

 

gifExampleTreasureChest.thumb.gif.53ec11a7476e6b4d236405d178d7dade.gif

 

 

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)

 

exemploActionId.jpg.73738563bd745e06ed7e2cd9ce008e2b.jpg

 

 

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.

 

1177574322_treasureChestPageByImperius(2).thumb.png.e75e44bca7a8a056d7c3025085373df5.pngtreasureChestPageByImperius.thumb.png.2e098ff35a344678b1dd45c6f635c18c.png

 

 

Espero ter ajudado de alguma forma! : )

 

treasure_chest.php

Postado

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.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo