Jump to content

Apostar em Guerras de Guilds


Mário.

Recommended Posts

Até agora não vi nenhumas serverfiles ou mesmo um servidor português onde possas apostar nas guerras de guild.

A quest  das serverfiles do SG não funcionam, uma vez que buscava valores errados na source (lembrando que elas eram 34k, antes do leak da source).

Tinha feito isto a pensar para o meu servidor (poderão reparar na quest) mas como sou fã de partilha, decidi publicar isto.

 

A quest funciona da seguinte maneira:

Só podes apostar se tiveres um bilhete (poderá ser editado o item a querer);

Podes fazer quantas apostas tu quiseres dependendo do número de bilhetes tiveres;

Não podes apostar nas guerras que a tua guild participa;

Tens 4 opções de aposta (facilmente editado);

Recebes o dobro do que apostaste.

 

 

A única pessoa a quem dei esta quest foi ao Tiago, dono do GalaxyMT2.

A partir de hoje, será de todos vós.


Tutorial

 

game/src/questlua_guild.cpp

Pesquisar por:

int guild_get_reserve_war_table(lua_State * L)

 

Por baixo de todo o código dele, adicionar:

	int guild_sistema_apostas(lua_State* L)
	{		
		FBuildLuaGuildWarList f(L);
		CGuildManager::instance().for_each_war(f);
		return 1;
	}

	int guild_dar_recompensa(lua_State* L)
	{
		LPCHARACTER ch = CQuestManager::instance().GetCurrentCharacterPtr();

		CGuild* pGuild = ch->GetGuild();

		lua_pushnumber(L, (pGuild!=NULL)?pGuild->GetGuildWarWinCount():0);
		return 1;
	}

 

Pesquisem por:

			{ "get_reserve_war_table",	guild_get_reserve_war_table	},

 

Por baixo, adicionem:

			{ "sistema_apostas",		guild_sistema_apostas		},
			{ "dar_recompensa",		guild_dar_recompensa		},

 

Agora só precisam de compilar, sem esquecer de adicionarem isto no quest_functions:

guild.dar_recompensa
guild.sistema_apostas

 

Em baixo forneço-vos a quest com comentários de forma a explicar o que cada código faz de forma a terem uma leitura mais compreensível:

 

--[[
Esta quest foi feita pelo Mário, influenciado pela @SG / @skype: iw0web.69
Como é que isto funciona?
Assim que houver uma guerra de guild, um jogador poderá apostar indo no Beleguim da Batalha.
Lá, será disponibilizado todas as informações a saber antes de fazer alguma aposta e o que ganharão se a guild que apostou vença.
Por norma, os jogadores que pertençam a uma guild que esteja em war, não poderão apostar, juntamente com os que não possuem o bilhete da aposta, de forma a evitar que criem outras contas/personagens para terem lucro com o sistema.
Se o jogador vencer, receberá a recompensa em forma de "item" no armazém onde terá que clicar de forma a receber o dinheiro.

Testado e funcional em: 17/07/2017
]]
quest sistema_apostas begin
	state start begin
	--[[
	function dar_recompensa()
		if guild.dar_recompensa < 1 then
			say_title("LSM2:")
			say("Parabéns, a guild que apostaste acabou de ganhar a war.")
			say("Vais receber 100.000.000.000 yang.")
			pc.changegold(100000000000)
		end
	end
	]] -- Isto foi um teste ridículo que fiz
		when guild_war_observer1.chat."Apostar nas Guerras de Guild" or -- Serão os NPCs onde será posto o sistema // neste caso no Beleguim da Batalha. 
			 guild_war_observer2.chat."Apostar nas Guerras de Guild" or  -- Porquê que são 3?
			 guild_war_observer3.chat."Apostar nas Guerras de Guild" begin -- Porque existem 3 beleguins da batalha, 1 para cada reino. 
			 
				say_title("LSM2:") -- Daqui para baixo, é o que será exibido.
				say("Para apostares nas guerras de guild,[ENTER]",
				"precisas de ter conhecimento de certas coisas:")
				wait()
				say_title("LSM2:")
				say("")
				say("1. Só podes apostar em guerras que estejam a acontecer.")
				say("")
				say("2. Só é possível fazeres 1 aposta se tiveres o bilhete para tal.")
				say("")
				say("3. Recebes o triplo do que apostas.")
				say_reward("Ex: Apostar 1.000.000 yang para ganhar 3.000.000")
                say("")
                wait()
				
				local g = guild.sistema_apostas()
				local gname_table = {}

				table.foreachi(g,
				function(n, p)
					gname_table[n] = guild.get_name(p[1]).." vs "..guild.get_name(p[2])
				end)

				if table.getn(g) == 0 then -- Caso não exista nenhuma guerra de guilds a acontecer, é isto que será exibido:
					say_title("LSM2:")
					say("")
					say("Não existe nenhuma guerra de guild a decorrer.")
				else -- Caso contrário, será isto:
				
					if pc.count_item(30300) >= 1 then -- Condição em caso de terem o igual ou superior a 1 item 30300
						pc.remove_item(30300,1) -- É removido em caso de existir alguma guerra de guild
						gname_table[table.getn(g)+1] = "Cancelar" -- Cancela a escolha da aposta.

						local s = select_table(gname_table) -- Aparece as guilds que estejam em guerra, de forma a poderes escolher a aposta
					
						if s != table.getn(gname_table) then 
                    
						local primeira_guild = guild.get_name(g[s][1]) -- Primeira guild, que neste caso é o que desafiou a outra
						local segunda_guild = guild.get_name(g[s][2]) -- A guild que foi desafiada

						say_title("LSM2:")
						say("")
						say("Escolhe em qual das guilds desejas apostar:")
                    
						local guild_s = select(primeira_guild, segunda_guild, "Cancelar")

							if guild_s != 3 then -- Apenas em caso do jogador não clicar na terceira opção, que neste caso é o Cancelar
							
								local verificar = guild.get_any_war() 
								--[[ 
								Verifica se a guild está em guerra. 
								Perdão por não fazer outra função para isto, mas para além da preguiça, o get_any_war funciona perfeitamente para este caso // questlua_guild.cpp : if (ch->GetGuild()) lua_pushnumber(L, ch->GetGuild()->UnderAnyWar());
								]]
							
									if verificar > 1 then  -- Os jogadores que pertençam a guild que está em guerra não poderá apostar.
										pc.give_item2(30300,1) 
										--[[
										Porquê isto? Porque o jogador que pertença a guild que ia apostar, ficaria sem o cofre uma vez já tirado na linha 44. 
										Para compensar, é-lhe dado outro cofre. Sim, há formas mais fáceis de fazer isto, mas para a simplicidade da quest, será feita desta forma.
										]]
										say_title("LSM2:")
										say("Não podes apostar em guerras que a tua guild participa.")
										return
									end

								say_title("LSM2:")
								say("")
								say("Quanto é yang queres apostar?")

								local tabela_aposta_de_yang = {}

								table.foreachi(guild_war_bet_price_table, -- Os valores para a aposta serão buscados através da função guild_war_bet_price_table que se encontra no questlib.lua
								function(n, p)
									tabela_aposta_de_yang[n] = p.." Yang" 
									--[[ Por default, os valores estão: 
											10000,
											30000,
											50000,
											100000
										Mais uma vez repito, podem alterar o valor das apostas no questlib.lua, pesquisando pelo seguinte: guild_war_bet_price_table ]]
								end)

								tabela_aposta_de_yang[table.getn(tabela_aposta_de_yang)+1] =  "Cancelar"

								local apostar_guerra = select_table(tabela_aposta_de_yang)

								if apostar_guerra != table.getn(tabela_aposta_de_yang) then
									if pc.gold < guild_war_bet_price_table[apostar_guerra] then
										say_title("LSM2:")
										say("")
										say("Não tens esse montante de yang.")
										say("")
									else
										say_title("LSM2:")
										say("")
										say("Aconselho a veres a guerra de guild que apostaste[ENTER]",
										"de forma a controlares a tua aposta.[ENTER]",
										"Boa sorte!")
										pc.changegold(-guild_war_bet_price_table[apostar_guerra])
										guild.war_bet(g[s][1], g[s][guild_s+1], guild_war_bet_price_table[apostar_guerra])
										guild.dar_recompensa()
										sistema_apostas.dar_recompensa()
									end -- if pc.gold < guild_war_bet_price_table[apostar_guerra]
								end --  if apostar_guerra != table.getn(tabela_aposta_de_yang)
							end -- if guild_s !=  
						end -- if s != table.getn(gname_table)
					else
						say_title("LSM2:")
						say("")
						say("Não tens o bilhete para apostar nas guerras de guild.")
						say("Volta quando o tiveres.")
					end -- if table.getn(g)
				end -- if pc.count_item(30300)
		end -- when
	end -- state
end -- quest

 

Qualquer dúvida, não hesitem em deixar um comentário.

 

Edited by Mário.
Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...