public override void InitialiseOptions() { var gameManager = OpenTibiaUnity.GameManager; var optionStorage = OpenTibiaUnity.OptionStorage; var player = OpenTibiaUnity.Player; bool isClassic = optionStorage.MousePreset == MousePresets.Classic; bool isRegular = optionStorage.MousePreset == MousePresets.Regular; bool isLeftSmartClick = optionStorage.MousePreset == MousePresets.LeftSmartClick; if (!!_lookObject) { CreateTextItem(TextResources.CTX_OBJECT_LOOK, "Shift", () => { if (!!_lookObject) { new LookActionImpl(_absolute, _lookObject, _lookObjectStackPos).Perform(); } }); } // Tibia 11 (CTX_OBJECT_INSPECT_OBJECT) if (!!_useObject && (_useObject.Type.IsContainer || _useObject.Type.DefaultAction == Protobuf.Shared.PlayerAction.Open)) { if (_absolute.x == 65535 && _absolute.y >= 64) { CreateTextItem(TextResources.CTX_OBJECT_OPEN, () => { if (!!_useObject) { GameActionFactory.CreateUseAction(_absolute, _useObject, _useObjectStackPos, Vector3Int.zero, null, 0, UseActionTarget.Auto).Perform(); } }); CreateTextItem(TextResources.CTX_OBJECT_OPEN_NEW_WINDOW, () => { if (!!_useObject) { GameActionFactory.CreateUseAction(_absolute, _useObject, _useObjectStackPos, Vector3Int.zero, null, 0, UseActionTarget.NewWindow).Perform(); } }); } else { CreateTextItem(TextResources.CTX_OBJECT_OPEN, () => { if (!!_useObject) { GameActionFactory.CreateUseAction(_absolute, _useObject, _useObjectStackPos, Vector3Int.zero, null, 0, UseActionTarget.NewWindow).Perform(); } }); } } if (!!_useObject && !_useObject.Type.IsContainer) { string text, shortcut; if (_useObject.Type.IsMultiUse) { text = TextResources.CTX_OBJECT_MULTIUSE; shortcut = isClassic ? "Alt" : (isRegular ? "Ctrl" : null); } else { text = TextResources.CTX_OBJECT_USE; shortcut = isRegular ? "Ctrl" : null; } CreateTextItem(text, shortcut, () => { //if (!!_useObject) // GameActionFactory.CreateUseAction(_absolute, _useObject, _useObjectStackPos, UseActionTarget.Auto).Perform(); }); } if (!!_useObject && _useObject.Type.IsWrappable) { CreateTextItem(TextResources.CTX_OBJECT_WRAP, () => { if (!!_useObject) { new ToggleWrapStateActionImpl(_absolute, _useObject, _useObjectStackPos).Perform(); } }); } if (!!_useObject && _useObject.Type.IsUnwrappable) { CreateTextItem(TextResources.CTX_OBJECT_UNWRAP, () => { if (!!_useObject) { new ToggleWrapStateActionImpl(_absolute, _useObject, _useObjectStackPos).Perform(); } }); } if (!!_useObject && _useObject.Type.IsRotateable) { CreateTextItem(TextResources.CTX_OBJECT_TURN, () => { if (!!_useObject) { new TurnActionImpl(_absolute, _useObject, _useObjectStackPos).Perform(); } }); } if (gameManager.ClientVersion >= 984 && _absolute.x != 65535) { var worldMapStorage = OpenTibiaUnity.WorldMapStorage; var mapPosition = worldMapStorage.ToMap(_absolute); var @object = worldMapStorage.GetObject(mapPosition, 0); if (!!@object && @object.Type.IsGround) { CreateTextItem(TextResources.CTX_OBJECT_BROWSE_FIELD, () => new BrowseFieldActionImpl(_absolute).Perform()); } } CreateSeparatorItem(); if (_absolute.x != 65535 && OpenTibiaUnity.GameManager.ProtocolGame.BugReportsAllowed) { CreateTextItem(TextResources.CTX_OBJECT_REPORT_FIELD, () => { // TODO: Report Coordinate }); CreateSeparatorItem(); } if (!!_lookObject && _absolute.x == 65535 && _absolute.y >= 64 && OpenTibiaUnity.ContainerStorage.GetContainerView(_absolute.y - 64).IsSubContainer) { CreateTextItem(TextResources.CTX_OBJECT_MOVE_UP, () => { if (!!_lookObject) { GameActionFactory.CreateMoveAction(_absolute, _lookObject, _lookObjectStackPos, new Vector3Int(_absolute.x, _absolute.y, 254), MoveActionImpl.MoveAll).Perform(); } }); } if (!!_lookObject && !_lookObject.IsCreature && !_lookObject.Type.IsUnmovable && _lookObject.Type.IsPickupable) { CreateTextItem(TextResources.CTX_OBJECT_TRADE, () => { // TODO //if (!!_lookObject) // new SafeTradeActionImpl(_absolute, _lookObject, _lookObjectStackPos).Perform(); }); } if (!!_lookObject && !_lookObject.IsCreature && _lookObject.Type.IsMarket && player.IsInDepot) { CreateTextItem(TextResources.CTX_OBJECT_SHOW_IN_MARKET, () => { // TODO, show in market }); } if (gameManager.GetFeature(GameFeature.GameQuickLoot) && !!_lookObject && !_lookObject.IsCreature && !_lookObject.Type.IsUnmovable && _lookObject.Type.IsPickupable) { CreateSeparatorItem(); if (_lookObject.Type.IsContainer && _absolute.x == 65535) { CreateTextItem(TextResources.CTX_OBJECT_MANAGE_LOOT_CONTAINERS, () => { // TODO, manage loot containers }); } else { CreateTextItem(TextResources.CTX_OBJECT_QUICK_LOOT, () => { // TODO, quick loot }); } } if (gameManager.GetFeature(GameFeature.GameStash) && !!_lookObject && !_lookObject.IsCreature && !_lookObject.Type.IsUnmovable && _lookObject.Type.IsPickupable && (_lookObject.Type.IsStackable || _lookObject.Type.IsContainer)) { CreateSeparatorItem(); if (_lookObject.Type.IsStackable) { CreateTextItem(TextResources.CTX_OBJECT_STOW, () => { // TODO, stow }); CreateTextItem(TextResources.CTX_OBJECT_STOW_ALL, () => { // TODO, stow all }); } else { CreateTextItem(TextResources.CTX_OBJECT_STOW_CONTENT, () => { // TODO, stow all }); } } var creatureStorage = OpenTibiaUnity.CreatureStorage; if (!!_creature && _creature.Id != player.Id) { if (_creature.IsNPC) { CreateTextItem(TextResources.CTX_CREATURE_TALK, () => { GameActionFactory.CreateGreetAction(_creature).Perform(); }); } else { var attackTarget = creatureStorage.AttackTarget; var text = (!attackTarget || attackTarget.Id != _creature.Id) ? TextResources.CTX_CREATURE_ATTACK_START : TextResources.CTX_CREATURE_ATTACK_STOP; var shortcut = (isClassic || isRegular) ? "Alt" : null; CreateTextItem(text, shortcut, () => { GameActionFactory.CreateToggleAttackTargetAction(_creature, true).Perform(); }); } var followTarget = creatureStorage.FollowTarget; CreateTextItem((!followTarget || followTarget.Id != _creature.Id) ? TextResources.CTX_CREATURE_FOLLOW_START : TextResources.CTX_CREATURE_FOLLOW_STOP, () => { creatureStorage.ToggleFollowTarget(_creature, true); }); if (_creature.IsConfirmedPartyMember) { CreateTextItem(string.Format(TextResources.CTX_PARTY_JOIN_AGGRESSION, _creature.Name), () => { new PartyActionImpl(PartyActionType.JoinAggression, _creature).Perform(); }); } if (_creature.IsHuman) { CreateTextItem(string.Format(TextResources.CTX_PLAYER_CHAT_MESSAGE, _creature.Name), () => { new PrivateChatActionImpl(PrivateChatActionType.OpenMessageChannel, PrivateChatActionImpl.ChatChannelNoChannel, _creature.Name).Perform(); }); var chatStorage = OpenTibiaUnity.ChatStorage; if (chatStorage.HasOwnPrivateChannel) { CreateTextItem(TextResources.CTX_PLAYER_CHAT_INVITE, () => { new PrivateChatActionImpl(PrivateChatActionType.ChatChannelInvite, chatStorage.OwnPrivateChannelId, _creature.Name).Perform(); }); } //if (!BuddylistActionImpl.IsBuddy(this._creature._id)) { // CreateTextItem(TextResources.CTX_PLAYER_ADD_BUDDY, () => { // if (!!_creature) // new BuddylistActionImpl(BuddylistActionImpl.ADD_BY_NAME, _creature.name).Perform(); // }); //} //if (NameFilterActionImpl.s_IsBlacklisted(this._creatureTarget.name)) { // CreateTextItem(string.Format(TextResources.CTX_PLAYER_UNIGNORE, _creature.Name), () => { // if (!!_creature) // new NameFilterActionImpl(NameFilterActionImpl.UNIGNORE, _creature.Name).Perform(); // }); //} else { // CreateTextItem(string.Format(TextResources.CTX_PLAYER_IGNORE, _creature.Name), () => { // if (!!_creature) // new NameFilterActionImpl(NameFilterActionImpl.IGNORE, _creatureTarget.name).Perform(); // }); //} switch (player.PartyFlag) { case PartyFlag.Leader: CreateTextItem(TextResources.CTX_PARTY_EXCLUDE, () => new PartyActionImpl(PartyActionType.Exclude, _creature).Perform()); break; case PartyFlag.Leader_SharedXP_Active: case PartyFlag.Leader_SharedXP_Inactive_Guilty: case PartyFlag.Leader_SharedXP_Inactive_Innocent: case PartyFlag.Leader_SharedXP_Off: switch (_creature.PartyFlag) { case PartyFlag.Member: CreateTextItem(string.Format(TextResources.CTX_PARTY_EXCLUDE, _creature.Name), () => new PartyActionImpl(PartyActionType.Exclude, _creature).Perform()); break; case PartyFlag.Member_SharedXP_Active: case PartyFlag.Member_SharedXP_Inactive_Guilty: case PartyFlag.Member_SharedXP_Inactive_Innocent: case PartyFlag.Member_SharedXP_Off: CreateTextItem(string.Format(TextResources.CTX_PARTY_PASS_LEADERSHIP, _creature.Name), () => new PartyActionImpl(PartyActionType.PassLeadership, _creature).Perform()); break; default: CreateTextItem(string.Format(TextResources.CTX_PARTY_INVITE, _creature.Name), () => new PartyActionImpl(PartyActionType.Invite, _creature).Perform()); break; } break; case PartyFlag.Member_SharedXP_Active: case PartyFlag.Member_SharedXP_Inactive_Guilty: case PartyFlag.Member_SharedXP_Inactive_Innocent: case PartyFlag.Member_SharedXP_Off: break; case PartyFlag.None: case PartyFlag.Member: if (_creature.PartyFlag == PartyFlag.Leader) { CreateTextItem(string.Format(TextResources.CTX_PARTY_JOIN, _creature.Name), () => new PartyActionImpl(PartyActionType.Join, _creature).Perform()); } else if (_creature.PartyFlag != PartyFlag.Other) { CreateTextItem(string.Format(TextResources.CTX_PARTY_INVITE, _creature.Name), () => new PartyActionImpl(PartyActionType.Invite, _creature).Perform()); } break; } // Tibia 11 (CTX_INSPECT_CHARACTER) } CreateSeparatorItem(); if (_creature.IsReportTypeAllowed(ReportTypes.Name)) { CreateTextItem(TextResources.CTX_PLAYER_REPORT_NAME, () => { // TODO //if (!!_creature) // new ReportWidget(ReportTypes.Name, _creature).show(); }); } if (_creature.IsReportTypeAllowed(ReportTypes.Bot)) { CreateTextItem(TextResources.CTX_PLAYER_REPORT_BOT, () => { // TODO //if (!!_creature) // new ReportWidget(ReportTypes.Bot, _creature).show(); }); } } CreateSeparatorItem(); if (!!_creature && _creature.Id == player.Id) { CreateTextItem(TextResources.CTX_PLAYER_SET_OUTFIT, () => StaticActionList.MiscShowOutfit.Perform()); CreateTextItem(!!player.MountOutfit ? TextResources.CTX_PLAYER_DISMOUNT : TextResources.CTX_PLAYER_MOUNT, () => StaticActionList.PlayerMount.Perform()); //CreateTextItem(TextResources.CTX_PLAYER_OPEN_PREY_DIALOG, () => StaticActionList.MiscShowPreyDialog.Perform()); if (player.IsPartyLeader && !player.IsFighting) { if (player.IsPartySharedExperienceActive) { CreateTextItem(string.Format(TextResources.CTX_PARTY_DISABLE_SHARED_EXPERIENCE, _creature.Name), () => new PartyActionImpl(PartyActionType.DisableSharedExperience, _creature).Perform()); } else { CreateTextItem(string.Format(TextResources.CTX_PARTY_ENABLE_SHARED_EXPERIENCE, _creature.Name), () => new PartyActionImpl(PartyActionType.EnableSharedExperience, _creature).Perform()); } } if (player.IsPartyMember && !player.IsFighting) { CreateTextItem(TextResources.CTX_PARTY_LEAVE, () => new PartyActionImpl(PartyActionType.Leave, _creature).Perform()); } // Tibia 11 (CTX_INSPECT_CHARACTER) } CreateSeparatorItem(); if (!!_creature) { CreateTextItem(TextResources.CTX_CREATURE_COPY_NAME, () => { if (!!_creature) { GUIUtility.systemCopyBuffer = _creature.Name; } }); } }
protected AppearanceActions DetermineAction(Vector3 mousePosition, MouseButton mouseButton, EventModifiers eventModifiers, ObjectInstance @object, bool applyAction = false, bool updateCursor = false) { if (!@object) { return(AppearanceActions.None); } if (updateCursor) { updateCursor = OpenTibiaUnity.GameManager.ClientVersion >= 1100; } var inputHandler = OpenTibiaUnity.InputHandler; if (inputHandler.IsMouseButtonDragged(MouseButton.Left) || inputHandler.IsMouseButtonDragged(MouseButton.Right)) { return(AppearanceActions.None); } var action = AppearanceActions.None; var optionStorage = OpenTibiaUnity.OptionStorage; if (optionStorage.MousePreset == MousePresets.LeftSmartClick) { if (eventModifiers == EventModifiers.None || eventModifiers == EventModifiers.Control) { if (mouseButton == MouseButton.Left || mouseButton == MouseButton.None) { action = AppearanceActions.Open; var defaultAction = @object.Type.DefaultAction; if (defaultAction == Protobuf.Shared.PlayerAction.Open) { action = AppearanceActions.Open; } else if (defaultAction == Protobuf.Shared.PlayerAction.Look) { action = AppearanceActions.Look; } else if (defaultAction == Protobuf.Shared.PlayerAction.Use) { action = AppearanceActions.Use; } else if (@object.Type.IsContainer) { action = AppearanceActions.Open; } else if (@object.Type.IsForceUse || @object.Type.IsMultiUse || @object.Type.IsUsable) { action = AppearanceActions.Use; } else { action = AppearanceActions.Look; } } else if (mouseButton == MouseButton.Right && eventModifiers == EventModifiers.None) { action = AppearanceActions.ContextMenu; } } else if (eventModifiers == EventModifiers.Shift) { if (mouseButton == MouseButton.Left || mouseButton == MouseButton.None) { action = AppearanceActions.Look; } } } else if (optionStorage.MousePreset == MousePresets.Classic) { if (mouseButton == MouseButton.Left || mouseButton == MouseButton.None) { if (eventModifiers == EventModifiers.Shift) { action = AppearanceActions.Look; } else if (eventModifiers == EventModifiers.Control) { action = AppearanceActions.ContextMenu; } else if (eventModifiers == EventModifiers.Alt) { action = AppearanceActions.Open; } } else if (mouseButton == MouseButton.Right) { if (eventModifiers == EventModifiers.None) { action = AppearanceActions.Open; } else if (eventModifiers == EventModifiers.Control) { action = AppearanceActions.ContextMenu; } } else if (mouseButton == MouseButton.Both) { action = AppearanceActions.Look; } } else if (optionStorage.MousePreset == MousePresets.Regular) { if (mouseButton == MouseButton.Left || mouseButton == MouseButton.None) { if (eventModifiers == EventModifiers.Shift) { action = AppearanceActions.Look; } else if (eventModifiers == EventModifiers.Control) { action = AppearanceActions.Open; } else if ((eventModifiers & EventModifiers.Alt) != 0 && (eventModifiers & EventModifiers.Shift) == 0) { action = AppearanceActions.ContextMenu; } } else if (mouseButton == MouseButton.Right) { if (eventModifiers == EventModifiers.None) { action = AppearanceActions.ContextMenu; } else if (eventModifiers == EventModifiers.Control) { action = AppearanceActions.Open; } } } if (updateCursor) { OpenTibiaUnity.GameManager.CursorController.SetCursorState(action, CursorPriority.Medium); } if (applyAction) { var absolutePosition = new Vector3Int(65535, 64 + m_ContainerView.ID, m_SlotUnderMouse); switch (action) { case AppearanceActions.None: break; case AppearanceActions.ContextMenu: OpenTibiaUnity.CreateObjectContextMenu(absolutePosition, @object, absolutePosition.z, @object, absolutePosition.z, null) .Display(mousePosition); break; case AppearanceActions.Look: new LookActionImpl(absolutePosition, @object.Type, absolutePosition.z).Perform(); break; case AppearanceActions.Use: if (@object.Type.IsMultiUse) { ObjectMultiUseHandler.Activate(absolutePosition, @object, absolutePosition.z); } else { GameActionFactory.CreateUseAction(absolutePosition, @object.Type, absolutePosition.z, Vector3Int.zero, null, 0, UseActionTarget.Auto).Perform(); } break; case AppearanceActions.Open: GameActionFactory.CreateUseAction(absolutePosition, @object.Type, absolutePosition.z, Vector3Int.zero, null, 0, UseActionTarget.Auto).Perform(); break; case AppearanceActions.Unset: break; } } return(action); }