Skip to content

Add DailyTaskAPI quest automation - #197

Open
zrqq31 wants to merge 18 commits into
Darkbot-Plugins:mainfrom
zrqq31:add-daily-task-api
Open

zrqq31 wants to merge 18 commits into
Darkbot-Plugins:mainfrom
zrqq31:add-daily-task-api

Conversation

@zrqq31

@zrqq31 zrqq31 commented Aug 1, 2026

Copy link
Copy Markdown

Summary

  • Adds DailyTaskAPI, a standalone module that discovers supported daily quests from DarkBot quest data and completes NPC, player-combat (opt-in), map, coordinate, collection and ore objectives.
  • Uses DarkBot's runtime loot.npc_infos metadata to resolve NPC maps instead of maintaining a hard-coded NPC/map list.
  • Integrates PET Enemy Locator selection into DailyTaskAPI; there is no separate locator feature.
  • Applies configurable reward and safety policies before accepting daily offers.

Scope

The RAM cleaner was removed from this pull request and will be submitted separately, as requested.

Verification

  • Main sources compile with javac --release 11 against DarkBotAPI 0.9.8.
  • DailyTaskPlannerTest: 14/14 tests passed locally.
  • plugin.json registers only DailyTaskAPI for this contribution.

zrqq31 added 4 commits August 2, 2026 02:15
Add the standalone daily quest module, task planner, native quest sources, combat helper, and PET NPC locator.
Cover daily detection, nested requirements, NPC and map matching, reward filtering, and Uridium acceptance.
Describe daily quest automation, Uridium filtering, PET shutdown, and configuration isolation.
@sourcery-ai

sourcery-ai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor

Reviewer's Guide

Implements a standalone DailyTaskAPI module for discovering and completing daily quests, adds a PET locator integration, and wires the new features into the plugin manifest and documentation without touching other modules’ settings.

Sequence diagram for DailyTaskAPI quest run and PET locator

sequenceDiagram
actor Player
participant BotAPI as Bot
participant DailyTaskAPI as Daily
participant QuestAPI as Quests
participant DailyNpcCombat as Combat
participant PetAPI as Pet
participant DailyNpcPetLocator as PetLocator

Player->>Bot: start bot with DailyTaskAPI
Bot->>Daily: onTickModule()
Daily->>Quests: getDisplayedQuest()
Daily->>DailyTaskPlanner: actionable(quest)
Daily->>DailyNpcCombat: tick(targetNpcDescription)
DailyNpcCombat-->>Daily: combat status

loop quest progress
  Daily->>Quests: progress / completion
  Daily-->>Bot: getStatus()
end

note over PetLocator,Pet: PET gear & locator selection
Pet->>PetLocator: getGearSupplier()
PetLocator->>Bot: getModule()/getNonTemporalModule()
Bot-->>PetLocator: DailyTaskAPI instance
PetLocator->>Daily: getNpcLocatorTargetDescription()
Daily-->>PetLocator: NPC description
PetLocator->>Pet: PetGear.ENEMY_LOCATOR
Pet->>PetLocator: getNpcLocatorPick(available)
PetLocator-->>Pet: pick matching NPC

Daily->>Bot: finishAll() when all dailies done
Daily->>Pet: stopCombat(), disable PET
Daily-->>Bot: setRunning(false) (if enabled in config)
Loading

File-Level Changes

Change Details Files
Introduce DailyTaskAPI module that discovers, selects, executes, and finalizes daily quests using QuestAPI and DarkBot services while keeping other modules’ settings untouched.
  • Implements a state machine to scan quest menu selectors, verify daily quests via QuestAPI data, and select supported active dailies.
  • Builds per-quest execution plans from requirements (NPC kills, map travel, ore selling, box/cargo collection) and drives movement, combat, and collection accordingly.
  • Integrates with StarSystemAPI, EntitiesAPI, MovementAPI, AttackAPI, OreAPI, HeroAPI, and BotAPI to navigate maps, sell ores, and safely park or roam when needed.
  • Tracks completed and known daily quest IDs, avoids re‑scanning finished dailies for the rest of the local day, and stops the bot after all dailies are done while ensuring PET shutdown.
  • Implements local safety behaviour that retreats to portals when HP falls below a configurable threshold and preserves quest state across DarkBot pauses or disconnects.
  • Provides configuration via DailyTaskConfig (quest window auto‑open, delays, retry counts, HP threshold, attack radius, and stop‑when-done flag) and status reporting strings.
  • Uses internal QuestMenuSource and QuestGiverSource helpers for GUI interactions where DarkBotAPI lacks public operations, without screenshots or OCR.
