public void Run() { while (!_shouldStop) { IEnumerable <IGrouping <byte, Group> > groups = from grp in RegisteredGroups.GetAllItems() where grp.TalentArenaBattle != null group grp by grp.TalentArenaBattle.GroupLevel into grouping select grouping; foreach (IGrouping <byte, Group> group in groups) { Group prevGroup = null; foreach (Group g in group) { if (prevGroup == null) { prevGroup = g; } else { RegisteredGroups.Remove(g); RegisteredGroups.Remove(prevGroup); MapInstance mapInstance = ServerManager.GenerateMapInstance(2015, MapInstanceType.NormalInstance, new InstanceBag()); mapInstance.IsPVP = true; g.TalentArenaBattle.MapInstance = mapInstance; prevGroup.TalentArenaBattle.MapInstance = mapInstance; g.TalentArenaBattle.Side = 0; prevGroup.TalentArenaBattle.Side = 1; g.TalentArenaBattle.Calls = 5; prevGroup.TalentArenaBattle.Calls = 5; IEnumerable <ClientSession> gs = g.Characters.GetAllItems().Concat(prevGroup.Characters.GetAllItems()); foreach (ClientSession sess in gs) { sess.SendPacket(UserInterfaceHelper.GenerateBSInfo(1, 3, -1, 2)); } Thread.Sleep(1000); foreach (ClientSession sess in gs) { sess.SendPacket(UserInterfaceHelper.GenerateBSInfo(2, 3, 0, 0)); sess.SendPacket(UserInterfaceHelper.GenerateTeamArenaClose()); } Thread.Sleep(5000); foreach (ClientSession sess in gs) { sess.SendPacket(UserInterfaceHelper.GenerateTeamArenaMenu(0, 0, 0, 0, 0)); short x = 125; if (sess.Character.Group.TalentArenaBattle.Side == 0) { x = 15; } ServerManager.Instance.ChangeMapInstance(sess.Character.CharacterId, mapInstance.MapInstanceId, x, 39); sess.SendPacketAfter(UserInterfaceHelper.GenerateTeamArenaMenu(3, 0, 0, 60, 0), 5000); } PlayingGroups[g.GroupId] = new List <Group> { g, prevGroup }; BattleThread battleThread = new BattleThread(); Observable.Timer(TimeSpan.FromSeconds(0)).Subscribe(observer => battleThread.Run(PlayingGroups[g.GroupId])); prevGroup = null; } } } Thread.Sleep(5000); } }
/// <summary> /// Deregisters the mob this occurs when unloading the actor /// </summary> public override void OnDeregister() { BattleThread.Unsubscribe(this); base.OnDeregister(); }