Exemplo n.º 1
0
 public override void OnUse(GameClient session, RoomItem item, int request, bool userHasRights)
 {
     if (item.ExtraData != "-1")
     {
         item.ExtraData = "-1";
         item.UpdateState(false, true);
         item.DoUpdate(3);
     }
 }
Exemplo n.º 2
0
        public bool MoveWallItemOnRoom(GameClient session, RoomItem item, WallCoordinate newCoords)
        {
            this.AddedAndMovedRoomItems.AddOrUpdate(item.ID, item, (key, oldValue) => item);
            this.RoomItemStateUpdated.TryRemove(item.ID, out RoomItem item_);

            item.WallCoordinate = newCoords;

            item.UpdateState(false, true);

            item.OnMove(session);
            return(true);
        }
Exemplo n.º 3
0
        public bool BreakIceBlock(RoomItem iceBlock)
        {
            if (iceBlock != null)
            {
                if (string.IsNullOrEmpty(iceBlock.ExtraData) || iceBlock.ExtraData == "0")
                {
                    switch (RandomUtilies.GetRandom(1, 9))
                    {
                    case 1:
                        iceBlock.ExtraData = "2000";
                        break;

                    case 2:
                        iceBlock.ExtraData = "3000";
                        break;

                    case 3:
                        iceBlock.ExtraData = "4000";
                        break;

                    case 4:
                        iceBlock.ExtraData = "5000";
                        break;

                    case 5:
                        iceBlock.ExtraData = "6000";
                        break;

                    case 6:
                        iceBlock.ExtraData = "7000";
                        break;

                    default:
                        iceBlock.ExtraData = "1000";
                        break;
                    }

                    iceBlock.UpdateState(false, true);
                    this.Room.RoomGamemapManager.GetTile(iceBlock.X, iceBlock.Y).UpdateTile();
                    return(true);
                }
            }
            return(false);
        }
Exemplo n.º 4
0
        public override void OnUse(GameClient session, RoomItem item, int request, bool userHasRights)
        {
            if (request == 0)
            {
                if (this.Charges > 0)
                {
                    item.ExtraData = "2";
                    item.UpdateState(false, true);
                    item.DoUpdate(14);

                    this.Charges--;
                    this.Room.RoomItemManager.ItemDataChanged.AddOrUpdate(this.ID, this, (key, oldValue) => this);
                }
            }
            else if (request == 1)
            {
                this.ShowGUI(session);
            }
            else if (request == 2)
            {
                if (session.GetHabbo().TryGetActivityPoints(this.ChargingCostActivityPointsType) >= this.ChargingCostActivityPoints)
                {
                    session.GetHabbo().RemoveActivityPoints(this.ChargingCostActivityPointsType, this.ChargingCostActivityPoints);
                    session.GetHabbo().UpdateActivityPoints(this.ChargingCostActivityPointsType, true);
                    if (this.ChargingCostActivityPointsType == 0)
                    {
                        session.GetHabbo().GetUserStats().FireworksCharger += this.ChargingCostActivityPoints;
                        session.GetHabbo().GetUserAchievements().CheckAchievement("FireworksCharger");
                    }

                    this.Charges += this.ChargingAtOnce;
                    this.Room.RoomItemManager.ItemDataChanged.AddOrUpdate(this.ID, this, (key, oldValue) => this);

                    if (this.ExtraData == "0")
                    {
                        this.ExtraData = "1";
                        this.UpdateState(false, true);
                    }

                    this.ShowGUI(session);
                }
            }
        }
Exemplo n.º 5
0
        public override void OnWalkOn(RoomUnit user)
        {
            this.ExtraData = "1";
            this.UpdateState(false, true);
            this.DoUpdate(1);

            IEnumerable <RoomItem> battleBanzaiTeleports = this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemBattleBanzaiRandomTeleport)).Where(i => i.ID != this.ID);

            if (battleBanzaiTeleports.Count() > 0)
            {
                RoomItem item = battleBanzaiTeleports.ElementAt(RandomUtilies.GetRandom(0, battleBanzaiTeleports.Count() - 1));
                item.ExtraData = "1";
                item.UpdateState(false, true);
                item.DoUpdate(1);

                user.StopMoving();
                user.SetLocation(item.X, item.Y, item.Z); //set new location
                user.UpdateState();
            }
        }
Exemplo n.º 6
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);
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 7
0
        public bool WiredTrigger(RoomItem trigger, RoomUnitUser triggerer, HashSet <uint> used, object extraData = null)
        {
            uint wiredId = trigger?.ID ?? (extraData as RoomItem)?.ID ?? 0;                                                                                                         //Love the one line <3

            if (wiredId > 0 && used.Add(wiredId))                                                                                                                                   //prevent stackoverflow :O :)
            {
                if (extraData is RoomItemWiredCallStack || extraData is RoomItemActionTriggerStacks || (trigger as RoomItemWiredTrigger)?.TryTrigger(triggerer, extraData) == true) //it got triggered
                {
                    bool conditionBlocking = false;

                    IEnumerable <RoomItem> allTileItems = this.Room.RoomGamemapManager.GetTile(trigger.X, trigger.Y).ItemsOnTile.Values.OrderBy(i => i.Z);
                    if (!(extraData is RoomItemWiredCallStack))
                    {
                        trigger.ExtraData = "1";
                        trigger.UpdateState(false, true);
                        trigger.DoUpdate(1);

                        foreach (RoomItemWiredCondition item in allTileItems.Where(i => this.IsWiredCondition(i)))
                        {
                            if (conditionBlocking = item.IsBlocking(triggerer))
                            {
                                break;
                            }
                            else
                            {
                                item.ExtraData = "1";
                                item.UpdateState(false, true);
                                item.DoUpdate(1);
                            }
                        }
                    }

                    if (!conditionBlocking)                                                                    //conditions are fine
                    {
                        List <RoomItem> actionStack = allTileItems.Where(i => this.IsWiredAction(i)).ToList(); //we need get all actions ready

                        if (actionStack.Count > 1)                                                             //there is more then one so we should actually do something
                        {
                            foreach (RoomItem item in allTileItems.Where(i => this.IsWiredExtra(i)))           //only one works
                            {
                                if (item is RoomItemWiredRandom)
                                {
                                    RoomItem randomWired = actionStack[RandomUtilies.GetRandom(0, actionStack.Count - 1)];

                                    actionStack.Clear();
                                    actionStack.Add(randomWired);
                                }
                                else if (item is RoomItemWiredUnseen wired)
                                {
                                    if (wired.UnUsedWireds != null && wired.UnUsedWireds.Count > 0)
                                    {
                                        RoomItem nextWired = wired.UnUsedWireds.First();
                                        actionStack.Clear();
                                        actionStack.Add(nextWired);
                                        wired.UnUsedWireds.Remove(nextWired);
                                    }
                                    else
                                    {
                                        wired.UnUsedWireds = actionStack.ToList();

                                        RoomItem nextWired = wired.UnUsedWireds.First();
                                        actionStack.Clear();
                                        actionStack.Add(nextWired);
                                        wired.UnUsedWireds.Remove(nextWired);
                                    }
                                }
                                else
                                {
                                    continue; //???? why
                                }

                                item.ExtraData = "1";
                                item.UpdateState(false, true);
                                item.DoUpdate(1);

                                break;
                            }
                        }

                        //do the actions
                        foreach (RoomItemWiredAction item in actionStack)
                        {
                            if (item.Delay > 0)
                            {
                                this.WiredDelays.Add(new RoomWiredDelay(item, triggerer, item.Delay, used));
                            }
                            else
                            {
                                item.DoWiredAction(triggerer, used);
                            }

                            item.ExtraData = "1";
                            item.UpdateState(false, true);
                            item.DoUpdate(1);
                        }

                        return(true);
                    }
                    else
                    {
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }
            else
            {
                return(false);
            }
        }
Exemplo n.º 8
0
        public virtual void OnUse(GameClient session, RoomItem item, int request, bool userHasRights)
        {
            int modesCount = this.BaseItem.InteractionModeCounts - 1;

            if (modesCount > 0)
            {
                if (userHasRights)
                {
                    int mode = 0;
                    int.TryParse(item.ExtraData, out mode); //if we fail mode stays at 0

                    int forceState = session != null?session.GetHabbo().GetRoomSession().GetRoomUser().ForceState : -1;

                    if (forceState != -1)
                    {
                        mode = forceState;

                        if (mode > modesCount)
                        {
                            mode = 0;
                        }
                    }
                    else
                    {
                        if (mode <= 0)
                        {
                            mode = 1;
                        }
                        else
                        {
                            if (mode >= modesCount)
                            {
                                mode = 0;
                            }
                            else
                            {
                                mode++;
                            }
                        }
                    }

                    double oldHeight = item.ActiveHeight;
                    item.ExtraData = mode.ToString();
                    item.UpdateState(true, true);
                    if (oldHeight != item.ActiveHeight)
                    {
                        foreach (RoomUnitUser user in this.Room.RoomUserManager.GetRoomUsers())
                        {
                            if (user.X == this.X && user.Y == this.Y)
                            {
                                user.UpdateState();
                            }
                            else
                            {
                                foreach (AffectedTile tile in this.AffectedTiles)
                                {
                                    if (user.X == tile.X && user.Y == tile.Y)
                                    {
                                        user.UpdateState();
                                        break;
                                    }
                                }
                            }
                        }
                    }

                    if (session != null)
                    {
                        this.Room.RoomWiredManager.UseItem(session.GetHabbo().GetRoomSession().GetRoomUser(), this);
                    }
                }
            }
        }
Exemplo n.º 9
0
        public void OnCycle()
        {
            foreach (FreezeBall ball in this.Balls)
            {
                this.Room.ThrowIfRoomCycleCancalled("Cycle room freeze balls", ball); //Have room cycle cancalled?

                if (ball.HitGround)
                {
                    this.Balls.Remove(ball);

                    ball.Player.Balls++;

                    ball.Source.ExtraData = "11200";
                    ball.Source.UpdateState(false, true);

                    int freezedPlayers = this.FreezeUsersOnTile(ball.Source.X, ball.Source.Y);
                    if (freezedPlayers > 0)
                    {
                        ball.Player.User.Session.GetHabbo().GetUserStats().FreezeFigter += freezedPlayers;
                        ball.Player.User.Session.GetHabbo().GetUserAchievements().CheckAchievement("FreezeFigter");
                    }

                    long ballId = Interlocked.Increment(ref this.NextFreezeBallID);
                    if (ball.BallType == FreezeBallType.Normal || ball.BallType == FreezeBallType.Mega)
                    {
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 0, ball.Range));
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 1, ball.Range));
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 2, ball.Range));
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 3, ball.Range));
                    }

                    if (ball.BallType == FreezeBallType.Diagonal || ball.BallType == FreezeBallType.Mega)
                    {
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 4, ball.Range));
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 5, ball.Range));
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 6, ball.Range));
                        this.BallHits.AddRange(this.CalcListOfPoints(ballId, new Point(ball.Source.X, ball.Source.Y), ball.Player, 7, ball.Range));
                    }
                }
            }

            foreach (FreezeBallHit hit in this.BallHits)
            {
                this.Room.ThrowIfRoomCycleCancalled("Cycle room freeze ball hits", hit); //Have room cycle cancalled?

                hit.Ticks--;
                if (hit.Ticks <= 0)
                {
                    this.BallHits.Remove(hit);

                    RoomItem tile = this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemFreezeTile)).FirstOrDefault(t => t.X == hit.Point.X && t.Y == hit.Point.Y);
                    if (tile != null)
                    {
                        if (this.BreakIceBlock(this.Room.RoomItemManager.FloorItems.Get(typeof(RoomItemFreezeIceBlock)).FirstOrDefault(b => b.X == hit.Point.X && b.Y == hit.Point.Y)))
                        {
                            this.BallHits.RemoveAll(b => b.ID == hit.ID && b.Direction == hit.Direction);
                        }

                        tile.ExtraData = "11200";
                        tile.UpdateState(false, true);

                        int freezedPlayers = this.FreezeUsersOnTile(tile.X, tile.Y);
                        if (freezedPlayers > 0)
                        {
                            hit.Player.User.Session.GetHabbo().GetUserStats().FreezeFigter += freezedPlayers;
                            hit.Player.User.Session.GetHabbo().GetUserAchievements().CheckAchievement("FreezeFigter");
                        }
                    }
                    else
                    {
                        this.BallHits.RemoveAll(b => b.ID == hit.ID && b.Direction == hit.Direction);
                    }
                }
            }

            foreach (FreezePlayer player in this.Players.Values)
            {
                this.Room.ThrowIfRoomCycleCancalled("Cycle freeze players", player); //Have room cycle cancalled?

                player.Cycle();
            }
        }