public void OnTrigger(GameClient Session, Item Item, int Request, bool HasRights) { if (Session == null || Item == null) return; if (!HasRights) return; IWiredItem Box = null; if (!Item.GetRoom().GetWired().TryGet(Item.Id, out Box)) return; Item.ExtraData = "1"; Item.UpdateState(false, true); Item.RequestUpdate(2, true); if (Item.GetBaseItem().WiredType == WiredBoxType.AddonRandomEffect) return; if (Item.GetRoom().GetWired().IsTrigger(Item)) { List<int> BlockedItems = WiredBoxTypeUtility.ContainsBlockedEffect(Box, Item.GetRoom().GetWired().GetEffects(Box)); Session.SendMessage(new WiredTriggerConfigComposer(Box, BlockedItems)); } else if (Item.GetRoom().GetWired().IsEffect(Item)) { List<int> BlockedItems = WiredBoxTypeUtility.ContainsBlockedTrigger(Box, Item.GetRoom().GetWired().GetTriggers(Box)); Session.SendMessage(new WiredEffectConfigComposer(Box, BlockedItems)); } else if (Item.GetRoom().GetWired().IsCondition(Item)) Session.SendMessage(new WiredConditionConfigComposer(Box)); }
public void OnTrigger(GameClient Session, Item Item, int Request, bool HasRights) { RoomUser User = null; if (Session != null) User = Item.GetRoom().GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id); if (User == null) return; if (Gamemap.TilesTouching(Item.GetX, Item.GetY, User.X, User.Y)) { if (Item.ExtraData != "-1") { if (Request == -1) { Item.ExtraData = "0"; Item.UpdateState(); } else { Item.ExtraData = "-1"; Item.UpdateState(false, true); Item.RequestUpdate(3, true); } } } else { User.MoveTo(Item.SquareInFront); } }
public void OnWiredTrigger(Item Item) { if (Item == null) return; if (Item.ExtraData == "1") return; Item.ExtraData = "1"; Item.UpdateState(false, true); Item.RequestUpdate(2, true); }
private static bool HandleBottle(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { switch (Event) { case ItemEventType.Placed: case ItemEventType.Removing: if (Item.Flags != "0") { Item.Flags = "0"; Item.DisplayFlags = "0"; RoomManager.MarkWriteback(Item, true); } break; case ItemEventType.Interact: if (Item.Flags != "-1") { Item.Flags = "-1"; Item.DisplayFlags = "-1"; Item.BroadcastStateUpdate(Instance); Item.RequestUpdate(4); } break; case ItemEventType.UpdateTick: Item.Flags = RandomGenerator.GetNext(0, 7).ToString(); Item.DisplayFlags = Item.Flags; Item.BroadcastStateUpdate(Instance); RoomManager.MarkWriteback(Item, true); break; } return true; }
private static bool HandleAlert(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { switch (Event) { case ItemEventType.InstanceLoaded: case ItemEventType.Placed: case ItemEventType.Removing: Item.Flags = "0"; Item.DisplayFlags = "0"; break; case ItemEventType.Interact: if (!Instance.CheckUserRights(Session) || Item.Flags == "1") { break; } Item.Flags = "1"; Item.DisplayFlags = "1"; Item.RequestUpdate(4); Item.BroadcastStateUpdate(Instance); break; case ItemEventType.UpdateTick: if (Item.Flags != "1") { break; } Item.Flags = "0"; Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); break; } return true; }
private static bool HandleWired(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { switch (Event) { case ItemEventType.Interact: switch (Item.Definition.Behavior) { case ItemBehavior.WiredTrigger: Session.SendData (WiredFurniTriggerComposer.Compose (Item, Instance)); break; case ItemBehavior.WiredEffect: Session.SendData (WiredFurniActionComposer.Compose (Item, Instance)); break; } break; case ItemEventType.Placed: Item.WiredData = Instance.WiredManager.LoadWired (Item.Id, Item.Definition.BehaviorData); break; case ItemEventType.Removing: using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Instance.WiredManager.RemoveWired (Item.Id, MySqlClient); } Instance.WiredManager.DeRegisterWalkItem(Item.Id); break; case ItemEventType.UpdateTick: if (Item.Definition.Behavior == ItemBehavior.WiredTrigger) { switch (WiredTypesUtil.TriggerFromInt (Item.Definition.BehaviorData)) { case WiredTriggerTypes.periodically: Instance.WiredManager.ExecuteActions (Item, null); Item.RequestUpdate (Item.WiredData.Data2); break; case WiredTriggerTypes.at_given_time: Instance.WiredManager.ExecuteActions (Item, null); break; } return true; } Item.BroadcastStateUpdate (Instance); break; } return true; }
private static bool HandleRental(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { switch (Event) { case ItemEventType.Placed: case ItemEventType.InstanceLoaded: if (Item.PendingExpiration) { int DesiredTicks = (int)((double)(Math.Ceiling(Item.ExpireTimeLeft * 2))); if (DesiredTicks <= 0) { goto case ItemEventType.UpdateTick; } Item.RequestUpdate(DesiredTicks); return true; } break; case ItemEventType.UpdateTick: if (Item.PendingExpiration) { using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { Item.RemovePermanently(MySqlClient); Instance.TakeItem(Item.Id); Instance.RegenerateRelativeHeightmap(); } return true; } break; } return HandleGenericSwitch(Session, Item, Instance, Event, RequestData); }
private static bool HandleRoller(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { switch (Event) { case ItemEventType.UpdateTick: List<RoomActor> ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List<Item> ItemsToMove = new List<Item>(); if (ActorsToMove != null) { foreach (RoomActor Actor in ActorsToMove) { if (Actor.IsMoving) { continue; } if (Instance.IsValidStep(Actor.Position.GetVector2(), Item.SquareInFront, true)) { Actor.PositionToSet = Item.SquareInFront; Instance.BroadcastMessage(RollerEventComposer.Compose(Actor.Position, new Vector3( Actor.PositionToSet.X, Actor.PositionToSet.Y, Instance.GetUserStepHeight(Actor.PositionToSet)), Item.Id, Actor.Id, 0)); } } } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(4); break; } return true; }
public void OnTrigger(GameClients.GameClient Session, Item Item, int Request, bool HasRights) { if (Session == null || Session.GetHabbo() == null || Item == null) return; Room Room = Session.GetHabbo().CurrentRoom; if(Room == null) return; RoomUser Actor = Room.GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id); if (Actor == null) return; if (Item.ExtraData == "1") return; if(Gamemap.TileDistance(Actor.X, Actor.Y, Item.GetX, Item.GetY) > 2) return; Item.ExtraData = "1"; Item.UpdateState(false, true); Item.RequestUpdate(2, true); }
private static bool HandleOneWayGate(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { switch (Event) { case ItemEventType.InstanceLoaded: case ItemEventType.Moved: case ItemEventType.Placed: if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); } foreach (uint ActorId in Item.TemporaryInteractionReferenceIds.Values) { RoomActor ActorToUnlock = Instance.GetActor(ActorId); if (ActorToUnlock != null) { ActorToUnlock.UnblockWalking(); } } Item.TemporaryInteractionReferenceIds.Clear(); break; case ItemEventType.Interact: using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { DataRow Row1 = MySqlClient.ExecuteQueryRow("SELECT * FROM groups_details WHERE id = '" + Session.CharacterInfo.GroupID + "'"); DataRow Row2 = MySqlClient.ExecuteQueryRow("SELECT * FROM characters WHERE id = '" + Session.CharacterInfo.Id + "'"); DataRow Row3 = MySqlClient.ExecuteQueryRow("SELECT * FROM jobranks WHERE jobid = '" + Session.CharacterInfo.GroupID + "' AND rankid = '" + Row2["jobrank"] + "'"); int room_id = (int)Row1["roomid"]; bool isPolice = false; if ((string)Row3["type"] == "police" && Session.CharacterInfo.Working == 1) { isPolice = true; } RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId); if (Actor == null) { break; } if (Actor.Position.X != Item.SquareInFront.X || Actor.Position.Y != Item.SquareInFront.Y) { Actor.MoveToItemAndInteract(Item, RequestData, Opcode); break; } if (Item.Definition.SpriteId == 2597 && Session.CharacterInfo.Dead == 1 || Session.CharacterInfo.Jailed == 1) { Session.SendData(RoomChatComposer.Compose(Actor.Id, "You are either dead or jailed, You cannot escape!", 0, ChatType.Whisper)); return false; } if (!isPolice) { if (Item.Definition.SpriteId == 2600 && Session.CharacterInfo.Working == 0 || Item.Definition.SpriteId == 2600 && room_id == 0 || Item.Definition.SpriteId == 2600 && room_id != Session.CurrentRoomId) { Session.SendData(RoomChatComposer.Compose(Actor.Id, "You either dont work here or you're not working!", 0, ChatType.Whisper)); return false; } } if (Item.TemporaryInteractionReferenceIds.Count == 0 && Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true) && Item.DisplayFlags == "0") { Actor.BlockWalking(); Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true); Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id); Item.RequestUpdate(1); } } break; case ItemEventType.UpdateTick: RoomActor UpdateActor = null; if (Item.TemporaryInteractionReferenceIds.ContainsKey(1)) { UpdateActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]); } if (UpdateActor == null || !Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true) || ((UpdateActor.Position.X != Item.RoomPosition.X || UpdateActor.Position.Y != Item.RoomPosition.Y) && (UpdateActor.Position.X != Item.SquareInFront.X || UpdateActor.Position.Y != Item.SquareInFront.Y))) { if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); } if (Item.TemporaryInteractionReferenceIds.Count > 0) { Item.TemporaryInteractionReferenceIds.Clear(); } if (UpdateActor != null) { UpdateActor.UnblockWalking(); } break; } Item.DisplayFlags = "1"; Item.BroadcastStateUpdate(Instance); UpdateActor.MoveTo(Item.SquareBehind, true, true, true); Item.RequestUpdate(2); break; } return true; }
private static bool HandleLoveShuffler(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { switch (Event) { case ItemEventType.Placed: case ItemEventType.Removing: Item.Flags = "-1"; Item.DisplayFlags = "-1"; break; case ItemEventType.Interact: if (!Instance.CheckUserRights(Session)) { break; } if (Item.Flags != "0") { Item.Flags = "0"; Item.DisplayFlags = "0"; Item.RequestUpdate(10); Item.BroadcastStateUpdate(Instance); } break; case ItemEventType.UpdateTick: if (Item.Flags == "0") { Item.Flags = RandomGenerator.GetNext(1, 4).ToString(); Item.DisplayFlags = Item.Flags; Item.BroadcastStateUpdate(Instance); } RoomManager.MarkWriteback(Item, true); break; } return true; }
private static bool HandleStepSwitch(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { switch (Event) { case ItemEventType.InstanceLoaded: case ItemEventType.Moved: case ItemEventType.Placed: Item.RequestUpdate(1); break; case ItemEventType.UpdateTick: string Flags = "0"; if (Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()).Count > 0) { Flags = "1"; } if (Item.DisplayFlags != Flags) { Item.DisplayFlags = Flags; Item.BroadcastStateUpdate(Instance); } Item.RequestUpdate(1); break; } return true; }
private static bool HandleTeleporter(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { RoomActor Actor = null; uint LinkedRef = 0; uint.TryParse(Item.Flags, out LinkedRef); switch (Event) { case ItemEventType.InstanceLoaded: Item.DisplayFlags = "0"; break; case ItemEventType.Moved: if (RequestData != 1) { goto case ItemEventType.Removing; } break; case ItemEventType.Removing: case ItemEventType.Placed: if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; if (Event == ItemEventType.Moved) { Item.BroadcastStateUpdate(Instance); } } foreach (uint RefId in Item.TemporaryInteractionReferenceIds.Values) { RoomActor InteractingActor = Instance.GetActor(RefId); if (InteractingActor != null) { InteractingActor.UnblockWalking(); } } Item.TemporaryInteractionReferenceIds.Clear(); break; case ItemEventType.Interact: if (Session != null) { Actor = Instance.GetActorByReferenceId(Session.CharacterId); } if (Actor == null) { break; } bool IsInFront = (Actor.Position.X == Item.SquareInFront.X && Actor.Position.Y == Item.SquareInFront.Y); bool IsInTele = !IsInFront && (Actor.Position.X == Item.RoomPosition.X && Actor.Position.Y == Item.RoomPosition.Y); if (!IsInFront && !IsInTele) { Actor.MoveToItemAndInteract(Item, RequestData, Opcode); break; } if (Item.DisplayFlags == "0" && Item.TemporaryInteractionReferenceIds.Count == 0) { Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id); Actor.BlockWalking(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { TeleporterLinkFinder.FillCache(MySqlClient, LinkedRef); } if (IsInTele) { Item.RequestUpdate(1); } else { Item.DisplayFlags = "1"; Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true); Item.BroadcastStateUpdate(Instance); Item.RequestUpdate(3); } } break; case ItemEventType.UpdateTick: RoomActor OutgoingUser = null; RoomActor IncomingUser = null; if (Item.TemporaryInteractionReferenceIds.ContainsKey(1)) { OutgoingUser = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]); if (OutgoingUser == null) { Item.TemporaryInteractionReferenceIds.Remove(1); } } if (Item.TemporaryInteractionReferenceIds.ContainsKey(2)) { IncomingUser = Instance.GetActor(Item.TemporaryInteractionReferenceIds[2]); if (IncomingUser == null) { Item.TemporaryInteractionReferenceIds.Remove(2); } } string EffectToApply = "0"; uint LinkedRoomRefId = TeleporterLinkFinder.GetValue(LinkedRef); RoomInstance LinkedRoomRef = RoomManager.GetInstanceByRoomId(LinkedRoomRefId); if (OutgoingUser != null) { Item TargetItem = null; Session OutgoingSession = SessionManager.GetSessionByCharacterId(OutgoingUser.ReferenceId); if (LinkedRoomRef == null && LinkedRoomRefId > 0) { RoomManager.TryLoadRoomInstance(LinkedRoomRefId); LinkedRoomRef = RoomManager.GetInstanceByRoomId(LinkedRoomRefId); } if (LinkedRoomRef != null) { TargetItem = LinkedRoomRef.GetItem(LinkedRef); } if (OutgoingSession == null || OutgoingUser.Position.X != Item.RoomPosition.X || OutgoingUser.Position.Y != Item.RoomPosition.Y || (TargetItem != null && TargetItem.TemporaryInteractionReferenceIds.ContainsKey(2))) { OutgoingUser.UnblockWalking(); Item.TemporaryInteractionReferenceIds.Remove(1); } else if (TargetItem != null) { EffectToApply = "2"; RoomActor TeleActor = OutgoingUser; if (Instance != LinkedRoomRef) { OutgoingSession.IsTeleporting = true; OutgoingSession.TargetTeleporterId = LinkedRef; RoomHandler.PrepareRoom(OutgoingSession, LinkedRoomRefId, string.Empty, true); TeleActor = null; } if (TeleActor != null) { TeleActor.BlockWalking(); TeleActor.Position = new Vector3(TargetItem.RoomPosition.X, TargetItem.RoomPosition.Y, TargetItem.RoomPosition.Z); TeleActor.BodyRotation = TargetItem.RoomRotation; TeleActor.HeadRotation = TeleActor.BodyRotation; TeleActor.UpdateNeeded = true; if (TargetItem.DisplayFlags != "2") { TargetItem.DisplayFlags = "2"; TargetItem.BroadcastStateUpdate(LinkedRoomRef); TargetItem.RequestUpdate(3); } TargetItem.TemporaryInteractionReferenceIds.Add(2, TeleActor.Id); } Item.TemporaryInteractionReferenceIds.Remove(1); Item.RequestUpdate(2); } else if (TargetItem == null) { EffectToApply = "1"; OutgoingUser.UnblockWalking(); if (Item.Definition.SpriteId == 5000) { if (Instance.IsValidStep(OutgoingUser.Position.GetVector2(), Item.SquareBehind, true)) { OutgoingUser.MoveTo(Item.SquareInFront); } } else { if (Instance.IsValidStep(OutgoingUser.Position.GetVector2(), Item.SquareInFront, true)) { OutgoingUser.MoveTo(Item.SquareInFront); } } Item.TemporaryInteractionReferenceIds.Remove(1); Item.RequestUpdate(2); } } if (IncomingUser != null) { if (IncomingUser.Position.X != Item.RoomPosition.X || IncomingUser.Position.Y != IncomingUser.Position.Y) { IncomingUser.UnblockWalking(); Item.TemporaryInteractionReferenceIds.Remove(2); } else { EffectToApply = "1"; IncomingUser.UnblockWalking(); Item.TemporaryInteractionReferenceIds.Remove(2); if (Item.Definition.SpriteId == 5000) { if (Instance.CanInitiateMoveToPosition(Item.SquareBehind)) { IncomingUser.MoveTo(Item.SquareBehind); } } else { if (Instance.CanInitiateMoveToPosition(Item.SquareInFront)) { IncomingUser.MoveTo(Item.SquareInFront); } } Item.RequestUpdate(3); } } if (Item.DisplayFlags != EffectToApply) { Item.DisplayFlags = EffectToApply; Item.BroadcastStateUpdate(Instance); } break; } return true; }
private static bool HandleDispenser(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { switch (Event) { case ItemEventType.Moved: { RoomActor InteractingActor = (Item.TemporaryInteractionReferenceIds.ContainsKey(0) ? Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]) : null); if (InteractingActor != null) { InteractingActor.UnblockWalking(); } goto case ItemEventType.InstanceLoaded; } case ItemEventType.InstanceLoaded: { if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); } return true; } case ItemEventType.Interact: { RoomActor InteractingActor = Instance.GetActorByReferenceId(Session.CharacterId); if (InteractingActor == null) { return true; } if (InteractingActor.Position.X != Item.SquareInFront.X || InteractingActor.Position.Y != Item.SquareInFront.Y) { InteractingActor.MoveToItemAndInteract(Item, RequestData, Opcode); return true; } if (Item.TemporaryInteractionReferenceIds.Count == 0) { Item.TemporaryInteractionReferenceIds.Add(0, InteractingActor.Id); InteractingActor.BlockWalking(); InteractingActor.PositionToSet = Item.SquareInFront; int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(), Item.RoomPosition.GetVector2()); if (InteractingActor.BodyRotation != NewRot) { InteractingActor.BodyRotation = NewRot; InteractingActor.HeadRotation = NewRot; InteractingActor.UpdateNeeded = true; } Item.DisplayFlags = "1"; Item.BroadcastStateUpdate(Instance); Item.RequestUpdate(2); } return true; } case ItemEventType.UpdateTick: { if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); } if (Item.TemporaryInteractionReferenceIds.Count < 1) { return true; } RoomActor InteractingActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[0]); Item.TemporaryInteractionReferenceIds.Clear(); if (InteractingActor == null) { return true; } InteractingActor.CarryItem(DrinkSetManager.GetRandomDrinkForSet(Item.Definition.BehaviorData)); int NewRot = Rotation.Calculate(InteractingActor.Position.GetVector2(), Item.RoomPosition.GetVector2()); if (InteractingActor.BodyRotation != NewRot) { InteractingActor.BodyRotation = NewRot; InteractingActor.HeadRotation = NewRot; InteractingActor.UpdateNeeded = true; } InteractingActor.UnblockWalking(); return true; } } return true; }
private static bool HandleRoller(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { switch (Event) { case ItemEventType.UpdateTick: List<RoomActor> ActorsToMove = Instance.GetActorsOnPosition(Item.RoomPosition.GetVector2()); List<Item> ItemsToMove = new List<Item>(); ItemsToMove.AddRange(Instance.GetItemsOnPosition(Item.RoomPosition.GetVector2())); if (ActorsToMove != null) { foreach (RoomActor Actor in ActorsToMove) { if (Actor.IsMoving) { continue; } if (Instance.IsValidStep(Actor.Position.GetVector2(), Item.SquareInFront, true)) { Actor.PositionToSet = Item.SquareInFront; Instance.BroadcastMessage(RollerEventComposer.Compose(Actor.Position, new Vector3( Actor.PositionToSet.X, Actor.PositionToSet.Y, Instance.GetUserStepHeight(Actor.PositionToSet)), Item.Id, Actor.Id, 0)); } } } if (ItemsToMove.Count != 0) { foreach (Item item in ItemsToMove) { if (item == Item) { continue; } if (Item.RoomPosition.X == item.RoomPosition.X && Item.RoomPosition.Y == item.RoomPosition.Y) { Vector2 NewPosition = new Vector2(Item.SquareInFront.X, Item.SquareInFront.Y); int NewRotation = item.RoomRotation; Vector3 FinalizedPosition = Instance.SetFloorItem(Session, item, NewPosition, NewRotation); Vector3 oldpos = item.RoomPosition; if (FinalizedPosition != null) { item.MoveToRoom(null, Instance.RoomId, FinalizedPosition, NewRotation, string.Empty); RoomManager.MarkWriteback(item, false); Instance.RegenerateRelativeHeightmap(); Instance.BroadcastMessage(RoomItemUpdatedComposer.Compose(item)); ItemEventDispatcher.InvokeItemEventHandler(Session, item, Instance, ItemEventType.Moved, 0); Instance.BroadcastMessage(RollerEventComposer.Compose(oldpos, FinalizedPosition, Item.Id, 0, item.Id)); } } } } goto case ItemEventType.InstanceLoaded; case ItemEventType.InstanceLoaded: case ItemEventType.Placed: Item.RequestUpdate(4); break; } return true; }
private static bool HandleFireworks(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { int CurrentCharges = 0; int.TryParse(Item.Flags, out CurrentCharges); switch (Event) { case ItemEventType.InstanceLoaded: case ItemEventType.Placed: case ItemEventType.Moved: case ItemEventType.UpdateTick: string DesiredDisplayFlags = "0"; if (CurrentCharges > 0) { DesiredDisplayFlags = "1"; } if (Item.DisplayFlags != DesiredDisplayFlags) { Item.DisplayFlags = DesiredDisplayFlags; Item.BroadcastStateUpdate(Instance); } break; case ItemEventType.Interact: RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId); if (Actor == null) { return true; } if (Distance.Calculate(Actor.Position.GetVector2(), Item.RoomPosition.GetVector2()) > 1) { Actor.MoveToItemAndInteract(Item, RequestData, Item.SquareBehind); return true; } switch (RequestData) { // Purchase charges case 2: if (Session.CharacterInfo.CreditsBalance < CHARGE_COSTS_CREDITS) { return true; } if (Session.CharacterInfo.ActivityPointsBalance < CHARGE_COSTS_PIXELS) { return true; } bool Update = (CurrentCharges <= 0); CurrentCharges += CHARGE_AMOUNT; Item.Flags = CurrentCharges.ToString(); using (SqlDatabaseClient MySqlClient = SqlDatabaseManager.GetClient()) { if (CHARGE_COSTS_CREDITS > 0) { Session.CharacterInfo.UpdateCreditsBalance(MySqlClient, -CHARGE_COSTS_CREDITS); Session.SendData(CreditsBalanceComposer.Compose(Session.CharacterInfo.CreditsBalance)); } if (CHARGE_COSTS_PIXELS > 0) { Session.CharacterInfo.UpdateActivityPointsBalance(MySqlClient, -CHARGE_COSTS_PIXELS); Session.SendData(ActivityPointsBalanceComposer.Compose(Session.CharacterInfo.ActivityPointsBalance, -CHARGE_COSTS_PIXELS)); } Item.SynchronizeDatabase(MySqlClient, true); } Session.SendData(FireworksChargeInfoComposer.Compose(Item.Id, CurrentCharges, CHARGE_COSTS_CREDITS, CHARGE_COSTS_PIXELS, CHARGE_AMOUNT)); if (Update) { Item.DisplayFlags = "1"; Item.BroadcastStateUpdate(Instance); } break; case 1: Session.SendData(FireworksChargeInfoComposer.Compose(Item.Id, CurrentCharges, CHARGE_COSTS_CREDITS, CHARGE_COSTS_PIXELS, CHARGE_AMOUNT)); break; default: case 0: if (Item.DisplayFlags == "2") { return true; } if (CurrentCharges > 0) { Item.DisplayFlags = "2"; Item.BroadcastStateUpdate(Instance); Item.Flags = (--CurrentCharges).ToString(); RoomManager.MarkWriteback(Item, true); Item.RequestUpdate(Item.Definition.BehaviorData); } else { goto case 1; } break; } break; } return true; }
private static bool HandleDice(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData) { switch (Event) { case ItemEventType.Placed: case ItemEventType.Removing: if (Item.Flags != "0" && Item.Flags != "1") { Item.Flags = "0"; Item.DisplayFlags = "0"; RoomManager.MarkWriteback(Item, true); } break; case ItemEventType.Interact: RoomActor TargetActor = Instance.GetActorByReferenceId(Session.CharacterId); if (TargetActor == null) { break; } if (!Distance.TilesTouching(TargetActor.Position.GetVector2(), Item.RoomPosition.GetVector2()) && !Distance.IsDiagonal(TargetActor.Position.GetVector2(), Item.RoomPosition.GetVector2())) { TargetActor.MoveToItemAndInteract(Item, RequestData); break; } if (RequestData >= 0) { if (Item.Flags != "-1") { Item.Flags = "-1"; Item.DisplayFlags = "-1"; Item.BroadcastStateUpdate(Instance); Item.RequestUpdate(3); } } else { Item.Flags = "0"; Item.DisplayFlags = "0"; } break; case ItemEventType.UpdateTick: Item.Flags = RandomGenerator.GetNext(1, 6).ToString(); Item.DisplayFlags = Item.Flags; Item.BroadcastStateUpdate(Instance); RoomManager.MarkWriteback(Item, true); break; } return true; }
public void OnWiredTrigger(Item Item) { Item.ExtraData = "-1"; Item.UpdateState(false, true); Item.RequestUpdate(4, true); }
public void OnTrigger(GameClient Session, Item Item, int Request, bool HasRights) { if (Session == null) return; RoomUser User = Item.GetRoom().GetRoomUserManager().GetRoomUserByHabbo(Session.GetHabbo().Id); if (Item.InteractingUser2 != User.UserId) Item.InteractingUser2 = User.UserId; if (User == null) { return; } if (Item.GetBaseItem().InteractionType == InteractionType.ONE_WAY_GATE) { if (User.Coordinate != Item.SquareInFront && User.CanWalk) { User.MoveTo(Item.SquareInFront); return; } if (!Item.GetRoom().GetGameMap().ValidTile(Item.SquareBehind.X, Item.SquareBehind.Y) || !Item.GetRoom().GetGameMap().CanWalk(Item.SquareBehind.X, Item.SquareBehind.Y, false) || !Item.GetRoom().GetGameMap().SquareIsOpen(Item.SquareBehind.X, Item.SquareBehind.Y, false)) { return; } if ((User.LastInteraction - PlusEnvironment.GetUnixTimestamp() < 0) && User.InteractingGate && User.GateId == Item.Id) { User.InteractingGate = false; User.GateId = 0; } if (!Item.GetRoom().GetGameMap().CanWalk(Item.SquareBehind.X, Item.SquareBehind.Y, User.AllowOverride)) { return; } if (Item.InteractingUser == 0) { User.InteractingGate = true; User.GateId = Item.Id; Item.InteractingUser = User.HabboId; User.CanWalk = false; if (User.IsWalking && (User.GoalX != Item.SquareInFront.X || User.GoalY != Item.SquareInFront.Y)) { User.ClearMovement(true); } User.AllowOverride = true; User.MoveTo(Item.Coordinate); Item.RequestUpdate(4, true); } } }
private static bool HandleOneWayGate(Session Session, Item Item, RoomInstance Instance, ItemEventType Event, int RequestData, uint Opcode) { switch (Event) { case ItemEventType.InstanceLoaded: case ItemEventType.Moved: case ItemEventType.Placed: if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); } foreach (uint ActorId in Item.TemporaryInteractionReferenceIds.Values) { RoomActor ActorToUnlock = Instance.GetActor(ActorId); if (ActorToUnlock != null) { ActorToUnlock.UnblockWalking(); } } Item.TemporaryInteractionReferenceIds.Clear(); break; case ItemEventType.Interact: RoomActor Actor = Instance.GetActorByReferenceId(Session.CharacterId); if (Actor == null) { break; } if (Actor.Position.X != Item.SquareInFront.X || Actor.Position.Y != Item.SquareInFront.Y) { Actor.MoveToItemAndInteract(Item, RequestData, Opcode); break; } if (Item.TemporaryInteractionReferenceIds.Count == 0 && Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true) && Item.DisplayFlags == "0") { Actor.BlockWalking(); Actor.MoveTo(Item.RoomPosition.GetVector2(), true, true, true); Item.TemporaryInteractionReferenceIds.Add(1, Actor.Id); Item.RequestUpdate(1); } break; case ItemEventType.UpdateTick: RoomActor UpdateActor = null; if (Item.TemporaryInteractionReferenceIds.ContainsKey(1)) { UpdateActor = Instance.GetActor(Item.TemporaryInteractionReferenceIds[1]); } if (UpdateActor == null || !Instance.IsValidStep(Item.RoomPosition.GetVector2(), Item.SquareBehind, true) || ((UpdateActor.Position.X != Item.RoomPosition.X || UpdateActor.Position.Y != Item.RoomPosition.Y) && (UpdateActor.Position.X != Item.SquareInFront.X || UpdateActor.Position.Y != Item.SquareInFront.Y))) { if (Item.DisplayFlags != "0") { Item.DisplayFlags = "0"; Item.BroadcastStateUpdate(Instance); } if (Item.TemporaryInteractionReferenceIds.Count > 0) { Item.TemporaryInteractionReferenceIds.Clear(); } if (UpdateActor != null) { UpdateActor.UnblockWalking(); } break; } Item.DisplayFlags = "1"; Item.BroadcastStateUpdate(Instance); UpdateActor.MoveTo(Item.SquareBehind, true, true, true); Item.RequestUpdate(2); break; } return true; }