public static void HandlePacket(object session, string packet) { string[] packetSplit = packet.Split(' '); if (packetSplit.Length < 4) { return; } GroupJoinPacket packetDefinition = new GroupJoinPacket(); if (Enum.TryParse(packetSplit[2], out GroupRequestType requestType) && long.TryParse(packetSplit[3], out long characterId)) { packetDefinition.RequestType = requestType; packetDefinition.CharacterId = characterId; packetDefinition.ExecuteHandler(session as ClientSession); } }
private void ExecuteHandler(ClientSession session) { switch (Type) { case 0: if (session.Character.Group?.IsLeader(session) == true && session.Character.Group.GroupType != GroupType.Group && ServerManager.Instance.GroupList.Any(s => s.GroupId == session.Character.Group.GroupId)) { session.SendPacket(UserInterfaceHelper.GenerateRl(1)); } else if (session.Character.Group != null && session.Character.Group.GroupType != GroupType.Group && session.Character.Group.IsLeader(session)) { session.SendPacket(UserInterfaceHelper.GenerateRl(2)); } else if (session.Character.Group != null) { session.SendPacket(UserInterfaceHelper.GenerateRl(3)); } else { session.SendPacket(UserInterfaceHelper.GenerateRl(0)); } break; case 1: if (session.Character.Group != null && session.Character.Group.GroupType != GroupType.Group && ServerManager.Instance.GroupList.All(s => s.GroupId != session.Character.Group.GroupId) && session.Character.Group.Raid?.InstanceBag?.Lock == false) { ServerManager.Instance.GroupList.Add(session.Character.Group); session.SendPacket(UserInterfaceHelper.GenerateRl(1)); session.SendPacket( UserInterfaceHelper.GenerateInfo(Language.Instance.GetMessageFromKey("RAID_REGISTERED"))); ServerManager.Instance.Broadcast(session, $"qnaml 100 #rl {string.Format(Language.Instance.GetMessageFromKey("SEARCH_TEAM_MEMBERS"), session.Character.Name, session.Character.Group.Raid?.Label)}", ReceiverType.AllExceptGroup); } break; case 2: if (session.Character.Group != null && session.Character.Group.GroupType != GroupType.Group && ServerManager.Instance.GroupList.Any(s => s.GroupId == session.Character.Group.GroupId)) { ServerManager.Instance.GroupList.Remove(session.Character.Group); session.SendPacket(UserInterfaceHelper.GenerateRl(2)); session.SendPacket( UserInterfaceHelper.GenerateInfo(Language.Instance.GetMessageFromKey("RAID_UNREGISTERED"))); } break; case 3: ClientSession cl = ServerManager.Instance.GetSessionByCharacterName(CharacterName); if (cl != null) { cl.Character.GroupSentRequestCharacterIds.Add(session.Character.CharacterId); GroupJoinPacket.HandlePacket(session, $"1 pjoin {GroupRequestType.Accepted} {cl.Character.CharacterId}"); } break; } }
private void ExecuteHandler(ClientSession session) { if (session.HasCurrentMapInstance) { Group grp; switch (Type) { // Join Raid case 1: if (session.CurrentMapInstance.MapInstanceType == MapInstanceType.RaidInstance) { return; } ClientSession target = ServerManager.Instance.GetSessionByCharacterId(CharacterId); if (Parameter == null && target?.Character?.Group == null && session.Character.Group.IsLeader(session)) { GroupJoinPacket.HandlePacket(session, $"1 pjoin {GroupRequestType.Invited} {CharacterId}"); } else if (session.Character.Group == null) { GroupJoinPacket.HandlePacket(session, $"1 pjoin {GroupRequestType.Accepted} {CharacterId}"); } break; // Leave Raid case 2: ClientSession sender = ServerManager.Instance.GetSessionByCharacterId(CharacterId); if (sender?.Character?.Group == null) { return; } session.SendPacket( UserInterfaceHelper.GenerateMsg(string.Format(Language.Instance.GetMessageFromKey("LEFT_RAID")), 0)); if (session.CurrentMapInstance?.MapInstanceType == MapInstanceType.RaidInstance) { ServerManager.Instance.ChangeMap(session.Character.CharacterId, session.Character.MapId, session.Character.MapX, session.Character.MapY); } grp = sender.Character?.Group; session.SendPacket(session.Character.GenerateRaid(1, true)); session.SendPacket(session.Character.GenerateRaid(2, true)); grp.Characters.ForEach(s => { s.SendPacket(grp.GenerateRdlst()); s.SendPacket(grp.GeneraterRaidmbf(s)); s.SendPacket(s.Character.GenerateRaid(0)); }); break; // Kick from Raid case 3: if (session.CurrentMapInstance.MapInstanceType == MapInstanceType.RaidInstance) { return; } if (session.Character.Group?.IsLeader(session) == true) { ClientSession chartokick = ServerManager.Instance.GetSessionByCharacterId(CharacterId); if (chartokick.Character?.Group == null) { return; } chartokick.SendPacket( UserInterfaceHelper.GenerateMsg(Language.Instance.GetMessageFromKey("KICK_RAID"), 0)); grp = chartokick.Character?.Group; chartokick.SendPacket(chartokick.Character?.GenerateRaid(1, true)); chartokick.SendPacket(chartokick.Character?.GenerateRaid(2, true)); grp?.LeaveGroup(chartokick); grp?.Characters.ForEach(s => { s.SendPacket(grp.GenerateRdlst()); s.SendPacket(s.Character.GenerateRaid(0)); }); } break; // Disolve Raid case 4: if (session.CurrentMapInstance.MapInstanceType == MapInstanceType.RaidInstance) { return; } if (session.Character.Group?.IsLeader(session) == true) { grp = session.Character.Group; ClientSession[] grpmembers = new ClientSession[40]; grp.Characters.CopyTo(grpmembers); foreach (ClientSession targetSession in grpmembers) { if (targetSession != null) { targetSession.SendPacket(targetSession.Character.GenerateRaid(1, true)); targetSession.SendPacket(targetSession.Character.GenerateRaid(2, true)); targetSession.SendPacket( UserInterfaceHelper.GenerateMsg( Language.Instance.GetMessageFromKey("RAID_DISOLVED"), 0)); grp.LeaveGroup(targetSession); } } ServerManager.Instance.GroupList.RemoveAll(s => s.GroupId == grp.GroupId); ServerManager.Instance.GroupsThreadSafe.Remove(grp.GroupId); } break; } } }