public bool Execute(params object[] Params) { if (Params == null || Params.Length == 0 || String.IsNullOrEmpty(StringData)) { return(false); } RoomUser User = Instance.GetRoomUserManager().GetBotByName(StringData); if (User == null) { return(false); } Random rand = new Random(); List <Item> Items = SetItems.Values.ToList(); Items = Items.OrderBy(x => rand.Next()).ToList(); if (Items.Count == 0) { return(false); } Item Item = Items.First(); if (Item == null) { return(false); } if (!Instance.GetRoomItemHandler().GetFloor.Contains(Item)) { SetItems.TryRemove(Item.Id, out Item); if (Items.Contains(Item)) { Items.Remove(Item); } if (SetItems.Count == 0 || Items.Count == 0) { return(false); } Item = Items.First(); if (Item == null) { return(false); } } if (Instance.GetGameMap() == null) { return(false); } if (User.IsWalking) { User.ClearMovement(true); } User.BotData.ForcedMovement = true; User.BotData.TargetCoordinate = new Point(Item.GetX, Item.GetY); User.MoveTo(Item.GetX, Item.GetY); return(true); }
public bool Execute(params object[] Params) { var Player = (Habbo)Params[0]; if (Player == null) { return(false); } var Item = (Item)Params[1]; if (Item == null) { return(false); } if (!SetItems.ContainsKey(Item.Id)) { return(false); } var Effects = Instance.GetWired().GetEffects(this); var Conditions = Instance.GetWired().GetConditions(this); foreach (var Condition in Conditions.ToList()) { if (!Condition.Execute(Player)) { return(false); } if (Instance != null) { Instance.GetWired().OnEvent(Condition.Item); } } //Check the ICollection to find the random addon effect. var HasRandomEffectAddon = Effects.Count(x => x.Type == WiredBoxType.AddonRandomEffect) > 0; if (HasRandomEffectAddon) { //Okay, so we have a random addon effect, now lets get the IWiredItem and attempt to execute it. var RandomBox = Effects.FirstOrDefault(x => x.Type == WiredBoxType.AddonRandomEffect); if (!RandomBox.Execute()) { return(false); } //Success! Let's get our selected box and continue. var SelectedBox = Instance.GetWired().GetRandomEffect(Effects.ToList()); if (!SelectedBox.Execute()) { return(false); } //Woo! Almost there captain, now lets broadcast the update to the room instance. if (Instance != null) { Instance.GetWired().OnEvent(RandomBox.Item); Instance.GetWired().OnEvent(SelectedBox.Item); } } else { foreach (var Effect in Effects.ToList()) { if (!Effect.Execute(Player)) { return(false); } if (Instance != null) { Instance.GetWired().OnEvent(Effect.Item); } } } return(true); }
public bool Execute(params object[] Params) { if (String.IsNullOrEmpty(this.StringData)) { return(false); } RoomUser User = this.Instance.GetRoomUserManager().GetBotByName(this.StringData); if (User == null) { return(false); } Random rand = new Random(); List <Item> Items = SetItems.Values.ToList(); Items = Items.OrderBy(x => rand.Next()).ToList(); if (Items.Count == 0) { return(false); } Item Item = Items.First(); if (Item == null) { return(false); } if (!Instance.GetRoomItemHandler().GetFloor.Contains(Item)) { SetItems.TryRemove(Item.Id, out Item); if (Items.Contains(Item)) { Items.Remove(Item); } if (SetItems.Count == 0 || Items.Count == 0) { return(false); } Item = Items.First(); if (Item == null) { return(false); } } if (this.Instance.GetGameMap() == null) { return(false); } this.Instance.GetGameMap().TeleportToItem(User, Item); this.Instance.GetRoomUserManager().UpdateUserStatusses(); return(true); }
private void TeleportUser(Habbo Player) { if (Player == null) { return; } Room Room = Player.CurrentRoom; if (Room == null) { return; } RoomUser User = Player.CurrentRoom.GetRoomUserManager().GetRoomUserByHabbo(Player.Username); if (User == null) { return; } if (Player.IsTeleporting || Player.IsHopping || Player.TeleporterId != 0) { return; } Random rand = new Random(); List <Item> Items = SetItems.Values.ToList(); Items = Items.OrderBy(x => rand.Next()).ToList(); if (Items.Count == 0) { return; } Item Item = Items.First(); if (Item == null) { return; } if (!Instance.GetRoomItemHandler().GetFloor.Contains(Item)) { SetItems.TryRemove(Item.Id, out Item); if (Items.Contains(Item)) { Items.Remove(Item); } if (SetItems.Count == 0 || Items.Count == 0) { return; } Item = Items.First(); if (Item == null) { return; } } if (Room.GetGameMap() == null) { return; } Room.GetGameMap().TeleportToItem(User, Item); Room.GetRoomUserManager().UpdateUserStatusses(); if (Player.Effects() != null) { Player.Effects().ApplyEffect(0); } }
public void RemoveSet() { SetItems.Remove(SelectedSet); }
public bool OnCycle() { if (Instance == null || !Requested || _next < 1) { return(false); } var time = RavenEnvironment.GetUnixTimestamp(); if (_next <= time) { foreach ( var Item in SetItems.Values .Where(Item => Instance.GetRoomItemHandler().GetFloor.Contains(Item))) { Item toRemove; if (Instance.GetWired().OtherBoxHasItem(this, Item.Id)) { SetItems.TryRemove(Item.Id, out toRemove); } var Point = Instance.GetGameMap().GetChaseMovement(Item); Instance.GetWired().onUserFurniCollision(Instance, Item); if (!Instance.GetGameMap().ItemCanMove(Item, Point)) { continue; } if (Instance.GetGameMap().CanRollItemHere(Point.X, Point.Y) && !Instance.GetGameMap().SquareHasUsers(Point.X, Point.Y)) { var NewZ = Instance.GetGameMap().SqAbsoluteHeight(Point.X, Point.Y); var CanBePlaced = true; var Items = Instance.GetGameMap().GetCoordinatedItems(Point); foreach (var IItem in Items.Where(IItem => IItem != null && IItem.Id != Item.Id)) { if (!IItem.GetBaseItem().Walkable) { _next = 0; CanBePlaced = false; break; } if (CanBePlaced && !IItem.GetBaseItem().Stackable) { CanBePlaced = false; } } if (CanBePlaced && Point != Item.Coordinate) { Instance.SendMessage(new SlideObjectBundleComposer(Item.GetX, Item.GetY, Item.GetZ, Point.X, Point.Y, NewZ, 0, 0, Item.Id)); Instance.GetRoomItemHandler().SetFloorItem(Item, Point.X, Point.Y, NewZ); } } } _next = 0; return(true); } return(false); }
public bool OnCycle() { if (Instance == null || !Requested || _next == 0) { return(false); } long Now = PlusEnvironment.Now(); if (_next < Now) { foreach (Item Item in SetItems.Values.ToList()) { if (Item == null) { continue; } if (!Instance.GetRoomItemHandler().GetFloor.Contains(Item)) { continue; } Item toRemove = null; if (Instance.GetWired().OtherBoxHasItem(this, Item.Id)) { SetItems.TryRemove(Item.Id, out toRemove); } Point Point = HandleMovement(Convert.ToInt32(StringData.Split(';')[0]), new Point(Item.GetX, Item.GetY)); int newRot = HandleRotation(Convert.ToInt32(StringData.Split(';')[1]), Item.Rotation); Instance.GetWired().OnUserFurniCollision(Instance, Item); if (!Instance.GetGameMap().ItemCanMove(Item, Point)) { continue; } if (Instance.GetGameMap().CanRollItemHere(Point.X, Point.Y) && !Instance.GetGameMap().SquareHasUsers(Point.X, Point.Y)) { double NewZ = Instance.GetGameMap().GetHeightForSquareFromData(Point); bool CanBePlaced = true; List <Item> Items = Instance.GetGameMap().GetCoordinatedItems(Point); foreach (Item IItem in Items.ToList()) { if (IItem == null || IItem.Id == Item.Id) { continue; } if (!IItem.GetBaseItem().Walkable) { _next = 0; CanBePlaced = false; break; } if (IItem.TotalHeight > NewZ) { NewZ = IItem.TotalHeight; } if (CanBePlaced == true && !IItem.GetBaseItem().Stackable) { CanBePlaced = false; } } if (newRot != Item.Rotation) { Item.Rotation = newRot; Item.UpdateState(false, true); } if (CanBePlaced && Point != Item.Coordinate) { Instance.SendPacket(new SlideObjectBundleComposer(Item.GetX, Item.GetY, Item.GetZ, Point.X, Point.Y, NewZ, 0, 0, Item.Id)); Instance.GetRoomItemHandler().SetFloorItem(Item, Point.X, Point.Y, NewZ); } } } _next = 0; return(true); } return(false); }