Jump to content

Admin Whisper


Mário.

Recommended Posts

Antes de começar com o tópico, se esperam algo complexo deste sistema, então poderão voltar para trás porque isto foi em apenas 1 hora de trabalho.

Têm todo o direito de melhorar isto à vontade.


 

Bem, eu ando a fazer alguns testes no que toca a performance entre quest-client e game-client e sendo sincero, quase ou pouco noto a diferença (já deu para entender que sou fanboy de lua certo?), apenas há 1 ~ 3 comandos extras a serem feitos.

 

O que é este sistema?

Isto dá-se como o nome de Admin Whisper (Mensagens de Equipa em português) e tem como objetivo enviar uma mensagem a todos os jogadores assim que entram pela primeira vez no jogo.

 

Para que serve?

Tal como disse acima, todos os jogadores (independentemente do canal - ou seja, poderão estar no CH1 como no CH2 -) irão receber sem qualquer tipo de problema ou latência.

 

(Mensagem a ser enviada - No print não tem como ser visível mas ela pisca)

image.thumb.png.46bcfb5fea39800d634212c366dfd71b.png

 

(Conteúdo da mensagem)

image.thumb.png.e75ab7195f9d7388f9bfad91fbccc0c7.png

 

Requisitos:

  • Python
  • LUA

 

Client

 

Procurem (game.py) por:

"PlayMusic"				: self.__PlayMusic,

 

Em baixo, adicionem:

"admin_whisper"				: self.AdminWhisper,

 

Procurem por:

	def __PlayMusic(self, flag, filename):
		flag = int(flag)
		if flag:
			snd.FadeOutAllMusic()
			musicInfo.SaveLastPlayFieldMusic()
			snd.FadeInMusic("BGM/" + filename)
		else:
			snd.FadeOutAllMusic()
			musicInfo.LoadLastPlayFieldMusic()
			snd.FadeInMusic("BGM/" + musicInfo.fieldMusic)

 

Por baixo adicionem:

	def AdminWhisper(self, admin, text): # Nome a ser chamado
		txt = str(text) # A mensagem em si
		show = txt.replace("_", " ") # Os _ são substituidos por espaço 
		name = "|cFFFF8C00|H|h[%s]|h|r" % (admin) # Cor semelhante a de um Game Master + o nome proveniente do servidor
		
		chat.AppendWhisper(chat.WHISPER_TYPE_GM, name, show) # É enviado a mensagem com carácter GM
		self.interface.RecvWhisper(name) # É anúnciado da mesma forma que uma mensagem normal

 

Adicionem isto no questlib.lua:

dofile(get_locale_base_path().."/admin_whisper.lua")

SERVER

Criem no diretório do locale um ficheiro chamado admin_whisper.lua com isto lá dentro:

--[[
	De forma a que as mensagens tenham espaço uma da outra, é necessário utilizarem o uso da _ de forma a que o client consiga substituir.
	O motivo deve-se ao facto do comando cmdchat - ou CHAT_TYPE_COMMAND - ignorar tudo o que venha depois de um espaço (corrigem-me se estiver mal),
	por isso decidi que isto poderia ser a melhor forma disponível para que os espaços sejam visto visualmente.

	OBS: Repito, se queres algo complexo, podes usar isto como base ou simplesmente não usar, não obrigo ninguém a utiliza-lo.

	PS: Também poderão mandar mensagem a cada um dos jogadores de acordo com a sua linguagem (se tiverem multilinguagens instalado).
]]

whisper = {} -- Abre a clásula para a palavra whisper
whisper.admin = "MÁRIO" -- Nome do sistema a aparecer
-- Mensagem a ser exibida | Se quiserem enviar mais que uma, poderão faze-lo perfeitamente dando alguns retoques no código
whisper.text = "Olá_a_todos,_só_queria_dizer_que_este_´tutorial´_foi_criado_pelo_Mário_por_isso_se_quiserem_meter_os_créditos_quando_forem_meter_em_um_outro_sítio,_metam_os_meus_e_não_os_vossos_^^  "

 

Utilizem a seguinte quest como um teste:

quest admin_whisper begin
	state start begin	
		when login begin
			if game.get_event_flag("admin_whisper) == 0 then return else
				cmdchat(string.format("admin_whisper %s %s",whisper.admin,whisper.text))
			end
		end
	end
end

 

 

  • /e admin_whisper 1 - O sistema estará ativo e todos irão receber as mensagens
  • /e admin_whisper 0 - O sistema estará desativo e ninguém irá receber as mensagens

 

Edited by Mário.
  • Like 1
Link to comment
Share on other sites

Em ‎31‎/‎03‎/‎2018 em 12:23, PACI disse:

Falta uma aspa para fechar o game.get_event_flag().

É interessante. Eu utilizaria um ficheiro externo, possibilitando, assim, o update e envio em tempo real das mensagens (evitando os reloads e restarts - aka casos urgentes).

Obrigado, fiz a quest à pressa e nem reparei nisso

E sim, tens razão, será melhor utilizar um ficheiro externo:

		when login begin
			a = io.open(get_locale_base_path().."/admin_whisper.txt", "r")
			this = a:read()		
			cmdchat(string.format("admin_whisper %s %s",this,this))
		end

Desta forma ficaria o ficheiro ficaria:

mário paci

 

Resultado:

image.thumb.png.4ee1f43df6134cbd4e8e227106d28284.png

 

 

 

O @Marco  e o Daryl (GalaxyMT2) deram a ideia da mensagem ser enviada de X a X tempos de acordo com a hora que eles queriam, então para isso é só utilizar esta quest:

quest admin_whisper begin
	state start begin	
		when login begin
			-- Desta forma, todas as segundas e terças às 15:30, será enviado um PM a cada jogador online durante esse tempo
			local data = {"Monday 15:30","Tuesday 15:30"}
			for index, datetime in ipairs(data) do
				if datetime == os.date("%A %H:%M") then
					if game.get_event_flag("admin_whisper") == 1 then
						cmdchat(string.format("admin_whisper %s %s",whisper.admin,whisper.text))
					end
				end
			end
		end
	end
end

 

Link to comment
Share on other sites

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