Inheritance: MonoBehaviour
Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
        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);
            }
        }
Esempio n. 4
0
        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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
        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();
                }
            }
        }