Release v1.2.3.0

Dual delay system with collapsible UI

- Added separate Initial Delay and Step Delay sliders for better timing control
- Fixed custom delay bug where 290ms custom was failing vs 290ms default
- Implemented collapsible "Set Custom Delays" section for cleaner UI
- Added internal "Use Custom Delays" checkbox for easy on/off control
- Users can now configure delays, enable them, and collapse section to save space
- Updated config system to save/load both delay values
This commit is contained in:
Azrub 2025-07-19 19:54:41 +02:00
parent 4adbe16698
commit 995dc8b505
5 changed files with 53 additions and 27 deletions

View file

@ -61,7 +61,7 @@ void AutomationLogic::ApplyHealerBoons() {
try { try {
g_api->GameBinds.InvokeAsync(EGameBinds_MiscInteract, 50); g_api->GameBinds.InvokeAsync(EGameBinds_MiscInteract, 50);
int initialDelay = g_state.useCustomDelays ? g_state.stepDelay : 390; int initialDelay = g_state.useCustomDelays ? g_state.initialDelay : 390;
Sleep(initialDelay); Sleep(initialDelay);
int delay = g_state.useCustomDelays ? g_state.stepDelay : 290; int delay = g_state.useCustomDelays ? g_state.stepDelay : 290;
@ -128,7 +128,7 @@ void AutomationLogic::ApplyAllBoons() {
try { try {
g_api->GameBinds.InvokeAsync(EGameBinds_MiscInteract, 50); g_api->GameBinds.InvokeAsync(EGameBinds_MiscInteract, 50);
int initialDelay = g_state.useCustomDelays ? g_state.stepDelay : 390; int initialDelay = g_state.useCustomDelays ? g_state.initialDelay : 390;
Sleep(initialDelay); Sleep(initialDelay);
for (int i = 0; i < 20; i++) { for (int i = 0; i < 20; i++) {
@ -182,7 +182,7 @@ void AutomationLogic::ApplyGolemSettings() {
try { try {
g_api->GameBinds.InvokeAsync(EGameBinds_MiscInteract, 50); g_api->GameBinds.InvokeAsync(EGameBinds_MiscInteract, 50);
int initialDelay = g_state.useCustomDelays ? g_state.stepDelay : 390; int initialDelay = g_state.useCustomDelays ? g_state.initialDelay : 390;
Sleep(initialDelay); Sleep(initialDelay);
for (int i = 0; i < 25; i++) { for (int i = 0; i < 25; i++) {

View file

@ -28,7 +28,10 @@ struct GolemHelperState {
bool showUI = false; bool showUI = false;
bool useCustomDelays = false; bool useCustomDelays = false;
bool showAdvanced = false; bool showAdvanced = false;
bool showTimingSettings = false;
int debugCounter = 0; int debugCounter = 0;
int initialDelay = 390;
int stepDelay = 290; int stepDelay = 290;
}; };

View file

@ -21,12 +21,13 @@ void ConfigManager::SaveCustomDelaySettings() {
configFile << "[GolemHelper]" << std::endl; configFile << "[GolemHelper]" << std::endl;
configFile << "useCustomDelays=" << (g_state.useCustomDelays ? "1" : "0") << std::endl; configFile << "useCustomDelays=" << (g_state.useCustomDelays ? "1" : "0") << std::endl;
configFile << "stepDelay=" << g_state.stepDelay << std::endl; configFile << "stepDelay=" << g_state.stepDelay << std::endl;
configFile << "initialDelay=" << g_state.initialDelay << std::endl;
configFile.close(); configFile.close();
char logBuffer[200]; char logBuffer[250];
sprintf_s(logBuffer, "Custom delay settings saved: enabled=%s, delay=%dms", sprintf_s(logBuffer, "Custom delay settings saved: enabled=%s, stepDelay=%dms, initialDelay=%dms",
g_state.useCustomDelays ? "true" : "false", g_state.stepDelay); g_state.useCustomDelays ? "true" : "false", g_state.stepDelay, g_state.initialDelay);
g_api->Log(ELogLevel_INFO, "GolemHelper", logBuffer); g_api->Log(ELogLevel_INFO, "GolemHelper", logBuffer);
} }
@ -66,13 +67,19 @@ void ConfigManager::LoadCustomDelaySettings() {
g_state.stepDelay = delay; g_state.stepDelay = delay;
} }
} }
else if (key == "initialDelay") {
int delay = std::stoi(value);
if (delay >= 100 && delay <= 1000) {
g_state.initialDelay = delay;
}
}
} }
configFile.close(); configFile.close();
char logBuffer[200]; char logBuffer[250];
sprintf_s(logBuffer, "Custom delay settings loaded: enabled=%s, delay=%dms", sprintf_s(logBuffer, "Custom delay settings loaded: enabled=%s, stepDelay=%dms, initialDelay=%dms",
g_state.useCustomDelays ? "true" : "false", g_state.stepDelay); g_state.useCustomDelays ? "true" : "false", g_state.stepDelay, g_state.initialDelay);
g_api->Log(ELogLevel_INFO, "GolemHelper", logBuffer); g_api->Log(ELogLevel_INFO, "GolemHelper", logBuffer);
} }

View file

@ -36,7 +36,7 @@ void Load(AddonAPI* aApi) {
"Toggle GolemHelper UI" "Toggle GolemHelper UI"
); );
g_api->Log(ELogLevel_INFO, "GolemHelper", "=== GolemHelper v1.2.2.0 Loaded ==="); g_api->Log(ELogLevel_INFO, "GolemHelper", "=== GolemHelper v1.2.3.0 Loaded ===");
g_api->Log(ELogLevel_INFO, "GolemHelper", "<c=#00ff00>GolemHelper addon</c> loaded successfully!"); g_api->Log(ELogLevel_INFO, "GolemHelper", "<c=#00ff00>GolemHelper addon</c> loaded successfully!");
} }
@ -59,7 +59,7 @@ extern "C" __declspec(dllexport) AddonDefinition* GetAddonDef() {
def.Signature = -424248; def.Signature = -424248;
def.APIVersion = NEXUS_API_VERSION; def.APIVersion = NEXUS_API_VERSION;
def.Name = "GolemHelper"; def.Name = "GolemHelper";
def.Version = { 1, 2, 2, 0 }; def.Version = { 1, 2, 3, 0 };
def.Author = "Azrub"; def.Author = "Azrub";
def.Description = "Automates the process of setting optimal boon and golem configurations in the training area"; def.Description = "Automates the process of setting optimal boon and golem configurations in the training area";
def.Load = Load; def.Load = Load;

View file

@ -13,7 +13,7 @@ void UIManager::RenderUI() {
if (ImGui::Begin("GolemHelper", &g_state.showUI, ImGuiWindowFlags_AlwaysAutoResize)) { if (ImGui::Begin("GolemHelper", &g_state.showUI, ImGuiWindowFlags_AlwaysAutoResize)) {
ImGui::TextColored(ImVec4(0.2f, 0.8f, 1.0f, 1.0f), "GolemHelper v1.2.2.0"); ImGui::TextColored(ImVec4(0.2f, 0.8f, 1.0f, 1.0f), "GolemHelper v1.2.3.0");
ImGui::Separator(); ImGui::Separator();
ImGui::Text("Status:"); ImGui::Text("Status:");
@ -143,34 +143,47 @@ void UIManager::RenderUI() {
ImGui::Spacing(); ImGui::Spacing();
ImGui::Separator(); ImGui::Separator();
ImGui::Text("Timing Settings");
bool oldUseCustomDelays = g_state.useCustomDelays; if (ImGui::CollapsingHeader("Set Custom Delays")) {
int oldStepDelay = g_state.stepDelay;
ImGui::Checkbox("Use Custom Step Delay", &g_state.useCustomDelays); bool oldUseCustomDelays = g_state.useCustomDelays;
int oldStepDelay = g_state.stepDelay;
int oldInitialDelay = g_state.initialDelay;
if (g_state.useCustomDelays) { ImGui::Checkbox("Use Custom Delays", &g_state.useCustomDelays);
ImGui::SetNextItemWidth(205);
ImGui::SliderInt("", &g_state.stepDelay, 100, 1000, "%d ms");
ImGui::Spacing(); ImGui::Spacing();
ImGui::Text("Initial Delay (after F key):");
ImGui::SetNextItemWidth(205);
ImGui::SliderInt("##initial", &g_state.initialDelay, 100, 1000, "%d ms");
ImGui::Text("Step Delay (between clicks):");
ImGui::SetNextItemWidth(205);
ImGui::SliderInt("##step", &g_state.stepDelay, 100, 1000, "%d ms");
ImGui::Spacing();
if (ImGui::Button("Reset to Default", ImVec2(120, 0))) { if (ImGui::Button("Reset to Default", ImVec2(120, 0))) {
g_state.stepDelay = 290; g_state.stepDelay = 290;
g_state.initialDelay = 390;
ConfigManager::SaveCustomDelaySettings(); ConfigManager::SaveCustomDelaySettings();
} }
ImGui::SameLine(); ImGui::SameLine();
if (ImGui::Button("Slow Mode", ImVec2(80, 0))) { if (ImGui::Button("Slow Mode", ImVec2(80, 0))) {
g_state.stepDelay = 1000; g_state.stepDelay = 1000;
g_state.initialDelay = 600;
ConfigManager::SaveCustomDelaySettings(); ConfigManager::SaveCustomDelaySettings();
} }
ImGui::Spacing(); ImGui::Spacing();
ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.2f, 1.0f), "Increase delay if clicks fail"); ImGui::TextColored(ImVec4(0.8f, 0.8f, 0.2f, 1.0f), "Increase delays if clicks fail");
}
if (oldUseCustomDelays != g_state.useCustomDelays || oldStepDelay != g_state.stepDelay) { if (oldUseCustomDelays != g_state.useCustomDelays ||
ConfigManager::SaveCustomDelaySettings(); oldStepDelay != g_state.stepDelay ||
oldInitialDelay != g_state.initialDelay) {
ConfigManager::SaveCustomDelaySettings();
}
} }
} }
@ -195,7 +208,9 @@ void UIManager::RenderOptions() {
g_state.hitboxType = HITBOX_SMALL; g_state.hitboxType = HITBOX_SMALL;
g_state.useCustomDelays = false; g_state.useCustomDelays = false;
g_state.showAdvanced = false; g_state.showAdvanced = false;
g_state.showTimingSettings = false;
g_state.stepDelay = 290; g_state.stepDelay = 290;
g_state.initialDelay = 390;
g_state.boonsEnabled = true; g_state.boonsEnabled = true;
g_state.golemEnabled = true; g_state.golemEnabled = true;
@ -241,6 +256,7 @@ void UIManager::RenderOptions() {
ImGui::Text("- Timing: %s", g_state.useCustomDelays ? "Custom" : "Default"); ImGui::Text("- Timing: %s", g_state.useCustomDelays ? "Custom" : "Default");
if (g_state.useCustomDelays) { if (g_state.useCustomDelays) {
ImGui::Text("- Custom Delay: %d ms", g_state.stepDelay); ImGui::Text("- Step Delay: %d ms", g_state.stepDelay);
ImGui::Text("- Initial Delay: %d ms", g_state.initialDelay);
} }
} }