src/main/java/dev/shared/berke/dailytaskapi/DailyTaskAPI.java
src/main/java/dev/shared/berke/dailytaskapi/DailyTaskConfig.java
src/main/java/dev/shared/berke/dailytaskapi/QuestMenuSource.java
src/main/java/dev/shared/berke/dailytaskapi/QuestGiverSource.java
Add DailyNpcCombat helper that reuses DarkBot’s LootModule NPC Kill and Collect logic but restricts targets to the quest-required NPC and coordinates with PET settings.
  • Extends LootModule to inherit standard combat, ammunition, and SafetyFinder behaviour while overriding target selection to match the current quest NPC only.
  • Ensures map selection is driven by DailyTaskAPI rather than the saved working-map configuration.
  • Forces PET enabled in configuration while running, and disables PET when stopping combat.
  • Implements fallback roaming via MovementAPI when no usable target exists, respecting preferred zones by temporarily disabling keep-point roaming when needed.
  • Matches NPCs via normalized names (including boss/uber variants) using DailyTaskPlanner utilities.
src/main/java/dev/shared/berke/dailytaskapi/DailyNpcCombat.java
Add DailyNpcPetLocator feature that selects the quest NPC in PET Enemy Locator while DailyTaskAPI is active, and otherwise defers to existing behaviour.
  • Implements GearSelector and PetGearSupplier to control PET gear based on whether DailyTaskAPI is the active module and has a current NPC description.
  • Selects PetGear.ENEMY_LOCATOR when appropriate and falls back to the current gear or passive behaviour otherwise.
  • Overrides NPC locator pick and pick priority to choose the locator entry matching the quest NPC, using the same normalization and boss/uber handling as DailyTaskPlanner.
  • Determines the active DailyTaskAPI instance by checking the bot’s non-temporal and current module while the bot is running.
src/main/java/dev/shared/berke/dailytaskapi/DailyNpcPetLocator.java
Provide QuestMenuSource and QuestGiverSource utilities to interact with DarkBot’s quest UI and DarkOrbit’s quest-giver modal via native actions and sprite trees.
  • Implements QuestMenuSource to read DarkBot’s native quest GUI sprite tree, discover the selector-row sprites, and compute clickable selector coordinates independent of resolution or fixed slots.
  • Provides a scrollSelectorsDown helper using NativeAction.MouseWheel to scroll quest selectors when needed.
  • Implements QuestGiverSource to compute screen-relative coordinates for tabs, list rows, and accept buttons within the quest-giver modal based on fixed window geometry.
  • Adds methods to select the daily tab, scroll the daily list, click specific rows, accept the selected quest, and close the modal via key events.
src/main/java/dev/shared/berke/dailytaskapi/QuestMenuSource.java
src/main/java/dev/shared/berke/dailytaskapi/QuestGiverSource.java
Add DailyTaskPlanner utility and corresponding test to classify daily quests, parse requirements, and compute progress from QuestAPI data.
  • Implements daily detection via REAL_TIME_HASTE requirements around a 24-hour duration and via quest type strings such as questType_dailyX.
  • Provides helpers to flatten nested requirements, filter actionable ones, and compute overall quest progress based on goals and completion flags.
  • Adds NPC, map, and ore parsing helpers to infer target NPC names, preferred maps per NPC/company, and ore types from requirement descriptions, including normalization of decorated names.
  • Implements reward analysis to detect Uridium presence and to determine whether a quest has only Tetrathrin as a material reward, guiding offer acceptance and skipping logic.
  • Normalizes arbitrary strings to ASCII, lowercased, cleaned forms suitable for comparison and boss/uber classification.
  • Adds a standalone DailyTaskPlannerTest with a main method that asserts the expected behaviour of daily detection, NPC/map/ore resolution, and reward classification.
  • Verifies Uridium and Tetrathrin-only reward handling matches the documented quest-offer policy.
