Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- LM² - Party
- function TcpServer:handlepartymember(index, player, data)
- if player.charnum == 0 then return end
- local recv = data:split(';')
- if ton(recv[1]) == 0 then -- handle request
- do
- if self.players[ton(recv[2])].pleaderid ~= 0 then
- local tempdata = StringBuilder()
- tempdata:write(5)
- tempdata:write(0)
- self:sendtoplayer(index, PACKETPARTYMEMBER, tempdata:tostring(';'))
- return
- end
- if self.players[index].pmembers == (MAXPARTYMEMBERS-1) then
- local tempdata = StringBuilder()
- tempdata:write(5)
- tempdata:write(1)
- self:sendtoplayer(index, PACKETPARTYMEMBER, tempdata:tostring(';'))
- return
- end
- local tempdata = StringBuilder()
- tempdata:write(0)
- tempdata:write(index)
- tempdata:write(recv[3])
- self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- elseif ton(recv[1]) == 1 then -- handle accept
- do
- local tempdata = StringBuilder()
- tempdata:write(1)
- tempdata:write(index)
- tempdata:write(player.name)
- tempdata:write(player.maxhp)
- tempdata:write(player.hp)
- tempdata:write(player.maxsp)
- tempdata:write(player.sp)
- tempdata:write(player.level)
- if self.players[ton(recv[2])].pleaderid ~= 0 then
- player.pleaderid = self.players[ton(recv[2])].pleaderid
- elseif self.players[ton(recv[2])].pleaderid == 0 then
- player.pleaderid = ton(recv[2])
- self.players[ton(recv[2])].pleaderid = ton(recv[2])
- end
- tempdata:write(player.pleaderid)
- table.insert(self.players[ton(recv[2])].pmembers, index)
- self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
- otherp = self.players[ton(recv[2])]
- local tempdata = StringBuilder()
- tempdata:write(6)
- tempdata:write(recv[2])
- tempdata:write(otherp.name)
- tempdata:write(otherp.maxhp)
- tempdata:write(otherp.hp)
- tempdata:write(otherp.maxsp)
- tempdata:write(otherp.sp)
- tempdata:write(otherp.level)
- tempdata:write(0)
- table.insert(self.players[index].pmembers, ton(recv[2]))
- self:sendtoplayer(index, PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- elseif ton(recv[1]) == 2 then -- handle refuse
- do
- local tempdata = StringBuilder()
- tempdata:write(2)
- tempdata:write(player.name)
- self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- elseif ton(recv[1]) == 3 then -- handle remove
- do
- if ton(recv[3]) == 1 then -- removed
- do
- for i = 1, #self.players[index].pmembers do
- local k = self.players[index].pmembers[i]
- if k == ton(recv[2]) then
- self.players[k].pmembers = {}
- self.players[k].pleaderid = 0
- local tempdata = StringBuilder()
- tempdata:write(3)
- tempdata:write(0)
- tempdata:write(self.players[index].name)
- self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
- else
- table.remove(self.players[k].pmembers,removevalue(self.players[k].pmembers,ton(recv[2])))
- if #self.players[k].pmembers == 0 then
- self.players[k].pleaderid = 0
- self.players[k].pmembers = {}
- end
- local tempdata = StringBuilder()
- tempdata:write(3)
- tempdata:write(1)
- tempdata:write(ton(recv[2]))
- tempdata:write(self.players[ton(recv[2])].name)
- self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- end
- table.remove(self.players[index].pmembers,removevalue(self.players[index].pmembers,ton(recv[2])))
- if #self.players[index].pmembers == 0 then
- self.players[index].pleaderid = 0
- self.players[index].pmembers = {}
- end
- end
- elseif ton(recv[3]) == 2 then -- exit
- do
- for i = 1, #self.players[index].pmembers do
- local k = self.players[index].pmembers[i]
- table.remove(self.players[k].pmembers,removevalue(self.players[k].pmembers,ton(recv[2])))
- if #self.players[k].pmembers == 0 then
- self.players[k].pleaderid = 0
- self.players[k].pmembers = {}
- end
- local tempdata = StringBuilder()
- tempdata:write(3)
- tempdata:write(2)
- tempdata:write(ton(recv[2]))
- tempdata:write(self.players[index].name)
- self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- self.players[index].pleaderid = 0
- self.players[index].pmembers = {}
- end
- end
- end
- elseif ton(recv[1]) == 4 then -- handle disband
- if ton(recv[2]) ~= player.pleaderid then return end
- do
- for i = 1, #self.players[index].pmembers do
- local k = self.players[index].pmembers[i]
- local tempdata = StringBuilder()
- tempdata:write(4)
- tempdata:write(player.name)
- self.players[k].pmembers = {}
- self.players[k].pleaderid = 0
- self:sendtoplayer(k, PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- self.players[index].pmembers = {}
- self.players[index].pleaderid = 0
- end
- elseif ton(recv[1]) == 5 then -- handle existing members
- do
- local tempdata = StringBuilder()
- tempdata:write(6)
- for i = 3, #recv do
- tempdata:write(recv[i])
- end
- table.insert(self.players[ton(recv[2])].pmembers, ton(recv[3]))
- self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- elseif ton(recv[1]) == 6 then -- handle new member
- do
- local tempdata = StringBuilder()
- tempdata:write(6)
- for i = 3, #recv do
- tempdata:write(recv[i])
- end
- tempdata:write(0)
- table.insert(self.players[ton(recv[2])].pmembers, ton(recv[3]))
- self:sendtoplayer(ton(recv[2]), PACKETPARTYMEMBER, tempdata:tostring(';'))
- end
- end
- end
- -- return value for delete usage
- --mtable = {0,1,2,3}
- --table.remove(mtable,removevalue(mtable,1))
- --print(mtable[1], mtable[2], mtable[3])
- function removevalue(mtable, value)
- local delete = 0
- for i = 1, #mtable do
- delete = i
- if mtable[i] == value then break end
- end
- return delete
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement