Add snipe cheat
This commit is contained in:
parent
8b07532080
commit
320bb5edbe
@ -28,7 +28,7 @@
|
||||
"Z": -210.22363
|
||||
},
|
||||
"TerritoryId": 622,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Snipe sheep"
|
||||
}
|
||||
]
|
||||
|
@ -54,7 +54,7 @@
|
||||
"Z": 208.484
|
||||
},
|
||||
"TerritoryId": 787,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Far on the left"
|
||||
}
|
||||
]
|
||||
|
@ -111,7 +111,7 @@
|
||||
"Z": 147.23425
|
||||
},
|
||||
"TerritoryId": 614,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Snipe soldiers"
|
||||
}
|
||||
]
|
||||
@ -127,7 +127,7 @@
|
||||
"Z": 237.04883
|
||||
},
|
||||
"TerritoryId": 614,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Snipe soldiers"
|
||||
}
|
||||
]
|
||||
@ -158,7 +158,7 @@
|
||||
"Z": 603.2959
|
||||
},
|
||||
"TerritoryId": 614,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Snipe soldiers"
|
||||
}
|
||||
]
|
||||
|
@ -62,7 +62,7 @@
|
||||
"Z": 196.55139
|
||||
},
|
||||
"TerritoryId": 621,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Aim at jaw",
|
||||
"Fly": true
|
||||
}
|
||||
@ -95,7 +95,7 @@
|
||||
"Z": 282.7954
|
||||
},
|
||||
"TerritoryId": 621,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Fly": true,
|
||||
"Comment": "Aim at nearest eye"
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
"Z": 755.58093
|
||||
},
|
||||
"TerritoryId": 816,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Fly": true,
|
||||
"Comment": "Throw Porxies at Beavers"
|
||||
}
|
||||
|
@ -48,7 +48,7 @@
|
||||
"Z": 656.9772
|
||||
},
|
||||
"TerritoryId": 814,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click the guy in front of (or near) the light house stairs"
|
||||
}
|
||||
]
|
||||
|
@ -48,7 +48,7 @@
|
||||
"Z": -186.14484
|
||||
},
|
||||
"TerritoryId": 815,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click all four foods"
|
||||
}
|
||||
]
|
||||
|
@ -104,7 +104,7 @@
|
||||
"Z": -92.97333
|
||||
},
|
||||
"TerritoryId": 813,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Tablet is on the right middle shelf of the table"
|
||||
}
|
||||
]
|
||||
|
@ -84,7 +84,7 @@
|
||||
"Z": -359.4873
|
||||
},
|
||||
"TerritoryId": 817,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click murals"
|
||||
}
|
||||
]
|
||||
|
@ -73,7 +73,7 @@
|
||||
"Z": 22.47644
|
||||
},
|
||||
"TerritoryId": 814,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click on the guy left of the the rock"
|
||||
}
|
||||
]
|
||||
|
@ -59,7 +59,7 @@
|
||||
"Z": -616.47974
|
||||
},
|
||||
"TerritoryId": 814,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click red hat dwarf (always shows up in the same location)"
|
||||
}
|
||||
]
|
||||
@ -75,7 +75,7 @@
|
||||
"Z": -616.47974
|
||||
},
|
||||
"TerritoryId": 814,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click red hat dwarf"
|
||||
}
|
||||
]
|
||||
|
@ -54,7 +54,7 @@
|
||||
"Z": -414.38928
|
||||
},
|
||||
"TerritoryId": 818,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click top left (broken) window",
|
||||
"CompletionQuestVariablesFlags": [
|
||||
null,
|
||||
|
@ -44,7 +44,7 @@
|
||||
"Z": -161.45575
|
||||
},
|
||||
"TerritoryId": 814,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Help Master Chai dodge enemies"
|
||||
}
|
||||
]
|
||||
|
@ -119,7 +119,7 @@
|
||||
"Z": -519.18823
|
||||
},
|
||||
"TerritoryId": 956,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Shoot Large Green Bird"
|
||||
}
|
||||
]
|
||||
|
@ -160,7 +160,7 @@
|
||||
"Z": -654.13904
|
||||
},
|
||||
"TerritoryId": 959,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Find \"Runninway?\""
|
||||
}
|
||||
]
|
||||
|
@ -45,7 +45,7 @@
|
||||
},
|
||||
"StopDistance": 5,
|
||||
"TerritoryId": 956,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Find Points of Interest"
|
||||
}
|
||||
]
|
||||
|
@ -104,7 +104,7 @@
|
||||
"Z": 375.50916
|
||||
},
|
||||
"TerritoryId": 960,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Find Errant Omicron"
|
||||
}
|
||||
]
|
||||
|
@ -44,7 +44,7 @@
|
||||
"Z": 398.42822
|
||||
},
|
||||
"TerritoryId": 960,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Identify Anomaly (Head, Elbow or Knee)"
|
||||
}
|
||||
]
|
||||
|
@ -28,7 +28,7 @@
|
||||
"Z": 276.81384
|
||||
},
|
||||
"TerritoryId": 962,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click ewer, head and feet",
|
||||
"AethernetShortcut": [
|
||||
"[Old Sharlayan] Aetheryte Plaza",
|
||||
|
@ -136,7 +136,7 @@
|
||||
"Z": -532.15845
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Inspect Eye, Carrying Pole and Tail",
|
||||
"AetheryteShortcut": "Kozama'uka - Ok'hanu"
|
||||
}
|
||||
|
@ -28,7 +28,7 @@
|
||||
"Z": 343.7704
|
||||
},
|
||||
"TerritoryId": 1188,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click (from left to right) worn tools, Kaahe, crafting materials, untouched meal"
|
||||
}
|
||||
]
|
||||
|
@ -28,7 +28,7 @@
|
||||
"Z": 25.680908
|
||||
},
|
||||
"TerritoryId": 1185,
|
||||
"InteractionType": "WaitForManualProgress",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Inspect Helm, Corpse, Weapon"
|
||||
}
|
||||
]
|
||||
|
@ -28,7 +28,7 @@
|
||||
"Z": -141.92426
|
||||
},
|
||||
"TerritoryId": 1190,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Click (from left to right) pump, middle of the connecting pipes, barrels"
|
||||
}
|
||||
]
|
||||
|
@ -28,7 +28,7 @@
|
||||
"Z": 557.7018
|
||||
},
|
||||
"TerritoryId": 1189,
|
||||
"InteractionType": "Instruction",
|
||||
"InteractionType": "Snipe",
|
||||
"Comment": "Inspect Flag, Red Head, Blue Head"
|
||||
}
|
||||
]
|
||||
|
@ -130,6 +130,7 @@
|
||||
"Jump",
|
||||
"Dive",
|
||||
"Craft",
|
||||
"Snipe",
|
||||
"Instruction",
|
||||
"AcceptQuest",
|
||||
"CompleteQuest",
|
||||
|
@ -27,6 +27,7 @@ public sealed class InteractionTypeConverter() : EnumConverter<EInteractionType>
|
||||
{ EInteractionType.Jump, "Jump" },
|
||||
{ EInteractionType.Dive, "Dive" },
|
||||
{ EInteractionType.Craft, "Craft" },
|
||||
{ EInteractionType.Snipe, "Snipe" },
|
||||
{ EInteractionType.Instruction, "Instruction" },
|
||||
{ EInteractionType.AcceptQuest, "AcceptQuest" },
|
||||
{ EInteractionType.CompleteQuest, "CompleteQuest" },
|
||||
|
@ -26,6 +26,7 @@ public enum EInteractionType
|
||||
Jump,
|
||||
Dive,
|
||||
Craft,
|
||||
Snipe,
|
||||
|
||||
/// <summary>
|
||||
/// Needs to be manually continued.
|
||||
|
@ -19,6 +19,7 @@ internal sealed class Configuration : IPluginConfiguration
|
||||
public bool HideInAllInstances { get; set; } = true;
|
||||
public bool UseEscToCancelQuesting { get; set; } = true;
|
||||
public bool ShowIncompleteSeasonalEvents { get; set; } = true;
|
||||
public bool AutomaticallyCompleteSnipeTasks { get; set; }
|
||||
}
|
||||
|
||||
internal sealed class AdvancedConfiguration
|
||||
|
@ -16,7 +16,8 @@ namespace Questionable.Controller.Steps.Interactions;
|
||||
|
||||
internal static class Interact
|
||||
{
|
||||
internal sealed class Factory(GameFunctions gameFunctions, ICondition condition, ILoggerFactory loggerFactory)
|
||||
internal sealed class Factory(GameFunctions gameFunctions, Configuration configuration, ICondition condition,
|
||||
ILoggerFactory loggerFactory)
|
||||
: ITaskFactory
|
||||
{
|
||||
public IEnumerable<ITask> CreateAllTasks(Quest quest, QuestSequence sequence, QuestStep step)
|
||||
@ -37,6 +38,11 @@ internal static class Interact
|
||||
if (step.DataId == null)
|
||||
yield break;
|
||||
}
|
||||
else if (step.InteractionType == EInteractionType.Snipe)
|
||||
{
|
||||
if (!configuration.General.AutomaticallyCompleteSnipeTasks)
|
||||
yield break;
|
||||
}
|
||||
else if (step.InteractionType != EInteractionType.Interact)
|
||||
yield break;
|
||||
|
||||
|
@ -49,6 +49,7 @@ internal static class WaitAtEnd
|
||||
|
||||
case EInteractionType.WaitForManualProgress:
|
||||
case EInteractionType.Instruction:
|
||||
case EInteractionType.Snipe:
|
||||
return [new WaitNextStepOrSequence()];
|
||||
|
||||
case EInteractionType.Duty:
|
||||
|
48
Questionable/Controller/Utils/AutoSnipeHandler.cs
Normal file
48
Questionable/Controller/Utils/AutoSnipeHandler.cs
Normal file
@ -0,0 +1,48 @@
|
||||
using System;
|
||||
using Dalamud.Hooking;
|
||||
using Dalamud.Plugin.Services;
|
||||
using FFXIVClientStructs.FFXIV.Client.Game.Event;
|
||||
using FFXIVClientStructs.FFXIV.Common.Lua;
|
||||
|
||||
namespace Questionable.Controller.Utils;
|
||||
|
||||
internal sealed unsafe class AutoSnipeHandler : IDisposable
|
||||
{
|
||||
private readonly QuestController _questController;
|
||||
private readonly Configuration _configuration;
|
||||
private readonly Hook<EnqueueSnipeTaskDelegate> _enqueueSnipeTaskHook;
|
||||
|
||||
private delegate ulong EnqueueSnipeTaskDelegate(EventSceneModuleImplBase* scene, lua_State* state);
|
||||
|
||||
public AutoSnipeHandler(QuestController questController, Configuration configuration, IGameInteropProvider gameInteropProvider)
|
||||
{
|
||||
_questController = questController;
|
||||
_configuration = configuration;
|
||||
|
||||
_enqueueSnipeTaskHook =
|
||||
gameInteropProvider.HookFromSignature<EnqueueSnipeTaskDelegate>(
|
||||
"48 89 5C 24 ?? 48 89 6C 24 ?? 48 89 74 24 ?? 57 48 83 EC 50 48 8B F1 48 8D 4C 24 ?? E8 ?? ?? ?? ?? 48 8B 4C 24 ??",
|
||||
EnqueueSnipeTask);
|
||||
}
|
||||
|
||||
public void Enable() => _enqueueSnipeTaskHook.Enable();
|
||||
|
||||
private ulong EnqueueSnipeTask(EventSceneModuleImplBase* scene, lua_State* state)
|
||||
{
|
||||
if (_configuration.General.AutomaticallyCompleteSnipeTasks && _questController.IsRunning)
|
||||
{
|
||||
var val = state->top;
|
||||
val->tt = 3;
|
||||
val->value.n = 1;
|
||||
state->top += 1;
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
return _enqueueSnipeTaskHook.Original.Invoke(scene, state);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
{
|
||||
_enqueueSnipeTaskHook.Dispose();
|
||||
}
|
||||
}
|
@ -18,6 +18,7 @@ using Questionable.Controller.Steps.Common;
|
||||
using Questionable.Controller.Steps.Gathering;
|
||||
using Questionable.Controller.Steps.Interactions;
|
||||
using Questionable.Controller.Steps.Leves;
|
||||
using Questionable.Controller.Utils;
|
||||
using Questionable.Data;
|
||||
using Questionable.External;
|
||||
using Questionable.Functions;
|
||||
@ -108,6 +109,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
|
||||
serviceCollection.AddSingleton<GameFunctions>();
|
||||
serviceCollection.AddSingleton<ChatFunctions>();
|
||||
serviceCollection.AddSingleton<QuestFunctions>();
|
||||
serviceCollection.AddSingleton<AutoSnipeHandler>();
|
||||
|
||||
serviceCollection.AddSingleton<AetherCurrentData>();
|
||||
serviceCollection.AddSingleton<AetheryteData>();
|
||||
@ -240,6 +242,7 @@ public sealed class QuestionablePlugin : IDalamudPlugin
|
||||
serviceProvider.GetRequiredService<LeveUiController>();
|
||||
serviceProvider.GetRequiredService<QuestionableIpc>();
|
||||
serviceProvider.GetRequiredService<DalamudInitializer>();
|
||||
serviceProvider.GetRequiredService<AutoSnipeHandler>().Enable();
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
@ -90,6 +90,16 @@ internal sealed class ConfigWindow : LWindow, IPersistableWindowConfig
|
||||
Save();
|
||||
}
|
||||
|
||||
if (ImGui.CollapsingHeader("Cheats"))
|
||||
{
|
||||
bool automaticallyCompleteSnipeTasks = _configuration.General.AutomaticallyCompleteSnipeTasks;
|
||||
if (ImGui.Checkbox("Automatically complete snipe tasks", ref automaticallyCompleteSnipeTasks))
|
||||
{
|
||||
_configuration.General.AutomaticallyCompleteSnipeTasks = automaticallyCompleteSnipeTasks;
|
||||
Save();
|
||||
}
|
||||
}
|
||||
|
||||
ImGui.EndTabItem();
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ internal sealed partial class ActiveQuestComponent
|
||||
if (!isMinimized)
|
||||
{
|
||||
bool colored = currentStep is
|
||||
{ InteractionType: EInteractionType.Instruction or EInteractionType.WaitForManualProgress };
|
||||
{ InteractionType: EInteractionType.Instruction or EInteractionType.WaitForManualProgress or EInteractionType.Snipe };
|
||||
if (colored)
|
||||
ImGui.PushStyleColor(ImGuiCol.Text, ImGuiColors.DalamudOrange);
|
||||
ImGui.TextUnformatted(currentStep?.Comment ??
|
||||
|
Loading…
Reference in New Issue
Block a user