using System; using System.Collections.Generic; using System.Linq; using System.Text; using DuckEmulator.HabboHotel.Outside.Furniture; using DuckEmulator.HabboHotel.Outside.Rooms; using DuckEmulator.HabboHotel.Outside.Rooms.Movement; namespace DuckEmulator.HabboHotel.Outside.Items.Triggers { class GateTrigger : TriggerStruct { internal override void FurniPlaced(Furni Furni) { Furni.ExtraData = "0"; Furni.SerializeUpdates(); } internal override void FurniTaken(Furni Furni) { Furni.ExtraData = "0"; } internal override void FurniTriggered(int Request, Furni Furni, RoomUser User) { if (User == null || Furni == null) return; Room Room = User.GetRoom(); if (Room == null || !Room.IsAlive) return; if (!Room.RoomEngine.HasRights(User.GetClient().GetHabbo(), false)) return; int State; if (!int.TryParse(Furni.ExtraData, out State)) { State = 0; } State++; if (State >= Furni.GetBaseItem().InteractionModesCount) State = 0; if (State == 0) { if (Room.UsersOnTile(Furni.X, Furni.Y)) { return; } var Tiles = Room.RoomEngine.GetAffectedTiles(Furni.GetBaseItem().Length, Furni.GetBaseItem().Width, Furni.X, Furni.Y, Furni.Rotation); foreach (AffectedTile Tile in Tiles.Values.ToList()) { if (Room.UsersOnTile(Tile.X, Tile.Y)) { return; } } } Furni.ExtraData = State + ""; Furni.UpdateStatus(); Room.Matrix[Furni.X, Furni.Y] = ((State == 1) ? true : false); } } }