public void LeaveGame(FreezePlayer player, bool died) { if (died) { if (this.FreezeExitTile != null) { player.User.StopMoving(); player.User.SetLocation(this.FreezeExitTile.X, this.FreezeExitTile.Y, this.FreezeExitTile.Z); //set new location player.User.UpdateState(); } } this.Players.Remove(player.User.Session.GetHabbo().ID); player.User.ApplyEffect(-1); HashSet <int> activeTeams = new HashSet <int>(); foreach (FreezePlayer player_ in this.Players.Values) { activeTeams.Add((int)player_.Team); } if (activeTeams.Count <= 1) { this.Room.RoomGameManager.StopGame(); } }
public override void OnWalkOn(RoomUnit user) { if (this.ExtraData == "2000" || this.ExtraData == "3000" || this.ExtraData == "4000" || this.ExtraData == "5000" || this.ExtraData == "6000" || this.ExtraData == "7000") { if (user.IsRealUser && user is RoomUnitUser user_) { FreezePlayer player = this.Room.RoomFreezeManager.TryGetFreezePlayer(user_.Session.GetHabbo().ID); if (player != null) { switch (this.ExtraData) { case "2000": player.Range++; break; case "3000": player.Balls++; break; case "4000": player.BallType = FreezeBallType.Diagonal; break; case "5000": player.BallType = FreezeBallType.Mega; break; case "6000": if (player.Lives < 4) { player.Lives++; this.Room.RoomFreezeManager.UpdateScoreboards(); } player.ShowLives(); break; case "7000": player.ActiveShield(); break; default: return; } } user_.Session.GetHabbo().GetUserStats().FreezePowerUpCollector++; user_.Session.GetHabbo().GetUserAchievements().CheckAchievement("FreezePowerUpCollector"); } this.ExtraData = "1" + this.ExtraData; this.UpdateState(true, true); } }
public void LeaveRoom(RoomUnit roomUnit) { roomUnit.StopMoving(); roomUnit.CurrentTile.UsersOnTile.Remove(roomUnit.VirtualID); this.Room.SendToAll(new MultiRevisionServerMessage(OutgoingPacketsEnum.UserLeaved, new ValueHolder("VirtualID", roomUnit.VirtualID))); this.RoomUsers.Remove(roomUnit.VirtualID, roomUnit.GetType()); this.MovingUsers.TryRemove(roomUnit.VirtualID, out RoomUnit trash); this.Room.UpdateUsersCount(); if (roomUnit.IsRealUser && roomUnit is RoomUnitUser realUser) { foreach (BotAI bot in this.GetBots()) { bot.OnUserLeaveRoom(realUser); } FreezePlayer player = this.Room.RoomFreezeManager.TryGetFreezePlayer(realUser.UserID); if (player != null) { this.Room.RoomFreezeManager.LeaveGame(player, false); } this.Room.RoomGameManager.LeaveTeam(realUser); this.Room.RoomGameManager.LeaveTag(realUser); this.Room.GetTradeByUserId(realUser.UserID)?.Cancel(realUser.Session); if (this.Room.RoomData.IsPublicRoom) { this.Room.RoomGameManager.RoomWobbleSquabbleManager.Leave(realUser); foreach (RoomGameboard board in this.Room.RoomGameManager.Gameboards.Values) { board.Leave(realUser); } } } if (roomUnit is BotAI bot_) { bot_.OnSelfLeaveRoom(false); } }
public override void OnUse(GameClient session, RoomItem item, int request, bool userHasRights) { if (!string.IsNullOrEmpty(this.ExtraData) && this.ExtraData != "0") { if (session != null) { if (this.Room.RoomFreezeManager.GameStarted) { FreezePlayer player = session.GetHabbo().GetRoomSession().GetRoom().RoomFreezeManager.TryGetFreezePlayer(session.GetHabbo().ID); if (player != null && !player.Freezed && player.Balls > 0) { if (Math.Abs(player.User.X - this.X) < 2 && Math.Abs(player.User.Y - this.Y) < 2) { RoomItem freezeTile = session.GetHabbo().GetRoomSession().GetRoom().RoomItemManager.FloorItems.Get(typeof(RoomItemFreezeIceBlock)).FirstOrDefault(t => t.X == this.X && t.Y == this.Y); if (freezeTile != null) { if (!session.GetHabbo().GetRoomSession().GetRoom().RoomFreezeManager.Balls.Any(b => b.Source == freezeTile)) { player.Balls--; if (player.BallType == FreezeBallType.Mega) { freezeTile.ExtraData = "6000"; } else { freezeTile.ExtraData = "1000"; } session.GetHabbo().GetRoomSession().GetRoom().RoomFreezeManager.Balls.Add(new FreezeBall(player.Range, player.BallType, freezeTile, player)); player.BallType = FreezeBallType.Normal; freezeTile.UpdateState(false, true); } } } } } } } }
public List <FreezeBallHit> CalcListOfPoints(long ballId, Point point, FreezePlayer player, int direction, int range) { List <FreezeBallHit> points = new List <FreezeBallHit>(); if (direction == 0) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X + i, point.Y), player, direction, i + 1)); } } else if (direction == 1) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X - i, point.Y), player, direction, i + 1)); } } else if (direction == 2) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X, point.Y + i), player, direction, i + 1)); } } else if (direction == 3) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X, point.Y - i), player, direction, i + 1)); } } else if (direction == 4) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X - i, point.Y - i), player, direction, i + 1)); } } else if (direction == 5) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X + i, point.Y + i), player, direction, i + 1)); } } else if (direction == 6) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X - i, point.Y + i), player, direction, i + 1)); } } else if (direction == 7) { for (int i = 1; i <= range; i++) { points.Add(new FreezeBallHit(ballId, new Point(point.X + 1, point.Y - i), player, direction, i + 1)); } } return(points); }
public void StartGame() { if (!this.GameStarted) { this.GameStarted = true; foreach (RoomUnitUser user in this.Room.RoomUserManager.GetRealUsers()) { if (user.GameType == GameType.Freeze) { FreezePlayer player = new FreezePlayer(this.Room, user, user.GameTeam); this.Players.Add(user.Session.GetHabbo().ID, player); player.Reset(); player.GiveHelmet(); } } if (this.FreezeExitTile != null) { this.FreezeExitTile.ExtraData = "1"; this.FreezeExitTile.UpdateState(false, true); } List <Point> checkedTiles = new List <Point>(); foreach (RoomItem item in this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemFreezeTile))) { item.ExtraData = "0"; item.UpdateState(false, true); Point point = new Point(item.X, item.Y); if (!checkedTiles.Contains(point)) { RoomTile tile = this.Room.RoomGamemapManager.GetTile(point.X, point.Y); if (tile != null) { foreach (RoomUnitUser user in tile.UsersOnTile.Values) { if (!this.Players.ContainsKey(user.Session.GetHabbo().ID)) { if (this.FreezeExitTile != null) { user.StopMoving(); user.SetLocation(this.FreezeExitTile.X, this.FreezeExitTile.Y, this.FreezeExitTile.Z); //set new location user.UpdateState(); } } } } } } foreach (RoomItem item in this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemFreezeIceBlock))) { item.ExtraData = "0"; item.UpdateState(true, true); } this.UpdateScoreboards(); foreach (RoomItem gate in this.FreezeGates.Values) { this.Room.RoomGamemapManager.GetTile(gate.X, gate.Y).UpdateTile(); } } }