Postado Setembro 8, 2018 6 anos Este é um post popular. Fala clã, há um tempo soltei um sistema privado meu no grupo do TK no Discord e hoje resolvi soltar aqui no Fórum também, abaixo irei explicar um pouquinho sobre esse sistema. O que é Legendary Lever? É um sistema de alavancas que vendem itens (aleatórios), similar à uma surprise bag, porém cada item possui x porcento de chances de dropar ao jogador que estiver pagando para tentar a sorte. Qual o objetivo afinal? Bom, na época que desenvolvi esse sistema, era para um cliente meu que acabou desistindo da compra quando eu estava prestes a começar a desenvolver. O objetivo do cara era criar 5 alavancas, onde cada alavanca teria pelo menos 1 item lendário com 3% de chance de dropar ao jogador que estivesse puxando a alavanca, e cada alavanca teria entre 5 a 7 itens ao todo (a maioria itens simples). Mas a ideia por trás de tudo era lucrar com isso, fazer jogadores donatarem mais para poder tentar pegar esses itens lendários (claro, o cara ia ter que gastar muito pra isso). Terminou que resolvi desenvolver esse sistema com proteção contra duplo click, exaustão, logs de ações, etc. Em qual versão posso utilizar esse sistema? Esse sistema foi programado para rodar em TFS 1.x. Se vocês quiserem, em breve posso converter para 0.4 e trazer ao Fórum, mas aí vai depender do feedback Sem mais delongas, vamos ao sistema! antes de tudo, crie uma pasta chamada legendarylever em data/actions/scripts, e dentro da legendarylever crie outra pasta chamada lib. data/actions/scripts/legendarylever/lib/lib.lua : Spoiler -- Legendary Lever was developed by lyu (Legendary Lever now is public) if not randomitems then randomitems = {} function randomitems:saveLog(...) local message = '[%s] %s has found %s %s\n' local file = io.open('data/logs/randomitems/' .. ... .. '.log', 'a') if not file then return end io.output(file) io.write(message:format(os.date('%d/%m/%Y %H:%M'), ...)) io.close(file) end function randomitems:random(p, obj, exhaust, item) if not rawequal(type(obj), 'table') then return error('table of items not found.') end if not p:getGroup():getAccess() then -- double-click protect if obj.exhaust and obj.exhaust > os.time() then return p:getMoney() >= obj.coust and p:sendCancelMessage('Lever exhausted for ' .. obj.exhaust - os.time() ..' seconds.') or true end -- the exhaust of x object is global for all players obj.exhaust = os.time() + (not exhaust and 2 or exhaust) if obj.onlypremium and not p:isPremium() then return p:say('Sorry, only premium players can use this lever.', TALKTYPE_MONSTER_SAY) end if not p:removeMoney(obj.coust) then return p:say('Payment fail, you need ' .. obj.coust .. ' gold coins.', TALKTYPE_MONSTER_SAY) end if exhaust > 1 then item:transform(item.itemid + 1) addEvent(function() item:transform(item.itemid - 1) end, ((obj.exhaust - os.time())-1) * 1000) end end -- this function is necessary to repeat the loop if the result was nil local function randomize() for _, it in ipairs(obj) do if it.chance>=100-(math.random()*100) then local item = p:addItem(it.itemid, it.amount) local name = not rawequal(type(item), 'table') and item:getName() or item[1]:getName() self:saveLog(p:getName(), it.amount, name) p:save() -- [security] save player if it.broadcast then local msg = '[Legendary Levers] %s has found %s %s.' if not p:getGroup():getAccess() then Game.broadcastMessage(msg:format(p:getName(), rawequal(it.amount, 1) and 'a' or it.amount, name .. '' .. (it.amount > 1 and 's' or '')), MESSAGE_EVENT_ADVANCE) end end p:sendTextMessage(MESSAGE_INFO_DESCR, 'Congratulations, you have found ' .. (rawequal(it.amount, 1) and 'a' or it.amount) .. ' ' .. name .. '' .. (it.amount > 1 and 's.' or '.')) return not p:isInGhostMode() and p:getPosition():sendMagicEffect(it.broadcast and 7 or 15) end end -- repeat randomize() end -- called by self:random(...) randomize() return true end else error('>> randomitems/lib.lua loading failed.') end agora abra data/lib/lib.lua e inclua esta linha : dofile('data/actions/scripts/legendarylever/lib/lib.lua') Feito isso, você já pode começar a criar os arquivos das alavancas. Vamos então criar a nossa primeira alavanca! data/actions/scripts/legendarylever/royalcrossbow.lua : Spoiler -- Legendary Lever was developed by lyu (Legendary Lever now is public) local lever = { {itemid = 8851, amount = 1, chance = 5, broadcast = true}, {itemid = 8300, amount = 1, chance = 12, broadcast = false}, {itemid = 9971, amount = 50, chance = 25, broadcast = false}, {itemid = 7253, amount = 1, chance = 65, broadcast = false}, } lever.onlypremium = false lever.coust = 10000 function onUse(player, item) return randomitems:random(player, lever, 2, item) end data/actions/actions.xml : <action actionid="3370" script="legendarylever/royalcrossbow.lua"/> E por fim, adicione a actionid 3370 em uma alavanca no Remere's Map Editor! ? Para criar novas alavancas, você já deve saber o que se fazer. Sim! CTRL + C CTRL + V no arquivo royalcrossbow.lua, renomea o nome, edite a tabela de itens, preços, premium etc e adicione a tag no XML com uma nova actionid (a actionid põe em uma nova alavanca no Remere's). A configuração não preciso nem explicar né! A única dica que dou, é deixar brodacast = true apenas nos itens mais difíceis de dropar, ou seja, os lendários. Porque isso irá anunciar ao servidor todo que aquele player conseguiu o danado do item haha ? Então é isso, espero que tenham gostado! *Edit: Para salvar log de ações, crie uma pasta chamada randomitems em data/logs. Créditos: Lyu (isme)
Postado Setembro 8, 2018 6 anos Parabéns, seu tópico de conteúdo foi aprovado! Muito obrigado pela sua contribuição, nós do Tibia King agradecemos. Seu conteúdo com certeza ajudará à muitos outros, você recebeu +1 REP. Spoiler Congratulations, your content has been approved! Thank you for your contribution, we of Tibia King we are grateful. Your content will help many other users, you received +1 REP. Compre seus Scripts Agora totalmente seguro e de forma rápida, aceitamos também encomendas. discord.gg/phJZeHa2k4 Projeto ATS (Naruto) Informações Abaixo Facebook Youtube Discord Tutoriais / Conteúdos Clique Aqui
Postado Setembro 9, 2018 6 anos @Lyu Eu achei o sistema bem diferente e a ideia é boa (os esquemas de double click, exaustão, etc. também, bem completo), da pra fazer uma salinha separada no templo com alavancas, podendo cair diferentes tipos de itens. Vou compartilhar seu conteúdo na página para mais pessoas visualizarem, usarem ou trazerem feedback! Obrigado pela contribuição! Ot Design: https://discord.gg/VgtVRNmCD7
Postado Setembro 9, 2018 6 anos Autor 1 hora atrás, Daniel disse: @Lyu Eu achei o sistema bem diferente e a ideia é boa (os esquemas de double click, exaustão, etc. também, bem completo), da pra fazer uma salinha separada no templo com alavancas, podendo cair diferentes tipos de itens. Vou compartilhar seu conteúdo na página para mais pessoas visualizarem, usarem ou trazerem feedback! Obrigado pela contribuição! Muito obrigado, @Daniel!
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.