src/main/java/dev/shared/berke/dailytaskapi/DailyTaskPlanner.java
src/test/java/dev/shared/berke/dailytaskapi/DailyTaskPlannerTest.java
Wire the new DailyTaskAPI and PET locator features into documentation and plugin manifest.
  • Updates README to document the Daily Task API feature and its behaviour (discover dailies from quest data, complete objectives, accept Uridium dailies, disable PET and stop bot when finished).
  • Registers DailyTaskAPI and DailyTaskAPI PET Locator features in plugin.json so they are discovered and enabled by DarkBot.
  • Ensures the plugin version is set to 0.12.21 for the release workflow to build and sign the merged JAR.
README.md
src/main/resources/plugin.json

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@sourcery-ai sourcery-ai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey - I've found 4 issues, and left some high level feedback:

  • DailyTaskConfig.maxMenuScanPasses is defined but never used; either integrate it into the quest menu scanning logic or remove it to avoid dead configuration.
  • DailyNpcCombat.stopCombat currently disables the PET unconditionally; consider checking and restoring the user's previous pet-enabled state rather than forcing it off.
  • DailyTaskAPI’s PET deactivation logic relies on reflective access to a private 'pet' field in DailyNpcCombat; this is brittle against internal refactors and could be replaced with a more explicit API or a dedicated callback for PET shutdown.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- DailyTaskConfig.maxMenuScanPasses is defined but never used; either integrate it into the quest menu scanning logic or remove it to avoid dead configuration.
- DailyNpcCombat.stopCombat currently disables the PET unconditionally; consider checking and restoring the user's previous pet-enabled state rather than forcing it off.
- DailyTaskAPI’s PET deactivation logic relies on reflective access to a private 'pet' field in DailyNpcCombat; this is brittle against internal refactors and could be replaced with a more explicit API or a dedicated callback for PET shutdown.

## Individual Comments

### Comment 1
<location path="src/main/java/dev/shared/berke/dailytaskapi/DailyTaskAPI.java" line_range="130" />
<code_context>
+    private final Set<Integer> reviewedOfferIds = new LinkedHashSet<>();
+    private final Set<Integer> seenGiverOfferIds = new LinkedHashSet<>();
+    private final Set<Integer> acceptedOfferIds = new LinkedHashSet<>();
+    private final Set<Integer> skippedTetrathrinOfferIds = new LinkedHashSet<>();
+
+    public DailyTaskAPI(PluginAPI api) {
</code_context>
<issue_to_address>
**issue (bug_risk):** Tetrathrin-only reward skipping is not actually implemented, leading to misleading status and unused tracking.

`skippedTetrathrinOfferIds` is declared and “Tetrathrin pas” is shown in `finishQuestOfferScan`, but the set is never updated and `DailyTaskPlanner.isOnlyTetrathrinReward` is never invoked. This means Tetrathrin-only offers are not actually skipped and the status will always show 0 passes. Please either hook this logic up in `inspectGiverRow` (populate `skippedTetrathrinOfferIds` and skip those offers) or remove the unused set and status to avoid misleading output.
</issue_to_address>

### Comment 2
<location path="src/main/java/dev/shared/berke/dailytaskapi/DailyTaskConfig.java" line_range="25" />
<code_context>
+    @Number(min = 1, max = 5, step = 1)
+    public int maxMenuScanPasses = 1;
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Configuration fields `maxMenuScanPasses` and `stopWhenAllDailyTasksAreDone` are never honored by the module.

These two config options are defined but never influence `DailyTaskAPI` behavior: `menuScanPass` is never checked against `maxMenuScanPasses`, and `finishAll()` always sets state to `DONE` and stops the bot regardless of `stopWhenAllDailyTasksAreDone`. Please either wire these fields into the logic or remove them from the config to avoid misleading, unused settings.
</issue_to_address>

### Comment 3
<location path="src/main/java/dev/shared/berke/dailytaskapi/DailyNpcCombat.java" line_range="27" />
<code_context>
+        super(api);
+    }
+
+    void tick(String description) {
+        targetDescription = description;
+        ConfigSetting<Boolean> petEnabled = api.requireAPI(ConfigAPI.class).requireConfig("pet.enabled");
</code_context>
<issue_to_address>
**suggestion (bug_risk):** Force-enabling PET via config and then disabling it on stop may conflict with user settings and other modules.

`tick` forces `pet.enabled` to `true` on every call, and `stopCombat` turns it off without regard for the previous value. This overrides the user’s global PET preference and can conflict with other modules using `pet.enabled`. Please preserve and restore the original setting or delegate PET control to `DailyNpcPetLocator`/the PET manager instead of mutating the shared config directly.

Suggested implementation:

```java
final class DailyNpcCombat extends LootModule {
    private String targetDescription;
    private Boolean originalPetEnabled;

```

```java
    void tick(String description) {
        targetDescription = description;

        // Capture the original PET enabled state once, then delegate control to the PET manager
        if (originalPetEnabled == null) {
            originalPetEnabled = pet.isEnabled();
        }

        if (!pet.isEnabled()) {
            pet.setEnabled(true);
        }

        super.onTickModule();
    }

```

```java
    void stopCombat() {
        attack.stopAttack();
        attack.setTarget(null);
        targetDescription = null;

        // Restore PET state to whatever it was before this module started manipulating it
        if (originalPetEnabled != null && pet.isEnabled() != originalPetEnabled) {
            pet.setEnabled(originalPetEnabled);
        }
        originalPetEnabled = null;
    }

```

This change assumes:
1. The `pet` field is a PET manager/DailyNpcPetLocator that exposes `isEnabled()` and `setEnabled(boolean)` and internally respects the global `pet.enabled` config.
2. `tick` is only called while this module is active; if other modules also toggle PET, you may need a more sophisticated ownership/priority mechanism in the PET manager to avoid conflicts.
3. If PET can be `null` in this class, wrap all `pet` accesses in null checks.
If other parts of the file cached or manipulated `pet.enabled` via `ConfigAPI`, those should be updated to use the PET manager as well to keep all PET control centralized.
</issue_to_address>

### Comment 4
<location path="src/test/java/dev/shared/berke/dailytaskapi/DailyTaskPlannerTest.java" line_range="77-80" />
<code_context>
+                "a quest containing Uridium must be accepted even with Tetrathrin");
+        require(!DailyTaskPlanner.isOnlyTetrathrinReward(List.of(reward("currency_experience", 1000))),
+                "currency-only rewards are not a Tetrathrin variant");
+        require(DailyTaskPlanner.hasUridiumReward(List.of(
+                        reward("currency_experience", 1000), reward("currency_uridium", 1500))),
+                "Uridium reward must be detected from the source reward type");
+        require(!DailyTaskPlanner.hasUridiumReward(List.of(reward("resource_tetrathrin", 10))),
+                "a reward list without Uridium must be rejected");
+        System.out.println("DailyTaskPlannerTest: OK");
</code_context>
<issue_to_address>
**suggestion (testing):** Missing tests for `progress(...)` and timer-related requirement handling in the planner

The planner’s `progress(...)` and `actionableIncludingCompleted(...)` logic (zero-goal requirements, completed vs. non-completed, and exclusion of haste/timer types) is currently untested. Please add tests that cover quests with timer requirements, zero-goal requirements, and partially completed requirements, and assert the resulting progress values so we verify the daily completion detection and 99.99% threshold behavior used by `DailyTaskAPI`.
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

private final Set<Integer> reviewedOfferIds = new LinkedHashSet<>();
private final Set<Integer> seenGiverOfferIds = new LinkedHashSet<>();
private final Set<Integer> acceptedOfferIds = new LinkedHashSet<>();
private final Set<Integer> skippedTetrathrinOfferIds = new LinkedHashSet<>();

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): Tetrathrin-only reward skipping is not actually implemented, leading to misleading status and unused tracking.

skippedTetrathrinOfferIds is declared and “Tetrathrin pas” is shown in finishQuestOfferScan, but the set is never updated and DailyTaskPlanner.isOnlyTetrathrinReward is never invoked. This means Tetrathrin-only offers are not actually skipped and the status will always show 0 passes. Please either hook this logic up in inspectGiverRow (populate skippedTetrathrinOfferIds and skip those offers) or remove the unused set and status to avoid misleading output.

