Advertisement
LeonMMS

LM² - Party (LUA)

Sep 1st, 2017
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 7.77 KB | None | 0 0
  1. -- LM² - Party
  2. function TcpServer:handlepartymember(index, player, data)
  3.    if player.charnum == 0 then return end
  4.     local recv = data:split(';')
  5.     if ton(recv[1]) == 0 then -- handle request
  6.         do
  7.             if self.players[ton(recv[2])].pleaderid ~= 0 then
  8.                 local tempdata = StringBuilder()
  9.                 tempdata:write(5)
  10.                 tempdata:write(0)
  11.                 self:sendtoplayer(index, PACKETPARTYMEMBER, tempdata:tostring(';'))
  12.                 return
  13.             end
  14.             if self.players[index].pmembers == (MAXPARTYMEMBERS-1) then
  15.                 local tempdata = StringBuilder()
  16.                 tempdata:write(5)
  17.                 tempdata:write(1)
  18.                 self:sendtoplayer(index, PACKETPARTYMEMBER, tempdata:tostring(';'))
  19.                 return
  20.             end            
  21.             local tempdata = StringBuilder()
  22.             tempdata:write(0)
  23.             tempdata:write(index)
  24.             tempdata:write(recv[3])
  25.             self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
  26.         end
  27.     elseif ton(recv[1]) == 1 then -- handle accept
  28.         do
  29.             local tempdata = StringBuilder()
  30.             tempdata:write(1)
  31.             tempdata:write(index)
  32.             tempdata:write(player.name)
  33.             tempdata:write(player.maxhp)
  34.             tempdata:write(player.hp)
  35.             tempdata:write(player.maxsp)
  36.             tempdata:write(player.sp)
  37.             tempdata:write(player.level)
  38.             if self.players[ton(recv[2])].pleaderid ~= 0 then
  39.                 player.pleaderid = self.players[ton(recv[2])].pleaderid
  40.             elseif self.players[ton(recv[2])].pleaderid == 0 then
  41.                 player.pleaderid = ton(recv[2])  
  42.                 self.players[ton(recv[2])].pleaderid = ton(recv[2])
  43.             end
  44.             tempdata:write(player.pleaderid)
  45.             table.insert(self.players[ton(recv[2])].pmembers, index)
  46.             self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
  47.             otherp = self.players[ton(recv[2])]
  48.             local tempdata = StringBuilder()
  49.             tempdata:write(6)
  50.             tempdata:write(recv[2])
  51.             tempdata:write(otherp.name)
  52.             tempdata:write(otherp.maxhp)
  53.             tempdata:write(otherp.hp)
  54.             tempdata:write(otherp.maxsp)
  55.             tempdata:write(otherp.sp)
  56.             tempdata:write(otherp.level)
  57.             tempdata:write(0)
  58.             table.insert(self.players[index].pmembers, ton(recv[2]))
  59.             self:sendtoplayer(index, PACKETPARTYMEMBER, tempdata:tostring(';'))            
  60.         end
  61.     elseif ton(recv[1]) == 2 then -- handle refuse
  62.         do
  63.             local tempdata = StringBuilder()
  64.             tempdata:write(2)
  65.             tempdata:write(player.name)
  66.             self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
  67.         end
  68.     elseif ton(recv[1]) == 3 then -- handle remove
  69.         do
  70.             if ton(recv[3]) == 1 then -- removed
  71.                 do
  72.                     for i = 1, #self.players[index].pmembers do
  73.                         local k = self.players[index].pmembers[i]  
  74.                         if k == ton(recv[2]) then
  75.                             self.players[k].pmembers = {}
  76.                             self.players[k].pleaderid = 0
  77.                             local tempdata = StringBuilder()
  78.                             tempdata:write(3)
  79.                             tempdata:write(0)
  80.                             tempdata:write(self.players[index].name)              
  81.                             self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
  82.                         else
  83.                             table.remove(self.players[k].pmembers,removevalue(self.players[k].pmembers,ton(recv[2])))
  84.                             if #self.players[k].pmembers == 0 then
  85.                                 self.players[k].pleaderid = 0
  86.                                 self.players[k].pmembers = {}
  87.                             end    
  88.                             local tempdata = StringBuilder()
  89.                             tempdata:write(3)
  90.                             tempdata:write(1)
  91.                             tempdata:write(ton(recv[2]))
  92.                             tempdata:write(self.players[ton(recv[2])].name)              
  93.                             self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
  94.                         end
  95.                     end
  96.                     table.remove(self.players[index].pmembers,removevalue(self.players[index].pmembers,ton(recv[2])))
  97.                     if #self.players[index].pmembers == 0 then
  98.                         self.players[index].pleaderid = 0
  99.                         self.players[index].pmembers = {}
  100.                     end                    
  101.                 end
  102.             elseif ton(recv[3]) == 2 then -- exit
  103.                 do
  104.                     for i = 1, #self.players[index].pmembers do
  105.                         local k = self.players[index].pmembers[i]
  106.                         table.remove(self.players[k].pmembers,removevalue(self.players[k].pmembers,ton(recv[2])))
  107.                         if #self.players[k].pmembers == 0 then
  108.                             self.players[k].pleaderid = 0
  109.                             self.players[k].pmembers = {}
  110.                         end    
  111.                         local tempdata = StringBuilder()
  112.                         tempdata:write(3)
  113.                         tempdata:write(2)
  114.                         tempdata:write(ton(recv[2]))
  115.                         tempdata:write(self.players[index].name)              
  116.                         self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))                    
  117.                     end
  118.                     self.players[index].pleaderid = 0
  119.                     self.players[index].pmembers = {}
  120.                 end
  121.             end
  122.         end
  123.     elseif ton(recv[1]) == 4 then -- handle disband
  124.         if ton(recv[2]) ~= player.pleaderid then return end
  125.         do
  126.             for i = 1, #self.players[index].pmembers do
  127.                 local k = self.players[index].pmembers[i]
  128.                 local tempdata = StringBuilder()
  129.                 tempdata:write(4)
  130.                 tempdata:write(player.name)    
  131.                 self.players[k].pmembers = {}
  132.                 self.players[k].pleaderid = 0
  133.                 self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
  134.             end
  135.             self.players[index].pmembers = {}
  136.             self.players[index].pleaderid = 0
  137.         end
  138.     elseif ton(recv[1]) == 5 then -- handle existing members
  139.         do
  140.             local tempdata = StringBuilder()
  141.             tempdata:write(6)
  142.             for i = 3, #recv do
  143.                 tempdata:write(recv[i])
  144.             end    
  145.             table.insert(self.players[ton(recv[2])].pmembers, ton(recv[3]))
  146.             self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
  147.         end
  148.     elseif ton(recv[1]) == 6 then -- handle new member    
  149.         do
  150.             local tempdata = StringBuilder()
  151.             tempdata:write(6)
  152.             for i = 3, #recv do
  153.                 tempdata:write(recv[i])
  154.             end    
  155.             tempdata:write(0)
  156.             table.insert(self.players[ton(recv[2])].pmembers, ton(recv[3]))
  157.             self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
  158.         end
  159.     end
  160. end
  161.     -- return value for delete usage
  162.     --mtable = {0,1,2,3}
  163.     --table.remove(mtable,removevalue(mtable,1))
  164.     --print(mtable[1], mtable[2], mtable[3])
  165. function removevalue(mtable, value)
  166.     local delete = 0
  167.     for i = 1, #mtable do
  168.         delete = i
  169.         if mtable[i] == value then break end
  170.     end
  171.     return delete
  172. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement