Exemple #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);
     }
 }
Exemple #2
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);
                }
            }
        }
Exemple #3
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();
            }
        }
Exemple #4
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);
            }
        }