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); } }
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); } } }
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(); } }
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); } }