Tectoon

[TFM] SMS

Jun 25th, 2015
327
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 6.30 KB | None | 0 0
  1. -- Short Message Script
  2. --[[
  3. Inbox message limit: 15
  4. Commands:
  5.     !sms - Shows SMS panel
  6.     !sms [name] - Shows a popup to type message
  7.     !sms [name] message - Sends message to name
  8.     !mute [name] - Mutes the player, the player you specified can't send you message
  9.     !unmute [name] - Unmutes the player
  10.     !fsms [sender] [name] message - Sends fake message
  11. Use or make your own isAdmin and trans functions
  12. ]]
  13.  
  14. langs={
  15.     EN={
  16.         smsPanel='<R><b><a href="event:close">^</a></b> <J>You have <BL><b>%i</b><G>/<R><b>%i</b> <J>messages in your inbox. <R><a href="event:inbox"><b>[Inbox]</b></a>%s',
  17.         smsSuccess='<V>Your message has been sent!',
  18.         smsFail='<R>The player could not be found!',
  19.         smsFail2="<R>The player's inbox is full!",
  20.         smsLimit='<R>Your inbox is full!',
  21.         smsMute="<V>%s <J>is ignored!",
  22.         smsUnmute='<V>%s <J>is unignored!',
  23.         smsFakeMsgOk='<V>Fake message has been sent!',
  24.         smsPopup='Message',
  25.         smsInbox='<R><b><a href="event:close">^</a></b> <J>Inbox<V>',
  26.         smsInboxEmpty='<V>Empty',
  27.         smsInfo=[[<R><p align="right"><b><a href="event:close">X</a></b></p><V><b>Sender:</b> <N>%s
  28. <V><b>Date:</b> <N>%s
  29. <V><b>Message</b><J>
  30. %s
  31. <V><p align="center"><b><a href="event:smsr%s">Answer</a></b>]]
  32.     },
  33.     TR={
  34.         smsPanel='<R><b><a href="event:close">^</a></b> <J>Gelen kutunuzda <BL><b>%i</b><G>/<R><b>%i</b> <J>mesajınız bulunmakta. <R><a href="event:inbox"><b>[Gelen Kutusu]</b></a>%s',
  35.         smsSuccess='<V>Mesajınız alıcıya teslim edildi!',
  36.         smsFail='<R>Oyuncu bulunamadı!',
  37.         smsFail2='<R>Oyuncunun gelen kutusu dolu!',
  38.         smsLimit='<R>Gelen kutunuz doldu!',
  39.         smsMute='<V>%s <J>engellendi!',
  40.         smsUnmute='<V>%s <J>engeli kaldırıldı!',
  41.         smsFakeMsgOk='<V>Sahte mesaj gönderildi!',
  42.         smsPopup='Mesaj',
  43.         smsInbox='<R><b><a href="event:close">^</a></b> <J>Gelen Kutusu<V>',
  44.         smsInboxEmpty='<V>Boş',
  45.         smsInfo=[[<R><p align="right"><b><a href="event:close">X</a></b></p><V><b>Gönderen:</b> <N>%s
  46. <V><b>Tarih:</b> <N>%s
  47. <V><b>Mesaj</b><J>
  48. %s
  49. <V><p align="center"><b><a href="event:smsr%s">Cevapla</a></b>]]
  50.     },
  51. }
  52. players={}
  53. function init()
  54.     for name in pairs(tfm.get.room.playerList) do
  55.         eventNewPlayer(name)
  56.     end
  57.     for _,c in pairs({'sms','fsms'}) do
  58.         system.disableChatCommandDisplay(c, true)
  59.     end
  60. end
  61. function eventNewPlayer(name)
  62.     if not _get(players, name) then
  63.         _set(players, name, {muteList={}, msgs={}, msgc=0})
  64.     end
  65. end
  66. function eventChatCommand(name, cmd)
  67.     local args = {}
  68.     for a in cmd:gmatch('%S+') do args[#args+1] = a end
  69.     local pInfo = _get(players,name)
  70.     if 'sms' == args[1] then
  71.         if args[2] then
  72.             local receiver, msg = args[2], cmd:sub(#args[2]+6)
  73.             if #msg > 0 then
  74.                 local rInfo = _get(players, receiver)
  75.                 if rInfo then
  76.                     if _get(rInfo.muteList, name) then
  77.                         updateMsgUI(name, trans('smsFail2',name))
  78.                     elseif #rInfo.msgs > 14 then
  79.                         updateMsgUI(name, trans('smsFail2',name))
  80.                         updateMsgUI(receiver, trans('smsLimit',receiver))
  81.                     else
  82.                         table.insert(rInfo.msgs, {time=os.date(), sender=name, msg=isAdmin(name) and msg or smsFilter(msg)})
  83.                         rInfo.msgc = rInfo.msgc+1
  84.                         updateMsgUI(name, trans('smsSuccess',name))
  85.                         updateMsgUI(receiver)
  86.                     end
  87.                 else
  88.                     updateMsgUI(name, trans('smsFail',name))
  89.                 end
  90.             else
  91.                 pInfo.smsr = receiver
  92.                 ui.addPopup(8787, 2, trans('smsPopup',name), name, 300, 100, 200, true)
  93.             end
  94.         else
  95.             updateMsgUI(name)
  96.         end
  97.     elseif 'mute ' == cmd:sub(1,5) then
  98.         local who = cmd:sub(6):lower()
  99.         pInfo.muteList[who] = 1
  100.         updateMsgUI(name, trans('smsMute',name):format(smsFilter(who)))
  101.     elseif 'unmute ' == cmd:sub(1,7) then
  102.         local who = cmd:sub(8)
  103.         _set(pInfo.muteList, who, nil)
  104.         updateMsgUI(name, trans('smsUnmute',name):format(smsFilter(who)))
  105.     elseif isAdmin(name) then
  106.         if 'fsms ' == cmd:sub(1,5) then
  107.             local sender,msg = cmd:match('fsms (%S+) (.+)')
  108.             if sender and msg then
  109.                 eventChatCommand(sender, 'sms '..msg)
  110.                 updateMsgUI(name, trans('smsFakeMsgOk',name))
  111.             end
  112.         end
  113.     end
  114. end
  115. function eventPopupAnswer(ID, name, answer)
  116.     if ID == 8787 then
  117.         local pInfo = _get(players, name)
  118.         if pInfo and pInfo.smsr and #answer > 0 then
  119.             eventChatCommand(name, 'sms '..pInfo.smsr..' '..answer)
  120.         end
  121.     end
  122. end
  123. function eventTextAreaCallback(ID,name,event)
  124.     if event == 'close' then
  125.         ui.removeTextArea(ID, name)
  126.     else
  127.         local pInfo = _get(players, name)
  128.         if pInfo then
  129.             if event == 'inbox' then
  130.                 ui.addTextArea(8778, '', name, 450, 20, 330, nil, 1, 0, 0.7, true)
  131.                 updateMsgUI(name)
  132.             elseif 'smsd' == event:sub(1,4) then
  133.                 local smsID = tonumber(event:sub(5))
  134.                 if pInfo.msgs[smsID] then
  135.                     if not pInfo.msgs[smsID].ok then
  136.                         pInfo.msgc = pInfo.msgc-1
  137.                     end
  138.                     table.remove(pInfo.msgs, smsID)
  139.                     updateMsgUI(name)
  140.                 end
  141.             elseif 'smsr' == event:sub(1,4) then
  142.                 pInfo.smsr = event:sub(5)
  143.                 ui.addPopup(8787, 2, trans('smsPopup',name), name, 300, 100, 200, true)
  144.             elseif 'sms' == event:sub(1,3) then
  145.                 local smsID = tonumber(event:sub(4))
  146.                 if pInfo.msgs[smsID] then
  147.                     local sInfo = pInfo.msgs[smsID]
  148.                     ui.addTextArea(7878, trans('smsInfo',name):format(sInfo.sender, sInfo.time, sInfo.msg, sInfo.sender),
  149.                         name, 10, 100, 300, nil, 0x000011, 0, 0.7, true)
  150.                     if not sInfo.ok then
  151.                         pInfo.msgc = pInfo.msgc-1
  152.                         sInfo.ok = true
  153.                         updateMsgUI(name)
  154.                     end
  155.                 end
  156.             end
  157.         end
  158.     end
  159. end
  160. function updateMsgUI(name, msg)
  161.     local pInfo = _get(players, name)
  162.     if not pInfo then return end
  163.     ui.addTextArea(7887, trans('smsPanel',name):format(#pInfo.msgs, pInfo.msgc,msg and '\n' .. msg or ''),
  164.         name, 10, 20, nil, nil, 0x110000, 0, 0.7, true)
  165.     local text = trans('smsInbox', name)
  166.     if #pInfo.msgs > 0 then
  167.         for i=1,#pInfo.msgs do
  168.             text = string.format('%s\n[%s] <a href="event:sms%i">%s</a> <G>- <J>%s <R><a href="event:smsd%i">[X]</a><V>', text,
  169.                 pInfo.msgs[i].ok and '+' or '-', i, pInfo.msgs[i].sender, pInfo.msgs[i].time, i)
  170.         end
  171.     else
  172.         text = text.."\n"..trans('smsInboxEmpty', name)
  173.     end
  174.     ui.updateTextArea(8778, text, name)
  175. end
  176. function isAdmin(name)
  177.     return true -- name=='Transforcips'
  178. end
  179. function trans(key)
  180.     return langs.EN[key]
  181.     --return langs.TR[key]
  182. end
  183. function _get(t,k)
  184.     return t[k:lower()]
  185. end
  186. function _set(t,k,v)
  187.     t[k:lower()] = v
  188. end
  189. function smsFilter(s)
  190.     return s:gsub('&','&amp;'):gsub('<','&lt;'):gsub('>','&gt;'):gsub('http','ht<c/>tp')
  191. end
  192. init()
Advertisement
Add Comment
Please, Sign In to add comment