using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using Blizzard.HabboHotel.Items; using Blizzard.HabboHotel.Users; using Blizzard.HabboHotel.Wired; namespace Blizzard.HabboHotel.Rooms { class Freeze { private RoomItem Item; // counter private List Items; // items on room private Habbo User; private RoomsData cRoom; private Room Room; internal Freeze(RoomItem cItem, List cItems, Habbo cUser, RoomsData sRoom, Room zRoom) { Item = cItem; Items = cItems; User = cUser; cRoom = sRoom; Room = zRoom; } internal void StartGame() { cRoom.FreezePause = false; cRoom.FreezeOnGame = true; List BlueTeam = new List(); List RedTeam = new List(); List YellowTeam = new List(); List GreenTeam = new List(); foreach (Habbo cUser in cRoom.UserList) { if (cUser.CurrentEffect == 40) RedTeam.Add(cUser); else if (cUser.CurrentEffect == 41) GreenTeam.Add(cUser); else if (cUser.CurrentEffect == 42) BlueTeam.Add(cUser); else if (cUser.CurrentEffect == 43) YellowTeam.Add(cUser); if (cUser.CurrentEffect != 40 && cUser.CurrentEffect != 41 && cUser.CurrentEffect != 42 && cUser.CurrentEffect != 43) return; cUser.FreezeLives = 3; cUser.HyperBalls = 0; cUser.HasFreezeShield = false; cUser.HasFreezeDiagonal = false; cUser.SeeMyFreezeLives(); } foreach (RoomItem It in Items) { try { if (It.GetBaseItem().Name == "wf_trg_game_starts") { foreach (RoomItem I in Room.GetItemsForXY(It.X, It.Y)) { WiredEffects Eff = new WiredEffects(I, User); Eff.DoWiredEffects(); } } if (It.GetBaseItem().Name.Contains("es_score")) { if (Item.ExtraData != "0") { It.ExtraData = "0"; It.UpdateState(User); } if (It.GetBaseItem().Name.Contains("_r")) { It.ExtraData = (40 * RedTeam.Count).ToString(); It.UpdateState(User); } else if (It.GetBaseItem().Name.Contains("_g")) { It.ExtraData = (40 * GreenTeam.Count).ToString(); It.UpdateState(User); } else if (It.GetBaseItem().Name.Contains("_b")) { It.ExtraData = (40 * BlueTeam.Count).ToString(); It.UpdateState(User); } else if (It.GetBaseItem().Name.Contains("_y")) { It.ExtraData = (40 * YellowTeam.Count).ToString(); It.UpdateState(User); } } if (It.GetBaseItem().Name.Contains("es_box")) { if (Item.ExtraData != "0") { It.ExtraData = "0"; It.UpdateState(User); } } } catch { continue; } } } internal void End() { cRoom.FreezePause = false; cRoom.FreezeOnGame = false; #region Winners! #region Teams List BlueTeam = new List(); List RedTeam = new List(); List YellowTeam = new List(); List GreenTeam = new List(); foreach (Habbo cUser in cRoom.UserList) { cUser.HasFreezeShield = false; cUser.HasFreezeDiagonal = false; if (cUser.CurrentEffect == 40 || cUser.CurrentEffect == 49) RedTeam.Add(cUser); else if (cUser.CurrentEffect == 41 || cUser.CurrentEffect == 50) GreenTeam.Add(cUser); else if (cUser.CurrentEffect == 42 || cUser.CurrentEffect == 51) BlueTeam.Add(cUser); else if (cUser.CurrentEffect == 43 || cUser.CurrentEffect == 52) YellowTeam.Add(cUser); } #endregion if (BlueTeam.Count >= 1 && YellowTeam.Count == 0 && GreenTeam.Count == 0 && RedTeam.Count == 0) { foreach (Habbo cUser in BlueTeam) { ServerMessage Message = new ServerMessage("Ga"); Message.AddInt(cUser.VirtualId); StaticGame.SSendPacketToAllRoom(cUser.CurrentRoomId, Message); } } else if (BlueTeam.Count == 0 && YellowTeam.Count == 0 && GreenTeam.Count == 0 && RedTeam.Count >= 1) { foreach (Habbo cUser in RedTeam) { ServerMessage Message = new ServerMessage("Ga"); Message.AddInt(cUser.VirtualId); StaticGame.SSendPacketToAllRoom(cUser.CurrentRoomId, Message); } } else if (BlueTeam.Count == 0 && YellowTeam.Count == 0 && GreenTeam.Count >= 1 && RedTeam.Count == 0) { foreach (Habbo cUser in GreenTeam) { ServerMessage Message = new ServerMessage("Ga"); Message.AddInt(cUser.VirtualId); StaticGame.SSendPacketToAllRoom(cUser.CurrentRoomId, Message); } } else if (BlueTeam.Count == 0 && YellowTeam.Count >= 1 && GreenTeam.Count == 0 && RedTeam.Count == 0) { foreach (Habbo cUser in YellowTeam) { ServerMessage Message = new ServerMessage("Ga"); Message.AddInt(cUser.VirtualId); StaticGame.SSendPacketToAllRoom(cUser.CurrentRoomId, Message); } } #endregion #region Finalize Game! foreach (RoomItem CItem in cRoom.FloorItems) { if (CItem.GetBaseItem().Name == "wf_trg_game_ends") { foreach (RoomItem I in Room.GetItemsForXY(CItem.X, CItem.Y)) { WiredEffects Eff = new WiredEffects(I, User); Eff.DoWiredEffects(); } } if (CItem.GetBaseItem().Name == "es_box") { if (Item.ExtraData != "0") { CItem.ExtraData = "0"; CItem.UpdateState(User); } } } foreach (RoomItem CItem in Items) { if (CItem.GetBaseItem().Name == "es_counter") { Thread Battle = StaticGame.CounterSystem[CItem.Id]; StaticGame.CounterSystem.Remove(Item.Id); Battle.Abort(); Battle = null; } } #endregion } internal void StartCounter() { while (true) { if (Item == null || Item.Id == 0) continue; int Time = int.Parse(Item.ExtraData); if (Time > 0) { List BlueTeam = new List(); List RedTeam = new List(); List YellowTeam = new List(); List GreenTeam = new List(); foreach (Habbo cUser in cRoom.UserList) { if (cRoom.CurrentUsersInRoom == 1) { RedTeam.Clear(); BlueTeam.Clear(); GreenTeam.Clear(); RedTeam.Clear(); break; } if (cUser.CurrentEffect == 40 || cUser.CurrentEffect == 49) RedTeam.Add(cUser); else if (cUser.CurrentEffect == 41 || cUser.CurrentEffect == 50) GreenTeam.Add(cUser); else if (cUser.CurrentEffect == 42 || cUser.CurrentEffect == 51) BlueTeam.Add(cUser); else if (cUser.CurrentEffect == 43 || cUser.CurrentEffect == 52) YellowTeam.Add(cUser); else { RedTeam.Clear(); BlueTeam.Clear(); GreenTeam.Clear(); RedTeam.Clear(); if (cUser.CurrentEffect == 12) break; } } if (BlueTeam.Count >= 1 && YellowTeam.Count == 0 && GreenTeam.Count == 0 && RedTeam.Count == 0) Time = 0; else if (BlueTeam.Count == 0 && YellowTeam.Count == 0 && GreenTeam.Count == 0 && RedTeam.Count >= 1) Time = 0; else if (BlueTeam.Count == 0 && YellowTeam.Count == 0 && GreenTeam.Count >= 1 && RedTeam.Count == 0) Time = 0; else if (BlueTeam.Count == 0 && YellowTeam.Count >= 1 && GreenTeam.Count == 0 && RedTeam.Count == 0) Time = 0; else Time--; Item.ExtraData = Time.ToString(); Item.UpdateState(User); if(Time == 0) End(); Thread.Sleep(950); } else { // End Game! try { End(); return; } catch (Exception e) { BlizzardSystem.WriteLine(e.ToString()); } } } } } }