Gandhi
Active User
- Joined
- Aug 7, 2013
- Messages
- 80
- Reaction score
- 19
Siemka.
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, a jak sobie przerobisz na normalne skrypty LUA, to i na wcze?niejszych.
Ma?e zdj?tko, z kt?rego i tak nic nie skminisz, p?ki nie stestujesz.
w mods/ zr?b plik offline_msg.xml i wklep do niego ten skrypt:
daj? na pastebin, bo parser bbcode na forum wstawia spacje w d?ugie nazwy zmiennych, co psuje skrypt. Skrypt we? z tego linku, je?li nie chcesz mie? k?opot?w.
Pozdr?wki
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, a jak sobie przerobisz na normalne skrypty LUA, to i na wcze?niejszych.
Ma?e zdj?tko, z kt?rego i tak nic nie skminisz, p?ki nie stestujesz.
w mods/ zr?b plik offline_msg.xml i wklep do niego ten skrypt:
daj? na pastebin, bo parser bbcode na forum wstawia spacje w d?ugie nazwy zmiennych, co psuje skrypt. Skrypt we? z tego linku, je?li nie chcesz mie? k?opot?w.
[xml] <?xml version="1.0" encoding="UTF-8"?>
<mod name="Offline Messages" version="1.0" author="Gandhi [PL]" contact="GG: 38138073" enabled="yes">
<description>
Main Thread: http://tibia.net.pl/threads/561375-MOD-Offline-Messages-System
Author: Gandhi
Date: 18/19 03.2012
Last edit: 29 03.2014
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 = {
maxReceiverGroupId = 3, -- if receiver has this or greater group id, message will not be sent
sendMessagesToOnline = true, -- if true and receiver is online, message will be send too
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.',
['playerOnline'] = 'This player is online, why do you want to send him offline message?',
['tooBigAccess'] = 'You can not send message to this player.'
},
-- 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`, `group_id` 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(OfflineMessagesConfig.maxReceiverAccess > 0 and player:getDataInt('group_id') >= OfflineMessagesConfig.maxReceiverGroupId) then
doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['tooBigAccess'])
return true
end
if(player:getDataInt('online') == 1) then
if(OfflineMessagesConfig.sendMessagesToOnline) 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
else
doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['playerOnline'])
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
os.remove(OfflineMessagesConfig.messageSavingDirectory .. getCreatureName(cid) .. '.Gandhi')
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>
[/xml]
<mod name="Offline Messages" version="1.0" author="Gandhi [PL]" contact="GG: 38138073" enabled="yes">
<description>
Main Thread: http://tibia.net.pl/threads/561375-MOD-Offline-Messages-System
Author: Gandhi
Date: 18/19 03.2012
Last edit: 29 03.2014
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 = {
maxReceiverGroupId = 3, -- if receiver has this or greater group id, message will not be sent
sendMessagesToOnline = true, -- if true and receiver is online, message will be send too
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.',
['playerOnline'] = 'This player is online, why do you want to send him offline message?',
['tooBigAccess'] = 'You can not send message to this player.'
},
-- 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`, `group_id` 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(OfflineMessagesConfig.maxReceiverAccess > 0 and player:getDataInt('group_id') >= OfflineMessagesConfig.maxReceiverGroupId) then
doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['tooBigAccess'])
return true
end
if(player:getDataInt('online') == 1) then
if(OfflineMessagesConfig.sendMessagesToOnline) 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
else
doPlayerSendTextMessage(cid, OfflineMessagesConfig.messages.errorType, OfflineMessagesConfig.messages['playerOnline'])
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
os.remove(OfflineMessagesConfig.messageSavingDirectory .. getCreatureName(cid) .. '.Gandhi')
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>
[/xml]