What's new

Mods Offline Messages System

Status
Not open for further replies.

Matt

Banned
Joined
May 9, 2013
Messages
595
Reaction score
46
Autor: Gandhi

Tak wi?c dzisiaj mam dla was system wiadomo?ci offline. Teraz b?dziesz m?g? napisa? do gracza, kt?ry jest offline ; o Wiadomo?? wy?wietli mu si? po zalogowaniu. Mo?esz te? wybra? spos?b wy?wietlania, czy skrypt poka?e wszystkie wiadomo?ci od razu, czy po kolei w odst?pach, kt?re i tak sam ustawisz. Je?li gracz zaraz po zalogowaniu si? wyloguje, a skrypt nie zd??y wy?wietli? wszystkich wiadomo?ci, to niewy?wietlone b?d? czeka? na kolejne zalogowanie. Prosty config, ale s? rzeczy do ustawienia te? dla tych bardziej ogarni?tych w temacie.

Skrypt zapisuje wys?ane wiadomo?ci w wskazanym folderze. Gdy gracz si? loguje, sprawdza, czy s? zapisane dla niego jakie? wiadomo?ci. Je?li tak, to wy?wietla je.
Skrypt zrobiony jako mod, wi?c to jeden plik. Testowany na 8.6 TFS 0.4 r3884, ale powinno dzia?a? na ka?dym z modami.

W mods/ zr?b plik offline_msg.xml i wklep do niego:
PHP:
<?xml version="1.0" encoding="UTF-8"?>
<mod name="Offline Messages" version="1.0" author="Gandhi [PL]" poprawki="Matt" enabled="yes">
	<description>
		Author: Gandi
		Date: 18/19 03.2012
 
		About:
			This is simple script, that allow you to send messages to players who are offline. 
			They will receive message after login. You can choose receiver will get all messages instantly or one message per ex. 0.7sec.
			You can also choose separator after nickname of receiver. It's protecting against devided message, because I'm using string.explode 
			and you should know how works this function (in example if you say "/msg Gandhi, Hey, its me, how are you?"). Don't worry, all is working great :)
 
			Enjoy. 
 
		Greetings for people of Go(o)d will. 
	</description>
	<config name="OfflineMessagesConfig"><![CDATA[
		OfflineMessagesConfig = {
			separatorAfterNickname = ',',
			messageSavingDirectory = 'data/logs/offline_msg/', -- dir with saved messages (folder must exsist!)
			delayBeetwenShowMessageOnLogin = 750, -- delay in ms to show received messages on login, to deactivate type 0
			messages = {
				messageType = MESSAGE_STATUS_CONSOLE_BLUE,
				errorType = MESSAGE_STATUS_CONSOLE_ORANGE,
				['notEnoughParams'] = "You have to write nickname and message to send. Example: /msg Gandhi, Siema, co tam?",
				['playerNotFound'] = "Player with this name not found.",
				['cantSendMessage'] = "Error: Can't save message. Try it later.",
				['messageSent'] = 'Ok, yours message has been sent to player %s.'
			},
			-- advanced configuration
			messageFormatString = '[%s] %s: %s', -- date, author, message
			dateFormatString = '%d.%m.%Y %H:%M:%S' -- date string format
		}
 
	]]></config>
 
	<talkaction words="/msg;/priv" event="buffer"><![CDATA[
		domodlib('OfflineMessagesConfig')
		local params, player = string.explode(param, OfflineMessagesConfig.separatorAfterNickname), 0
		if(#params <= 1) then
			doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['notEnoughParams'])
			return true
		end
		player = db.getResult('SELECT `name`, `online` FROM `players` WHERE `name` = "' .. params[1] .. '";') 
		if(player:getID() == -1) then
			doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['playerNotFound'])
			return true
		end
		table.remove(params, 1)
		if(player:getDataInt('online') == 1) then
			local target = getPlayerByNameWildcard(player:getDataString('name'))
			if(isPlayer(target)) then
				doPlayerSendTextMessage(target, OfflineMessagesConfig.messages.messageType, OfflineMessagesConfig.messageFormatString:format(os.date(OfflineMessagesConfig.dateFormatString), getCreatureName(cid), 
table.concat(params, OfflineMessagesConfig.separatorAfterNickname)))
			else
				doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['playerNotFound'])
			end
			return true
		end
 
		local file = io.open(OfflineMessagesConfig.messageSavingDirectory .. player:getDataString('name') .. '.Gandhi', 'a+')
		if(not file) then
			doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['cantSendMessage'])
			return true
		end
		file:write(OfflineMessagesConfig.messageFormatString:format(os.date(OfflineMessagesConfig.dateFormatString), 
getCreatureName(cid), table.concat(params, OfflineMessagesConfig.separatorAfterNickname)) .. '\n')
		file:close()
 
		doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['messageSent']:format(player:getDataString('name')))
		player:free()
		return true
	]]></talkaction>
 
	<creatureevent name="OfflineMsgLogin" type="login" event="buffer"><![CDATA[
		domodlib('OfflineMessagesConfig')
		local file = io.open(OfflineMessagesConfig.messageSavingDirectory .. getCreatureName(cid) .. '.Gandhi', 'r')
		if(not file) then
			return true
		end
		if(not OfflineMessagesConfig.delayBeetwenShowMessageOnLogin) then
			for line in file:lines() do
				doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.messageType, line)
			end
		else
			local function sendLine(cid, msgType, filename)
				if(not isPlayer(cid)) then -- check player is still online
					return 
				end
				local file = io.open(filename, 'r')
				if(not file) then
					return 
				end
				local first, str = true, ''
				for line in file:lines() do
					if(first) then
						doPlayerSendTextMessage(cid, msgType, line)
						first = false
					else
						str = str .. line .. '\n'
					end
				end
				file:close()
				if(str ~= '') then
					file = io.open(filename, 'w')
					file:write(str)
					file:close()
 
					addEvent(sendLine, OfflineMessagesConfig.delayBeetwenShowMessageOnLogin, cid, msgType, filename)
				else
					os.remove(filename)
				end
			end
			addEvent(sendLine, OfflineMessagesConfig.delayBeetwenShowMessageOnLogin, cid, 
OfflineMessagesConfig.messages.messageType, OfflineMessagesConfig.messageSavingDirectory .. getCreatureName(cid) .. '.Gandhi')
		end
		file:close()
		return true
	]]></creatureevent>
</mod>

Pozdrawiam. /o
 

DD Soba

Advanced User
Joined
Jun 6, 2010
Messages
316
Reaction score
10
Age
30
Odp: Offline Messages System

Dzi?ki przyda si? :)
 
Status
Not open for further replies.
Top