using System; using ACE.Entity; using ACE.Entity.Enum; using ACE.Entity.Models; using ACE.Server.Entity; using ACE.Server.Network.GameEvent.Events; namespace ACE.Server.WorldObjects { public class Hooker : WorldObject { /// /// A new biota be created taking all of its values from weenie. /// public Hooker(Weenie weenie, ObjectGuid guid) : base(weenie, guid) { SetEphemeralValues(); } /// /// Restore a WorldObject from the database. /// public Hooker(Biota biota) : base(biota) { SetEphemeralValues(); } private void SetEphemeralValues() { ActivationResponse |= ActivationResponse.Emote; } public override void ActOnUse(WorldObject activator) { // handled in base.OnActivate -> EmoteManager.OnUse() } public override ActivationResult CheckUseRequirements(WorldObject activator) { if (!(activator is Player player)) return new ActivationResult(false); if (!IsHooked(player, out var hook)) return new ActivationResult(new GameEventWeenieErrorWithString(player.Session, WeenieErrorWithString.ItemOnlyUsableOnHook, Name)); if (hook.HouseOwner == null || (!(hook.House?.RootHouse?.OpenStatus ?? false) && !(hook.House?.RootHouse?.HasPermission(player) ?? false))) return new ActivationResult(new GameEventWeenieError(player.Session, WeenieError.YouAreNotPermittedToUseThatHook)); var myHookGroup = HookGroup ?? HookGroupType.Undef; if ((myHookGroup == HookGroupType.PortalItems || myHookGroup == HookGroupType.SpellTeachingItems) && hook.House?.RootHouse?.HouseType != HouseType.Mansion) return new ActivationResult(new GameEventWeenieError(player.Session, WeenieError.YouAreNotPermittedToUseThatHook)); var baseRequirements = base.CheckUseRequirements(activator); if (!baseRequirements.Success) return baseRequirements; return new ActivationResult(true); } public bool IsHooked (WorldObject checker, out Hook hook) { hook = null; if (!OwnerId.HasValue || OwnerId.Value == 0) return false; var wo = checker.CurrentLandblock.GetObject(OwnerId.Value); if (wo == null) return false; if (!(wo is Hook _hook)) return false; hook = _hook; return true; } } }