@Number(min = 0.10, max = 0.90, step = 0.05)
public double minimumHpPercent = 0.30;

public boolean stopWhenAllDailyTasksAreDone = true;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Configuration fields maxMenuScanPasses and stopWhenAllDailyTasksAreDone are never honored by the module.

These two config options are defined but never influence DailyTaskAPI behavior: menuScanPass is never checked against maxMenuScanPasses, and finishAll() always sets state to DONE and stops the bot regardless of stopWhenAllDailyTasksAreDone. Please either wire these fields into the logic or remove them from the config to avoid misleading, unused settings.

super(api);
}

void tick(String description) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (bug_risk): Force-enabling PET via config and then disabling it on stop may conflict with user settings and other modules.

tick forces pet.enabled to true on every call, and stopCombat turns it off without regard for the previous value. This overrides the user’s global PET preference and can conflict with other modules using pet.enabled. Please preserve and restore the original setting or delegate PET control to DailyNpcPetLocator/the PET manager instead of mutating the shared config directly.

Suggested implementation:

final class DailyNpcCombat extends LootModule {
    private String targetDescription;
    private Boolean originalPetEnabled;
    void tick(String description) {
        targetDescription = description;

        // Capture the original PET enabled state once, then delegate control to the PET manager
        if (originalPetEnabled == null) {
            originalPetEnabled = pet.isEnabled();
        }

        if (!pet.isEnabled()) {
            pet.setEnabled(true);
        }

        super.onTickModule();
    }
    void stopCombat() {
        attack.stopAttack();
        attack.setTarget(null);
        targetDescription = null;

        // Restore PET state to whatever it was before this module started manipulating it
        if (originalPetEnabled != null && pet.isEnabled() != originalPetEnabled) {
            pet.setEnabled(originalPetEnabled);
        }
        originalPetEnabled = null;
    }

This change assumes:

  1. The pet field is a PET manager/DailyNpcPetLocator that exposes isEnabled() and setEnabled(boolean) and internally respects the global pet.enabled config.
  2. tick is only called while this module is active; if other modules also toggle PET, you may need a more sophisticated ownership/priority mechanism in the PET manager to avoid conflicts.
  3. If PET can be null in this class, wrap all pet accesses in null checks.
    If other parts of the file cached or manipulated pet.enabled via ConfigAPI, those should be updated to use the PET manager as well to keep all PET control centralized.

Comment on lines +77 to +80
require(DailyTaskPlanner.hasUridiumReward(List.of(
reward("currency_experience", 1000), reward("currency_uridium", 1500))),
"Uridium reward must be detected from the source reward type");
require(!DailyTaskPlanner.hasUridiumReward(List.of(reward("resource_tetrathrin", 10))),

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

suggestion (testing): Missing tests for progress(...) and timer-related requirement handling in the planner

The planner’s progress(...) and actionableIncludingCompleted(...) logic (zero-goal requirements, completed vs. non-completed, and exclusion of haste/timer types) is currently untested. Please add tests that cover quests with timer requirements, zero-goal requirements, and partially completed requirements, and assert the resulting progress values so we verify the daily completion detection and 99.99% threshold behavior used by DailyTaskAPI.

@dm94 dm94 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • Comments and messages in English
  • It doesn’t meet the minimum code quality standards

Have you checked that it works?

@zrqq31 zrqq31 changed the title Add DailyTaskAPI daily quest module Add DailyTaskAPI quest automation and RAM cleaner Aug 11, 2026
@dm94

dm94 commented Aug 11, 2026

Copy link
Copy Markdown
Member

Each feature in a different folder, and as I’ve already mentioned, clean up the code first

@zrqq31

zrqq31 commented Aug 11, 2026 via email

Copy link
Copy Markdown
Author

@zrqq31

zrqq31 commented Sep 1, 2026

Copy link
Copy Markdown
Author

Hi @dm94, the requested folder separation and code cleanup have been completed. SonarCloud Quality Gate is passing. Could you please re-review PR #197 and approve the pending workflows when convenient?

@zrqq31
zrqq31 requested a review from dm94 September 1, 2026 10:09
@dm94

dm94 commented Sep 1, 2026

Copy link
Copy Markdown
Member

Hi @dm94, the requested folder separation and code cleanup have been completed. SonarCloud Quality Gate is passing. Could you please re-review PR #197 and approve the pending workflows when convenient?

Have you checked that it works properly?

@dm94 dm94 left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

On the other hand:

  • I don’t see the point of DailyNpcPetLocator
  • The functionality of DailyRamCleaner should be in a separate pull request

Comment thread src/main/java/dev/shared/berke/dailytaskapi/DailyTaskPlanner.java Outdated
Comment thread src/main/java/dev/shared/berke/dailytaskapi/DailyTaskPlanner.java Outdated
@zrqq31 zrqq31 changed the title Add DailyTaskAPI quest automation and RAM cleaner Add DailyTaskAPI quest automation Sep 1, 2026
@zrqq31

zrqq31 commented Sep 1, 2026

Copy link
Copy Markdown
Author

Addressed the latest review in bba2eaa:

  • Removed the standalone DailyNpcPetLocator feature and integrated its small Enemy Locator supplier into DailyTaskAPI.
  • Removed RAM Cleaner from this PR; it will be submitted separately.
  • Replaced the hard-coded NPC/map lists with runtime loot.npc_infos map metadata resolved through StarSystemAPI.
  • Updated the PR title, description, manifest, README and tests to match the reduced scope.

Verification: the main sources compile with javac --release 11, and all 14 DailyTaskPlannerTest tests pass locally. SonarCloud Quality Gate also passed. The Java CI and workflow-level Sonar run are currently waiting for maintainer approval.

@dm94 Could you please re-review the latest commit?
@sourcery-ai review

@zrqq31
zrqq31 requested a review from dm94 September 1, 2026 15:09
@dm94

dm94 commented Sep 1, 2026

Copy link
Copy Markdown
Member

/sourcery-ai review

@dm94

dm94 commented Sep 1, 2026

Copy link
Copy Markdown
Member

Addressed the latest review in bba2eaa:

  • Removed the standalone DailyNpcPetLocator feature and integrated its small Enemy Locator supplier into DailyTaskAPI.
  • Removed RAM Cleaner from this PR; it will be submitted separately.
  • Replaced the hard-coded NPC/map lists with runtime loot.npc_infos map metadata resolved through StarSystemAPI.
  • Updated the PR title, description, manifest, README and tests to match the reduced scope.

Verification: the main sources compile with javac --release 11, and all 14 DailyTaskPlannerTest tests pass locally. SonarCloud Quality Gate also passed. The Java CI and workflow-level Sonar run are currently waiting for maintainer approval.

@dm94 Could you please re-review the latest commit? @sourcery-ai review

I’ll ask again: have you tried this feature? Could you show a video or something similar of how it works?

@zrqq31

zrqq31 commented Sep 1, 2026

Copy link
Copy Markdown
Author

Hi @dm94, I’m developing this feature with assistance from ChatGPT. I previously tested an earlier local revision, but I can’t test the current PR revision because DarkBot rejects the unsigned JAR. The contribution guide mentions that a test build can be provided for pull requests. Could you please provide a signed test build for the current commit, or let me know the supported testing procedure? Once I can load it, I’ll test the complete workflow manually, record a video demonstrating it, and fix any runtime issues before requesting final approval.

@dm94

dm94 commented Sep 1, 2026

Copy link
Copy Markdown
Member

Hi @dm94, I’m developing this feature with assistance from ChatGPT. I previously tested an earlier local revision, but I can’t test the current PR revision because DarkBot rejects the unsigned JAR. The contribution guide mentions that a test build can be provided for pull requests. Could you please provide a signed test build for the current commit, or let me know the supported testing procedure? Once I can load it, I’ll test the complete workflow manually, record a video demonstrating it, and fix any runtime issues before requesting final approval.

You need to run Darkbot from the IDE with signature checks disabled

@sonarqubecloud

sonarqubecloud Bot commented Sep 1, 2026

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants