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:
Pozdrawiam. /o
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