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