public void RequestWorldLinkshellKick(Player player, string lsname, string kickedName) { SubPacket packet = LinkshellLeavePacket.BuildPacket(player.playerSession, lsname, kickedName, true); player.QueuePacket(packet); }
public void OnReceiveSubPacketFromZone(ZoneServer zoneServer, SubPacket subpacket) { uint sessionId = subpacket.header.targetId; Session session = GetSession(sessionId); subpacket.DebugPrintSubPacket(); if (subpacket.gameMessage.opcode >= 0x1000) { //subpacket.DebugPrintSubPacket(); switch (subpacket.gameMessage.opcode) { //Session Begin Confirm case 0x1000: SessionBeginConfirmPacket beginConfirmPacket = new SessionBeginConfirmPacket(subpacket.data); if (beginConfirmPacket.invalidPacket || beginConfirmPacket.errorCode == 0) { Program.Log.Error("Session {0} had a error beginning session.", beginConfirmPacket.sessionId); } break; //Session End Confirm case 0x1001: SessionEndConfirmPacket endConfirmPacket = new SessionEndConfirmPacket(subpacket.data); if (!endConfirmPacket.invalidPacket && endConfirmPacket.errorCode == 0) { //Check destination, if != 0, update route and start new session if (endConfirmPacket.destinationZone != 0) { session.routing1 = Server.GetServer().GetWorldManager().GetZoneServer(endConfirmPacket.destinationZone); session.routing1.SendSessionStart(session); } else { RemoveSession(Session.Channel.ZONE, endConfirmPacket.sessionId); RemoveSession(Session.Channel.CHAT, endConfirmPacket.sessionId); } } else { Program.Log.Error("Session {0} had an error ending session.", endConfirmPacket.sessionId); } break; //Zone Change Request case 0x1002: WorldRequestZoneChangePacket zoneChangePacket = new WorldRequestZoneChangePacket(subpacket.data); if (!zoneChangePacket.invalidPacket) { GetWorldManager().DoZoneServerChange(session, zoneChangePacket.destinationZoneId, "", zoneChangePacket.destinationSpawnType, zoneChangePacket.destinationX, zoneChangePacket.destinationY, zoneChangePacket.destinationZ, zoneChangePacket.destinationRot); } break; //Change leader or kick case 0x1020: PartyModifyPacket partyModifyPacket = new PartyModifyPacket(subpacket.data); Party pt = mWorldManager.GetPartyManager().GetParty(subpacket.header.targetId); if (pt.GetMemberCount() <= 1) { return; } if (partyModifyPacket.command == PartyModifyPacket.MODIFY_LEADER) { pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name); } else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_KICKPLAYER) { pt.KickPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.name); } else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_LEADER + 2) { pt.SetLeaderPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.actorId); } else if (partyModifyPacket.command == PartyModifyPacket.MODIFY_KICKPLAYER + 2) { pt.KickPlayerRequest(GetSession(subpacket.header.sourceId), partyModifyPacket.actorId); } break; //Party Resign or Disband case 0x1021: PartyLeavePacket partyLeavePacket = new PartyLeavePacket(subpacket.data); Party leavePt = mWorldManager.GetPartyManager().GetParty(subpacket.header.sourceId); if (!partyLeavePacket.isDisband) { leavePt.LeavePlayerRequest(GetSession(subpacket.header.sourceId)); } else { leavePt.DisbandPlayerRequest(GetSession(subpacket.header.sourceId)); } break; //Party Invite Request case 0x1022: PartyInvitePacket partyInvitePacket = new PartyInvitePacket(subpacket.data); if (partyInvitePacket.command == 1) { mWorldManager.ProcessPartyInvite(GetSession(subpacket.header.sourceId), partyInvitePacket.actorId); } else if (partyInvitePacket.command == 0) { Session inviteeByNamesSession = GetSession(partyInvitePacket.name); if (inviteeByNamesSession != null) { mWorldManager.ProcessPartyInvite(GetSession(subpacket.header.sourceId), inviteeByNamesSession.sessionId); } else { //Show not found msg } } break; //Group Invite Result case 0x1023: GroupInviteResultPacket groupInviteResultPacket = new GroupInviteResultPacket(subpacket.data); switch (groupInviteResultPacket.groupType) { case 0x2711: mWorldManager.ProcessPartyInviteResult(GetSession(subpacket.header.sourceId), groupInviteResultPacket.result); break; case 0x2712: mWorldManager.ProcessLinkshellInviteResult(GetSession(subpacket.header.sourceId), groupInviteResultPacket.result); break; } break; //Linkshell create request case 0x1025: CreateLinkshellPacket createLinkshellPacket = new CreateLinkshellPacket(subpacket.data); mWorldManager.GetLinkshellManager().CreateLinkshell(createLinkshellPacket.name, createLinkshellPacket.crestid, createLinkshellPacket.master); break; //Linkshell modify request case 0x1026: ModifyLinkshellPacket modifyLinkshellPacket = new ModifyLinkshellPacket(subpacket.data); switch (modifyLinkshellPacket.argCode) { case 0: break; case 1: mWorldManager.GetLinkshellManager().ChangeLinkshellCrest(modifyLinkshellPacket.currentName, modifyLinkshellPacket.crestid); break; case 2: mWorldManager.GetLinkshellManager().ChangeLinkshellMaster(modifyLinkshellPacket.currentName, modifyLinkshellPacket.master); break; } break; //Linkshell delete request case 0x1027: DeleteLinkshellPacket deleteLinkshellPacket = new DeleteLinkshellPacket(subpacket.data); mWorldManager.GetLinkshellManager().DeleteLinkshell(deleteLinkshellPacket.name); break; //Linkshell set active case 0x1028: LinkshellChangePacket linkshellChangePacket = new LinkshellChangePacket(subpacket.data); mWorldManager.ProcessLinkshellSetActive(GetSession(subpacket.header.sourceId), linkshellChangePacket.lsName); break; //Linkshell invite member case 0x1029: LinkshellInvitePacket linkshellInvitePacket = new LinkshellInvitePacket(subpacket.data); mWorldManager.ProcessLinkshellInvite(GetSession(subpacket.header.sourceId), linkshellInvitePacket.lsName, linkshellInvitePacket.actorId); break; //Linkshell cancel invite case 0x1030: LinkshellInviteCancelPacket linkshellInviteCancelPacket = new LinkshellInviteCancelPacket(subpacket.data); mWorldManager.ProcessLinkshellInviteCancel(GetSession(subpacket.header.sourceId)); break; //Linkshell resign/kicked case 0x1031: LinkshellLeavePacket linkshellLeavePacket = new LinkshellLeavePacket(subpacket.data); Linkshell lsLeave = mWorldManager.GetLinkshellManager().GetLinkshell(linkshellLeavePacket.lsName); if (linkshellLeavePacket.isKicked) { lsLeave.KickRequest(GetSession(subpacket.header.sourceId), linkshellLeavePacket.kickedName); } else { lsLeave.LeaveRequest(GetSession(subpacket.header.sourceId)); } break; //Linkshell rank change case 0x1032: LinkshellRankChangePacket linkshellRankChangePacket = new LinkshellRankChangePacket(subpacket.data); Linkshell lsRankChange = mWorldManager.GetLinkshellManager().GetLinkshell(linkshellRankChangePacket.lsName); lsRankChange.RankChangeRequest(GetSession(subpacket.header.sourceId), linkshellRankChangePacket.name, linkshellRankChangePacket.rank); break; } } else if (mZoneSessionList.ContainsKey(sessionId)) { ClientConnection conn = mZoneSessionList[sessionId].clientConnection; conn.QueuePacket(subpacket); conn.FlushQueuedSendPackets(); } }
public void RequestWorldLinkshellLeave(Player player, string lsname) { SubPacket packet = LinkshellLeavePacket.BuildPacket(player.playerSession, lsname, null, false); player.QueuePacket(packet); }