PtokaX forum

Archive => Archived 4.0 boards => Help with Lua 4 scripts => Topic started by: ArmyNero on 13 February, 2005, 22:54:51

Title: Self-Made Ranks Chat?
Post by: ArmyNero on 13 February, 2005, 22:54:51
I have created five new Ranks for my Own Hub,...

General = Master.
Major = Master.
Seargent = Op.
Gunner = VIP.
Privat = Reg.

Now i Want a Chat only for:
Generals, Majors and Seargents Only,I tryed to edit an existing script but does not seem to work,....
Need your Help Again People, please take a look at it, and it would be great if some1 could Correct it,... Thanks...

****************STARTS*UNDER*THIS*LINE*!!!****************

ChatBot = "<-*Officers-Chat->"   -- Chat Bot Name
CanUseCommands = { 0 , 1 , 2 }   -- Can Use Chat Bot Commands Lvl ( 0 = Generals ~~ 1 = Majors ~~  2 = Seargents ~~ etc.)

ChatArray={}
ChatFile = "Chatters.tbl"

function Main()
frmHub:RegBot(ChatBot)
ChatArray = LoadFromFile(ChatFile)
end

--========================================================    DataArrival:    =========================================================--

function DataArrival(user, data)
   if (strsub(data, 1, 1) == "<" ) then
   data=strsub(data,1,strlen(data)-1)
   _,_,cmd=strfind(data, "%b<>%s+(%S+)")
   local Commands = (DeveloperCommands(user, data, cmd))
   return Commands
   elseif strsub(data, 1, 5) == "$To: " then
      local s, e, to = strfind(data, "$To: (%S+)")
      if to ~= ChatBot then
         return 0
      else
         if to == ChatBot then
         local data=strsub(data,1,strlen(data)-1)  
         local s,e,from,msg = strfind(data,"From:%s+(%S+)%s+$%b<>%s+(.+)")  
            if ChatArray[user.sName] ~= nil then
            ChatArray[user.sName] = nil
               for i,v in ChatArray do
               Developer=GetItemByName(i)
                  if (Developer~=nil) then
                  Developer:SendData("$To: "..i.." From: "..ChatBot.." $<"..user.sName.."> "..msg.."|")
                  end
               end
            ChatArray[user.sName] = user.sName
            else
            user:SendPM(ChatBot,"You do not have permission to write inhere (Join or Talk to a Operator if you need permission)")
            end
         local _,_,cmd = strfind(data,"$%b<>%s+(%S+)")
         local Commands = (DeveloperCommands(user, data, cmd))
         end
      end
   end
end

--=====================================================      Chat Commands:      ======================================================--

function DeveloperCommands(user, data, cmd)
   if tfind(CanUseCommands, user.iProfile) then
      if (cmd == "+chathelp") then
      DevHelp(user)
      return 1
      elseif (cmd == "+chat") then
      local s,e,cmd,ChatName = strfind( data, "%b<>%s+(%S+)%s+(.*)" )
         if (ChatName == nil) then
         ChatName = user.sName
         end
         if ChatArray[ChatName] == nil then
         ChatArray[ChatName] = ChatName
            for index, value in ChatArray do
            SendPmToNick(index, ChatBot, "  "..ChatName.." Has joined the "..ChatBot)
            end
         else
            for index, value in ChatArray do
            SendPmToNick(index, ChatBot, "  "..ChatName.." Has left the "..ChatBot)
            end
         ChatArray[ChatName] = nil
         end
         SaveToFile(ChatName,ChatFile,ChatArray)
         return 1
      elseif (cmd == "+showchatters") then
         function DevList()
         local DevList = ""
            for index, value in ChatArray do
            local line = index
               if GetItemByName(index) then
                  if (strlen(index) <= 10) then
                  DevList = DevList.." • "..line.."\t\t\t~ On-line ~\r\n"
                  else
                  DevList = DevList.." • "..line.."\t\t~ On-line ~\r\n"
                  end
               else
                  if (strlen(index) <= 10) then
                  DevList = DevList.." • "..line.."\t\t\t• Off-Line •\r\n"
                  else
                  DevList = DevList.." • "..line.."\t\t• Off-Line •\r\n"
                  end
               end
            end
            return DevList
         end
         user:SendPM(ChatBot, "\r\n\r\n(? ?.??.->      "..ChatBot.." Chatters      <-.??.???) \r\n\r\n"..DevList())
         return 1
      end
   else user:SendData("You don't have permission to use the commands to the "..Officers-Chat.." ask an Seargent for permission !!") return 0 end
end

function DevHelp (user)
   local disp = "\r\n\r\n"
   disp = disp.."~~ Scripted DeveloperChat Commands: ~~\r\n\r\n"
   disp = disp.."   +chat       -   Add or part a user to the list of people that can chat in the "..ChatBot.."\r\n"
   disp = disp.."   +showchatters      -   See witch users that can chat in the "..ChatBot.."\r\n"
   disp = disp.."\r\n"
   user:SendPM(ChatBot, disp)
end

--========================================================    Functions:    ===========================================================--

function SaveToFile(arg,file,table)
   local aString = pickle(table)
   writeto(file)
   write(aString)
   writeto()
end

function LoadFromFile(file)
   readfrom(file)
   local aString = read("*all")
   return  unpickle(aString)
end

function tfind(table, key)
return foreachi(table, function(id, tmp) return (tmp == %key) and id end)
end

----------------------------------------------
-- Pickle.lua
-- An table serialization utility for lua
-- Steve Dekorte, http://www.dekorte.com, Apr 2000
-- Freeware
----------------------------------------------
function pickle(t)
return Pickle:clone():pickle_(t)
end

Pickle = {
clone = function (t) local nt={}; for i, v in t do nt=v end return nt end
}

function Pickle:pickle_(root)
   if type(root) ~= "table" then
   error("can only pickle tables, not ".. type(root).."s")
   end
   self._tableToRef = {}
   self._refToTable = {}
   local savecount = 0
   self:ref_(root)
   local s = ""
   while getn(self._refToTable) > savecount do
   savecount = savecount + 1
   local t = self._refToTable[savecount]
   s = s.."{\n"
      for i, v in t do
      s = format("%s[%s]=%s,\n", s, self:value_(i), self:value_(v))
      end
   s = s.."},\n"
   end
return format("{%s}", s)
end

function Pickle:value_(v)
local vtype = type(v)
   if vtype == "string" then return format("%q", v)
   elseif vtype == "number" then return v
   elseif vtype == "table" then return "{"..self:ref_(v).."}"
   else --error("pickle a "..type(v).." is not supported")
   end  
end

function Pickle:ref_(t)
local ref = self._tableToRef[t]
   if not ref then
      if t == self then error("can't pickle the pickle class") end
   tinsert(self._refToTable, t)
   ref = getn(self._refToTable)
   self._tableToRef[t] = ref
   end
return ref
end

----------------------------------------------
-- unpickle
----------------------------------------------

function unpickle(s)
   if type(s) ~= "string" then
   error("can't unpickle a "..type(s)..", only strings")
   end
   local tables = dostring("return "..s)
   for tnum = 1, getn(tables) do
   local t = tables[tnum]
   local tcopy = {}; for i, v in t do tcopy = v end
      for i, v in tcopy do
      local ni, nv
         if type(i) == "table" then ni = tables[i[1]] else ni = i end
         if type(v) == "table" then nv = tables[v[1]] else nv = v end
      t[ni] = nv
      end
   end
return tables[1]
end

*****************ENDS*ABOVE*HERE*****************
Title:
Post by: plop on 14 February, 2005, 00:20:40
pls surround the code with [ c o d e ] and [ / c o d e ] tags.

plop
Title:
Post by: bastya_elvtars on 14 February, 2005, 02:41:49
check TUOCB.lua made by me, it is an alternate for Px opchat.

shame on me i cannot remember its structure, but it may be good for you. Sorry for this brain which can only keep currently useful things in itself. :P

-- // edit

http://www.plop.nl/ptokaxbots/bastya_elvtars/tuocb.lua

you can rewrite it for your profiles, if not, i will help you.