Ir para conteúdo

Featured Replies

Postado

@Lyu Seu lindo kkk <3 muito bom o script... parabéns doido tmj ^^ 

  • Respostas 8
  • Visualizações 1.9k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • @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 difere

  • 2 weeks later...
Postado
Em 08/09/2018 em 17:15, Lyu disse:

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 :

  Mostrar conteúdo oculto


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

  Mostrar conteúdo oculto


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

 

 

 

o.4 seria uma boa <3 

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

Informação Importante

Confirmação de Termo