Distributed pathfinding & misc. file improvements#4
Conversation
|
Note Reviews pausedUse the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds a NavigationManager subsystem for loading navigation linkage JSON, fetching remote updates, computing A*-style routes to training areas, and emitting dynamic .rbs walkback scripts; integrates generation into walkback checks, adds a UI “Update NavLink” button, and updates build/CI/editor configs plus many localization files. Changes
Sequence DiagramsequenceDiagram
participant LoopBundle as LoopBundle
participant NavMgr as NavigationManager
participant Linkage as LinkageData
participant RBSGen as RBSGenerator
participant ScriptMgr as ScriptManager
LoopBundle->>NavMgr: LoadLinkageData()
NavMgr->>Linkage: Read/Deserialize navigation_linkage.json (local)
alt remote update requested
NavMgr->>Linkage: Fetch remote JSON -> atomic replace
end
LoopBundle->>NavMgr: CalculatePathToTrainingArea()
Note over NavMgr: Map positions to semantic nodes\nBuild adjacency graph (add reverse walk edges)\nRun A*-like search (region-aware heuristic)
NavMgr-->>LoopBundle: Ordered NodePathSteps (cached)
LoopBundle->>RBSGen: GenerateRBSFile(cached path)
RBSGen-->>LoopBundle: Timestamped .rbs file path
LoopBundle->>ScriptMgr: Load & run .rbs script
ScriptMgr-->>LoopBundle: Script executed / running
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Poem
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (1)
Botbases/RSBot.Training/Bot/NavigationManager.cs (1)
30-49: Use the built-inPriorityQueuehere.The project targets
net8.0-windows, soSystem.Collections.Generic.PriorityQueueis already available. This implementation re-sorts the entire list on everyEnqueue, which makes A* slower on large maps for no real benefit.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 30 - 49, Replace the custom inner PriorityQueue<TElement,TPriority> in NavigationManager.cs with the BCL System.Collections.Generic.PriorityQueue<TElement,TPriority>: remove the private class and its backing List and Sort-based Enqueue/Dequeue, add a using for System.Collections.Generic if missing, instantiate a PriorityQueue where the custom type was used, and update uses of Count, Enqueue(element, priority) and Dequeue() to call the built-in Count property, Enqueue, and Dequeue methods (preserving the same generic element/priority types) so A* uses the efficient heap-backed implementation.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In @.vscode/tasks.json:
- Around line 5-17: The Build task uses the "Build" label and runs powershell
with "${workspaceFolder}/scripts/build.ps1" but the script redirects full output
to build.log and only echoes the last 100 lines, so the problemMatcher
"$msCompile" cannot see most compiler errors; either modify scripts/build.ps1 to
stream full stdout/stderr to the task (e.g., mirror output to both console and
build.log / implement a tee-style write) so VS Code receives the complete
compiler output, or remove/disable the "$msCompile" problemMatcher in the task
and document that users must inspect build.log; update the "Build" task args or
the script accordingly to ensure full output is emitted to the task runner for
parsing.
In `@Botbases/RSBot.Training/Bot/NavigationManager.cs`:
- Around line 18-20: The NavigationManager class has shared mutable state
(_linkage, _activePath and related metadata) accessed from multiple threads; add
thread synchronization by introducing a private static readonly object (e.g.,
_sync) and wrap all reads and writes to _linkage, _activePath and the metadata
fields inside lock(_sync) blocks (including in FetchRemoteLinkageData(), any
pathfinding/generate script methods, and public accessors) to prevent races and
NullReferenceExceptions; ensure any public methods that return these objects
either copy/clone the data while under lock or return read-only snapshots to
avoid exposing internal state without synchronization.
- Around line 73-90: LoadLinkageData currently only checks _linkage and
_linkage.Nodes but later accesses _linkage.Edges, causing crashes for payloads
missing edges; update LoadLinkageData to also validate _linkage.Edges (ensure
it's not null) before persisting metadata or calling Log.Notify, and if null log
an error (similar to the Nodes check) and return false so the malformed payload
fails cleanly; also guard any later uses of _linkage.Edges.Count or
_linkage.Edges.Values in this method (and in LogLinkageMetadata if it assumes
Edges exist) to avoid dereferencing a null collection.
- Around line 134-142: The current flow writes the downloaded JSON to
LinkagePath before validating it, risking loss of the last-good file; change the
flow in the method that updates linkage data so you first parse/validate the
downloaded json (e.g., attempt to deserialize into the expected model or use
JsonDocument.Parse) into a temporary variable, only on successful validation
write the json to LinkagePath, then set _linkage = null and return
LoadLinkageData(); if parsing/validation fails, log the error and do not
overwrite the existing file.
---
Nitpick comments:
In `@Botbases/RSBot.Training/Bot/NavigationManager.cs`:
- Around line 30-49: Replace the custom inner PriorityQueue<TElement,TPriority>
in NavigationManager.cs with the BCL
System.Collections.Generic.PriorityQueue<TElement,TPriority>: remove the private
class and its backing List and Sort-based Enqueue/Dequeue, add a using for
System.Collections.Generic if missing, instantiate a PriorityQueue where the
custom type was used, and update uses of Count, Enqueue(element, priority) and
Dequeue() to call the built-in Count property, Enqueue, and Dequeue methods
(preserving the same generic element/priority types) so A* uses the efficient
heap-backed implementation.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 27c9d36a-3799-4bc9-87ed-09aebfa132e0
📒 Files selected for processing (7)
.gitignore.vscode/tasks.jsonBotbases/RSBot.Training/Bot/NavigationManager.csBotbases/RSBot.Training/Bundle/Loop/LoopBundle.csBotbases/RSBot.Training/Views/Main.csLibrary/RSBot.Core/Objects/NavigationLinkage.csscripts/build.ps1
💤 Files with no reviewable changes (1)
- .gitignore
| internal static class NavigationManager | ||
| { | ||
| private const string LinkageUrl = | ||
| "https://raw.githubusercontent.com/Egezenn/Silkroad-NavLink/refs/heads/main/navigation_linkage.json"; |
There was a problem hiding this comment.
It is necessary to include the latest version of navigation_linkage.json in the release build so that users without access to GitHub can use this feature. It would be best to download the latest version automatically when the process starts, so that users don’t have to remember to click a button. Also, move the Egezenn repository to the organization so that we are not dependent on external sources.
| Text = "Update NavLink", | ||
| Size = new System.Drawing.Size(110, 23), | ||
| Location = new System.Drawing.Point(232, 27), | ||
| Color = System.Drawing.Color.Transparent, | ||
| Radius = 6, | ||
| ShadowDepth = 4F |
There was a problem hiding this comment.
Just did that via text, didn't go into VS preview cuz didn't have time / UI is going to get a refactor anyway.
|
|
||
| # Visual Studio 2015/2017 cache/options directory | ||
| .vs/ | ||
| .vscode/ |
There was a problem hiding this comment.
No need to add this folder to the repository
There was a problem hiding this comment.
What is the purpose of this file? Local environment settings should not be included in the repository.
There was a problem hiding this comment.
It allows building via Ctrl+Shift+B just like in Visual Studio. Allows to just use a simple task runner interface where you don't need to remember commands etc. Works on any vscode fork.
Example:

https://github.com/Egezenn/dota2-minify/tree/main/.vscode <- Also can configure LSPs and formatters recommend extensions debugger configs aswell. It lowers the barrier for entry significantly via being editor agnostic.
https://github.com/Egezenn/dota2-minify/blob/main/.vscode/tasks.json
This folder is nothing like .vs where Visual Studio dumps its index onto.
- Also run formatter check on PRs
There was a problem hiding this comment.
Actionable comments posted: 1
♻️ Duplicate comments (3)
Botbases/RSBot.Training/Bot/NavigationManager.cs (3)
138-142:⚠️ Potential issue | 🟠 MajorDon't overwrite the last good linkage with unvalidated content.
This still persists whatever GitHub returns before checking that it parses and matches the expected schema. One HTML error page or truncated download replaces the working cache and breaks every later path calculation until the file is repaired.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 138 - 142, The current logic writes GitHub's response straight to LinkagePath before validating, risking corrupting the cached file; change the flow in the method that writes the download (remove the direct File.WriteAllText(LinkagePath, json) step) to first parse/validate the JSON against the expected schema (use the same parsing/validation used by LoadLinkageData or a temporary parse routine), and only after successful parse/validation atomically replace the existing file (e.g., write to a temp file then move/replace LinkagePath) and then clear _linkage and call LoadLinkageData(); ensure any parse/validation failures do not touch the original LinkagePath.
73-89:⚠️ Potential issue | 🟠 MajorValidate the payload before caching it.
Deserializeis assigned straight into_linkage, and onlyNodesis checked. A payload with missingedgesstill blows up at Line 89, and any failed validation leaves_linkagenon-null so the next call returnstrueat Line 57 with an invalid cache.💾 Minimal fix
- _linkage = JsonSerializer.Deserialize<NavigationLinkage>(json, options); - - if (_linkage == null || _linkage.Nodes == null) + var linkage = JsonSerializer.Deserialize<NavigationLinkage>(json, options); + + if (linkage?.Nodes == null || linkage.Edges == null) { Log.Error("Failed to parse navigation linkage data."); return false; } + + _linkage = linkage; // Persist metadata - _linkageVersion = _linkage.Version; - _linkageDate = _linkage.Date; - _linkageCopyright = _linkage.Copyright; - _linkageLicense = _linkage.License; - _linkageMaintainer = _linkage.Maintainer; - _linkageContributors = _linkage.Contributors; + _linkageVersion = linkage.Version; + _linkageDate = linkage.Date; + _linkageCopyright = linkage.Copyright; + _linkageLicense = linkage.License; + _linkageMaintainer = linkage.Maintainer; + _linkageContributors = linkage.Contributors; - Log.Notify($"Loaded {_linkage.Nodes.Count} nodes and {_linkage.Edges.Count} edges."); + Log.Notify($"Loaded {linkage.Nodes.Count} nodes and {linkage.Edges.Count} edges.");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 73 - 89, Deserialize currently writes directly into _linkage and only checks Nodes, which can leave _linkage populated with invalid data (missing Edges) and cause later calls to treat the cache as valid; instead, deserialize into a local variable (e.g., var linkage = JsonSerializer.Deserialize<NavigationLinkage>(...)) and validate both linkage.Nodes and linkage.Edges (and null-check linkage itself) before assigning to the field _linkage, only then persist metadata (_linkageVersion, _linkageDate, _linkageCopyright, _linkageLicense, _linkageMaintainer, _linkageContributors) and log the loaded counts; on validation failure return false (and ensure _linkage remains null or unchanged).
19-28:⚠️ Potential issue | 🔴 CriticalSynchronize the shared navigation state.
_linkage,_activePath, and the metadata fields are still mutated from multiple public methods without any locking. The refresh path can race with path calculation or RBS generation and leave another thread readingnullor partially updated state.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 19 - 28, The shared navigation state (_linkage, _activePath and metadata fields like _linkageVersion/_linkageDate/_linkageCopyright/_linkageLicense/_linkageMaintainer/_linkageContributors) is accessed and mutated from multiple public methods without synchronization; add a dedicated static sync object (e.g., private static readonly object _linkageLock or a ReaderWriterLockSlim) and wrap all reads and writes to those fields in that lock so updates (in methods such as RefreshPath, CalculatePath, GenerateRBS, ClearLinkage, and any getters) are atomic; when returning _activePath return a defensive copy or a ReadOnlyCollection to avoid exposing internal mutable state, and ensure any code that swaps _linkage or clears metadata does so inside the same lock to prevent race conditions.
🧹 Nitpick comments (2)
.github/workflows/pull_request.yml (1)
30-33: Pin the CSharpier version to ensure deterministic CI formatting checks.Line 32 installs
csharpierwithout a version constraint, making CI non-deterministic. Upstream formatter updates can fail unrelated PRs. No.config/dotnet-tools.jsonmanifest exists to override this.Suggested fix
- name: Run CSharpier + env: + CSHARPIER_VERSION: 0.28.7 # replace with your preferred stable version run: | - dotnet tool install -g csharpier + dotnet tool install -g csharpier --version $env:CSHARPIER_VERSION dotnet csharpier . --check🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In @.github/workflows/pull_request.yml around lines 30 - 33, The workflow step "Run CSharpier" currently installs csharpier without a version (the line "dotnet tool install -g csharpier") making CI non-deterministic; update this step to pin a specific CSharpier version (e.g., add "--version <x.y.z>" to the "dotnet tool install -g csharpier" invocation or ensure a dotnet-tools.json manifest is committed and referenced) so that the subsequent "dotnet csharpier . --check" runs a fixed formatter version.Botbases/RSBot.Training/Bot/NavigationManager.cs (1)
30-49: UseSystem.Collections.Generic.PriorityQueueinstead of the custom implementation.The project targets
net8.0-windows, whereSystem.Collections.Generic.PriorityQueue<TElement, TPriority>is available in the base class library. The current custom implementation sorts the entire list on everyEnqueuecall, adding unnecessary O(n log n) overhead in the A* pathfinding hot path. Replace with the framework's implementation, which uses a more efficient heap-based approach.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 30 - 49, Replace the custom PriorityQueue<TElement, TPriority> class with the built-in System.Collections.Generic.PriorityQueue<TElement, TPriority>; update any usages of the custom class (constructors, Count property, Enqueue, Dequeue) to use the framework type and its API (Enqueue(element, priority), TryDequeue/Dequeue, and Count) so the A* hot path uses the heap-based implementation instead of sorting the list on every Enqueue; remove the custom class definition from NavigationManager.cs and add a using for System.Collections.Generic if missing.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@scripts/build.ps1`:
- Around line 42-50: The script currently downloads navigation linkage directly
into $linkagePath without validating it; change the logic to treat the download
as best-effort by downloading to a temporary file (e.g., "$linkagePath.tmp")
inside a try/catch around Invoke-WebRequest, then attempt to parse the temp file
with ConvertFrom-Json to validate JSON; only replace/move the temp file to
$linkagePath if parsing succeeds, otherwise log a warning (Write-Warning) and
keep the existing file; ensure errors from Invoke-WebRequest are caught and
handled so a transient network failure does not overwrite or corrupt
.\Build\Data\navigation_linkage.json.
---
Duplicate comments:
In `@Botbases/RSBot.Training/Bot/NavigationManager.cs`:
- Around line 138-142: The current logic writes GitHub's response straight to
LinkagePath before validating, risking corrupting the cached file; change the
flow in the method that writes the download (remove the direct
File.WriteAllText(LinkagePath, json) step) to first parse/validate the JSON
against the expected schema (use the same parsing/validation used by
LoadLinkageData or a temporary parse routine), and only after successful
parse/validation atomically replace the existing file (e.g., write to a temp
file then move/replace LinkagePath) and then clear _linkage and call
LoadLinkageData(); ensure any parse/validation failures do not touch the
original LinkagePath.
- Around line 73-89: Deserialize currently writes directly into _linkage and
only checks Nodes, which can leave _linkage populated with invalid data (missing
Edges) and cause later calls to treat the cache as valid; instead, deserialize
into a local variable (e.g., var linkage =
JsonSerializer.Deserialize<NavigationLinkage>(...)) and validate both
linkage.Nodes and linkage.Edges (and null-check linkage itself) before assigning
to the field _linkage, only then persist metadata (_linkageVersion,
_linkageDate, _linkageCopyright, _linkageLicense, _linkageMaintainer,
_linkageContributors) and log the loaded counts; on validation failure return
false (and ensure _linkage remains null or unchanged).
- Around line 19-28: The shared navigation state (_linkage, _activePath and
metadata fields like
_linkageVersion/_linkageDate/_linkageCopyright/_linkageLicense/_linkageMaintainer/_linkageContributors)
is accessed and mutated from multiple public methods without synchronization;
add a dedicated static sync object (e.g., private static readonly object
_linkageLock or a ReaderWriterLockSlim) and wrap all reads and writes to those
fields in that lock so updates (in methods such as RefreshPath, CalculatePath,
GenerateRBS, ClearLinkage, and any getters) are atomic; when returning
_activePath return a defensive copy or a ReadOnlyCollection to avoid exposing
internal mutable state, and ensure any code that swaps _linkage or clears
metadata does so inside the same lock to prevent race conditions.
---
Nitpick comments:
In @.github/workflows/pull_request.yml:
- Around line 30-33: The workflow step "Run CSharpier" currently installs
csharpier without a version (the line "dotnet tool install -g csharpier") making
CI non-deterministic; update this step to pin a specific CSharpier version
(e.g., add "--version <x.y.z>" to the "dotnet tool install -g csharpier"
invocation or ensure a dotnet-tools.json manifest is committed and referenced)
so that the subsequent "dotnet csharpier . --check" runs a fixed formatter
version.
In `@Botbases/RSBot.Training/Bot/NavigationManager.cs`:
- Around line 30-49: Replace the custom PriorityQueue<TElement, TPriority> class
with the built-in System.Collections.Generic.PriorityQueue<TElement, TPriority>;
update any usages of the custom class (constructors, Count property, Enqueue,
Dequeue) to use the framework type and its API (Enqueue(element, priority),
TryDequeue/Dequeue, and Count) so the A* hot path uses the heap-based
implementation instead of sorting the list on every Enqueue; remove the custom
class definition from NavigationManager.cs and add a using for
System.Collections.Generic if missing.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: c6d4eea5-ce12-42a1-8f7c-e2223fe1cb36
📒 Files selected for processing (3)
.github/workflows/pull_request.ymlBotbases/RSBot.Training/Bot/NavigationManager.csscripts/build.ps1
- Some were just literally copypasted and then never translated - Some are hardcoded and don't even have a base english lang file
- Locks - Safe downloads/memory
There was a problem hiding this comment.
Actionable comments posted: 4
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Dependencies/Languages/RSBot/de_DE.rsl (1)
47-53:⚠️ Potential issue | 🟡 MinorTranslate the remaining training prompt.
ConfigureTrainingAreaBeforeStartBotis still in English, so German users will hit a mixed-language prompt in the training flow. Please localize that string too.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot/de_DE.rsl` around lines 47 - 53, The string ConfigureTrainingAreaBeforeStartBot is still in English; replace its value with a German translation (e.g., "Bitte konfiguriere den Trainingsbereich, bevor du den Bot startest!") so the key ConfigureTrainingAreaBeforeStartBot is fully localized like the other entries in the file.
🟡 Minor comments (24)
Dependencies/Languages/RSBot.Alchemy/es_ES.rsl-17-21 (1)
17-21:⚠️ Potential issue | 🟡 MinorKeep the enhancement/item terminology consistent.
These labels mix “Realce” and “Artículo”, while other strings in this file use “Mejorar” and “Artículo”/“Objeto”-style wording. That inconsistency makes the UI feel uneven; I’d normalize the terminology here.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Alchemy/es_ES.rsl` around lines 17 - 21, The labels in the Alchemy Spanish resource are inconsistent: keys RSBot.Alchemy.Main.GroupBox.lblOptLevelText, RSBot.Alchemy.Main.GroupBox.lblItemSelection, RSBot.Alchemy.Main.GroupBox.lblDegree, RSBot.Alchemy.Main.GroupBox.lblDegreeText, and RSBot.Alchemy.Main.groupItem mix “Realce” with “Artículo”; update these values to use the same terminology used elsewhere in the file (e.g., replace “Realce” with “Mejorar” and standardize “Artículo”/“Objeto” according to the project's chosen term) so all five entries use the normalized wording and match other strings in the file.Dependencies/Languages/RSBot.Alchemy/es_ES.rsl-3-3 (1)
3-3:⚠️ Potential issue | 🟡 MinorTighten this translation for natural Spanish.
“Detente si 0 polvo de la suerte” reads awkwardly and may confuse users. Consider a clearer phrasing such as “Detente cuando el polvo de la suerte llegue a 0.”
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Alchemy/es_ES.rsl` at line 3, The translation for the key RSBot.Alchemy.Main.Panel.Panel.EnhanceSettingsView.checkStopLuckyPowder is awkward; replace the current string "Detente si 0 polvo de la suerte" with a clearer, natural Spanish phrase such as "Detente cuando el polvo de la suerte llegue a 0." to improve readability and user understanding.Dependencies/Languages/RSBot.Alchemy/ar_AR.rsl-10-21 (1)
10-21:⚠️ Potential issue | 🟡 MinorNormalize the Arabic terminology for the magic/item labels.
البلوزon the magic tab/radio labels reads unclear in Arabic, andغرضis not the usual UI term for an item selector. Please align these with a consistent glossary term such asخيارات سحريةandعنصر/صنفso the panel labels feel native.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Alchemy/ar_AR.rsl` around lines 10 - 21, Replace the non-native Arabic terms: change occurrences of "البلوز" used in RSBot.Alchemy.Main.Panel.Panel.radioMagicOptions and RSBot.Alchemy.Main.GroupBox.TabControl.tabMagicOptions to a normalized label like "خيارات سحرية", and replace the item selector term "غرض" used in RSBot.Alchemy.Main.GroupBox.lblItemSelection and RSBot.Alchemy.Main.groupItem with the preferred UI term "عنصر" (or "صنف" if product uses that glossary). Update the corresponding keys (radioMagicOptions, tabMagicOptions, lblItemSelection, groupItem) so all panel/radio/tab/group labels are consistent with the chosen glossary.Dependencies/Languages/RSBot.Alchemy/ar_AR.rsl-3-8 (1)
3-8:⚠️ Potential issue | 🟡 MinorTighten the
checkUseLuckyStoneswording.Most of these translations read fine, but
استخدم الأحجار الكريمة لجلب الحظis a bit too literal for UI copy. A shorter, more idiomatic term likeأحجار الحظwould read cleaner.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Alchemy/ar_AR.rsl` around lines 3 - 8, Update the Arabic string for RSBot.Alchemy.Main.Panel.Panel.EnhanceSettingsView.checkUseLuckyStones to a shorter, more idiomatic UI term (replace "استخدم الأحجار الكريمة لجلب الحظ" with "أحجار الحظ") so the label reads cleaner and matches the style of the other keys in the same block.Dependencies/Languages/RSBot.Items/ar_AR.rsl-64-64 (1)
64-64:⚠️ Potential issue | 🟡 MinorLocalize the remaining English weapon labels.
checkBowandcheckAxeare still exposed in English, so the Arabic Items tab will render mixed-language filters.Suggested translation updates
-RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBow="Bow" +RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBow="قوس" ... -RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkAxe="Axe" +RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkAxe="فأس"Also applies to: 73-73
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Items/ar_AR.rsl` at line 64, The Arabic localization still contains English labels for the weapon filters: update the values for the keys RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBow and RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkAxe to their Arabic translations so the Items tab displays consistently; locate those keys (and the duplicate occurrence noted further down) in the ar_AR.rsl resource entries and replace "Bow" and "Axe" with the appropriate Arabic strings, preserving the exact key names and file encoding.Dependencies/Languages/RSBot.Items/de_DE.rsl-24-29 (1)
24-29:⚠️ Potential issue | 🟡 MinorUse the in-game terms rather than literal translations.
A few of the new German labels read like generic phrasing instead of the UI terms the filter panel expects, especially for quest items, rare items, light armor, staff, and the “everything” toggle.
Suggested replacements
- RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkQuest="Suche" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkQuest="Quest" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems="Drucken (Sox)" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems="Seltene Gegenstände (Sox)" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight="Licht" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight="Leicht" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Personal" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Stab" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkEverything="Packen Sie alles ein" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkEverything="Alles aufheben"Also applies to: 42-67
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Items/de_DE.rsl` around lines 24 - 29, Replace the literal German phrasing with the in-game UI terminology for the item filter labels: update the resource keys RSBot.Items.Main.TabControl.TabPage.GroupBox.checkQuestItems, .checkEverything, .checkAllEquips, .checkPickupBlue (and similar keys in lines 42-67) to use the established German game terms for "Questgegenstände", the in-game toggle text for "Alles aufheben"/"Alles", the term for "Rarität"/"Seltene Gegenstände" or the exact in-game word for rare items, and the correct wording for light armor/staff as used elsewhere in the UI; keep the key names the same but change the string values to match the canonical in-game German labels used across the localization files so the filter panel recognizes them.Dependencies/Languages/RSBot.Items/tr_TR.rsl-66-68 (1)
66-68:⚠️ Potential issue | 🟡 MinorCorrect the staff weapon label.
checkStaff="Kadro"uses the wrong noun for a weapon filter. That will read as “staff/cadre” rather than the actual weapon type.Suggested replacement
- RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Kadro" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Asa"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Items/tr_TR.rsl` around lines 66 - 68, The localization entry for the staff weapon filter is incorrect: update the value of RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff from "Kadro" to the correct Turkish noun for staff (e.g., "Asa") so the weapon filter reads properly; modify the string value in the RSBot.Items/tr_TR.rsl file where checkStaff is defined.Dependencies/Languages/RSBot.Items/es_ES.rsl-40-50 (1)
40-50:⚠️ Potential issue | 🟡 MinorFix the mistranslated filter labels before merging.
Several updated strings are the wrong Spanish term for the underlying game concept, which will make the item filters misleading in the UI.
Suggested replacements
- RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkChinese="Porcelana" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkChinese="China" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems="Imprimir (Sox)" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems="Artículos raros (Sox)" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight="Luz" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight="Ligero" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Personal" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Bastón" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkShield="Blindaje" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkShield="Escudo"Also applies to: 68-75
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Items/es_ES.rsl` around lines 40 - 50, Several filter labels are mistranslated; update the strings for the keys in this diff so the UI shows correct Spanish terms: change RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkChinese from "Porcelana" to "Chino" (or the agreed game-term for Chinese-origin items), RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkQuest from "Búsqueda" to "Misión" (or "De misión"), RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems from "Imprimir (Sox)" to a clear Spanish phrase like "Imprimible (SOX)" or the agreed SOX wording, and RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight from "Luz" to "Ligero" (if it denotes light-weight items); verify and correct the same keys in the other block mentioned (lines 68-75) so both sections use the consistent, game-accurate Spanish terms.Dependencies/Languages/RSBot.Items/vn_VN.rsl-45-67 (1)
45-67:⚠️ Potential issue | 🟡 MinorTighten the Vietnamese terminology for the filter labels.
A few of these strings are literal or incorrect translations and will look odd in the item/category filters, especially the rare-items, grade, light armor, head, and staff labels.
Suggested replacements
- RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems="In (Sox)" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems="Vật phẩm hiếm (Sox)" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.label3="Bằng cấp" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.label3="Cấp" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight="Ánh sáng" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight="Nhẹ" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkHead="Cái đầu" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkHead="Đầu" - RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Nhân viên" + RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff="Trượng"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Items/vn_VN.rsl` around lines 45 - 67, The Vietnamese labels contain awkward or literal translations; update the strings for the listed keys to natural Vietnamese (replace label3 "Bằng cấp" -> "Cấp độ" or "Hạng", checkBoxRareItems "In (Sox)" -> "Hiếm (SOX)", checkLight "Ánh sáng" -> "Giáp nhẹ" or "Nhẹ", checkHead "Cái đầu" -> "Đầu" or "Mũ", checkStaff "Nhân viên" -> "Gậy/Trượng", checkBow "Bow" -> "Cung", and consider improving checkClothes "Quần áo" -> "Trang phục" for consistency). Edit the values for the unique resource keys (e.g., RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.label3, checkBoxRareItems, checkLight, checkHead, checkStaff, checkBow, checkClothes) to these suggested replacements so the filter UI reads naturally in Vietnamese.Dependencies/Languages/RSBot.Protection/ar_AR.rsl-21-21 (1)
21-21:⚠️ Potential issue | 🟡 MinorRephrase the attack-pet checkbox text.
The Arabic translation
نمو الاستدعاء التلقائي والحيوانات الأليفة الأخرىhas awkward word order and reads as a noun phrase rather than an action. Unlike the English ("Auto summon growth & fellow pet") and other languages (German: "Automatisch angreifendes Haustier beschwören", Spanish: "Invocar Mascota de Attack / Fellow"), the Arabic phrasing fails to convey that this checkbox controls an action the user can enable or disable.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Protection/ar_AR.rsl` at line 21, Replace the awkward noun-phrase translation for RSBot.Protection.Main.GroupBox.checkAutoSummonAttackPet with an actionable Arabic phrasing that clearly indicates a toggle for auto-summoning the attack and fellow pet; e.g., change to something like "تفعيل الاستدعاء التلقائي للحيوان الهجومي والحيوان المرافق" or "استدعِ تلقائياً الحيوان الهجومي والحيوان المرافق" to match the original intent and match wording used in other locales.Dependencies/Languages/RSBot.Protection/es_ES.rsl-50-50 (1)
50-50:⚠️ Potential issue | 🟡 MinorImprove Spanish terminology for the run button.
The Spanish translation "Correr" (which literally means "to run" physically) is ambiguous for a UI button action. Use "Ejecutar" (a standard Spanish term for executing commands) or "Iniciar" (for starting actions) to match the button's actual function more clearly.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Protection/es_ES.rsl` at line 50, The translation for RSBot.Protection.Main.GroupBox.buttonRun uses "Correr", which is ambiguous; update the string value to a more appropriate Spanish UI term such as "Ejecutar" (or "Iniciar" if the action is a start) by replacing "Correr" with the chosen term so the button label reads e.g. RSBot.Protection.Main.GroupBox.buttonRun="Ejecutar".Dependencies/Languages/RSBot.Protection/de_DE.rsl-44-50 (1)
44-50:⚠️ Potential issue | 🟡 MinorResolve the duplicate key entry and adjust the button translation.
The key
RSBot.Protection.Main.GroupBox.checkUseHPPotionsPlayerduplicates an earlier entry underRSBot.Protection.Main.groupHPMP.checkUseHPPotionsPlayer. Since the UI control is bound togroupHPMP, ensure only one localization key exists for this control. Additionally,Laufen(literal motion) is inappropriate for this action button; useStartenorAusführeninstead to match the button's function of launching stat point increases.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Protection/de_DE.rsl` around lines 44 - 50, Remove the duplicate localization key by deleting RSBot.Protection.Main.GroupBox.checkUseHPPotionsPlayer and ensure the UI uses the existing RSBot.Protection.Main.groupHPMP.checkUseHPPotionsPlayer entry (keep only the groupHPMP key); also update the button label RSBot.Protection.Main.GroupBox.buttonRun value from "Laufen" to a more appropriate action word such as "Starten" or "Ausführen" to reflect the launch/start action.Dependencies/Languages/RSBot.Protection/ar_AR.rsl-45-45 (1)
45-45:⚠️ Potential issue | 🟡 MinorChange button label from present tense to action form.
يجري(present tense: "is running") is inconsistent with button label conventions across the codebase. Useتشغيل(starting/running) orابدأ(start) to match the action-oriented style of other button labels likeاستخدام(use).🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Protection/ar_AR.rsl` at line 45, Update the Arabic localization key RSBot.Protection.Main.GroupBox.buttonRun to an action-oriented label instead of the present-tense "يجري"; replace its value with "تشغيل" or "ابدأ" to match other button labels (e.g., "استخدام") so the UI uses consistent imperative/action form for buttons.Dependencies/Languages/RSBot.General/tr_TR.rsl-92-92 (1)
92-92:⚠️ Potential issue | 🟡 MinorUse the correct Turkish term for “clientless”.
Müşterisizmeans “customerless,” which is not the intended UI label.💬 Suggested fix
-GoClientlessMsgBoxTitle="Müşterisiz" +GoClientlessMsgBoxTitle="İstemcisiz"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.General/tr_TR.rsl` at line 92, The translation key GoClientlessMsgBoxTitle currently uses the incorrect term "Müşterisiz"; update its value to the correct Turkish computing term "İstemcisiz" (or "İstemcisiz" without accent if your locale prefers) so the UI label means "clientless" rather than "customerless"—locate GoClientlessMsgBoxTitle in the RSBot.General tr_TR.rsl resource and replace the string value accordingly.Dependencies/Languages/RSBot.General/es_ES.rsl-9-9 (1)
9-9:⚠️ Potential issue | 🟡 MinorUse a real Spanish action label here.
Opta por la prescindibleis not a meaningful button label for this action.💬 Suggested fix
-RSBot.General.Main.GroupBox.btnGoClientless="Opta por la prescindible" +RSBot.General.Main.GroupBox.btnGoClientless="Cambiar a Clientless"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.General/es_ES.rsl` at line 9, The button label RSBot.General.Main.GroupBox.btnGoClientless contains a non-meaningful Spanish string; replace "Opta por la prescindible" with a clear, natural Spanish action label such as "Iniciar sin cliente" or "Usar modo sin cliente" by updating the value of RSBot.General.Main.GroupBox.btnGoClientless to the chosen phrase so the UI shows a correct, user-friendly action name.Dependencies/Languages/RSBot.General/vn_VN.rsl-92-92 (1)
92-92:⚠️ Potential issue | 🟡 MinorFix the Vietnamese title translation.
Không có khách hàngmeans “without customers,” which is not the intended UI concept.💬 Suggested fix
-GoClientlessMsgBoxTitle="Không có khách hàng" +GoClientlessMsgBoxTitle="Clientless"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.General/vn_VN.rsl` at line 92, The Vietnamese UI title string GoClientlessMsgBoxTitle currently reads "Không có khách hàng" (means “without customers”); change its value to a correct translation for the UI concept "No client" (for example replace with "Không có client" or "Không có kết nối client") so the label reflects absence of a client/connection rather than customers.Dependencies/Languages/RSBot.Skills/vn_VN.rsl-35-36 (1)
35-36:⚠️ Potential issue | 🟡 MinorReplace placeholder-like remove button labels.
Using
"r"for both remove buttons is hard to read in UI and looks accidental.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Skills/vn_VN.rsl` around lines 35 - 36, The two entries RSBot.Skills.Main.TabControl.TabPage.GroupBox.btnRemoveAttackSkill and RSBot.Skills.Main.TabControl.TabPage.GroupBox.btnRemoveBuffSkill currently use the placeholder value "r"; update both to meaningful Vietnamese button labels (e.g., "Xóa" or "Loại bỏ") so the UI is readable and not accidental, and ensure the text matches the app's localization style and casing.Dependencies/Languages/RSBot.Party/vn_VN.rsl-52-55 (1)
52-55:⚠️ Potential issue | 🟡 MinorLocalize the command-help block to Vietnamese.
This section is still English, so the UI becomes mixed-language in this locale.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Party/vn_VN.rsl` around lines 52 - 55, Replace the English help text in the resource key RSBot.Party.Main.TabControl.TabPage.GroupBox.labelCommandsInfo with a Vietnamese localization; update the value so the UI reads fully in Vietnamese (e.g., a suggested translation: "Các lệnh chỉ dùng trong cửa sổ chat trong game!\n\ntraceme: Gửi yêu cầu theo dõi đến người chơi\nsitdown: Gửi yêu cầu ngồi xuống đến người chơi").Dependencies/Languages/RSBot.Party/de_DE.rsl-52-55 (1)
52-55:⚠️ Potential issue | 🟡 MinorTranslate remaining English strings in German locale.
These values are still English, resulting in inconsistent language presentation for de_DE users.
Also applies to: 104-104
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Party/de_DE.rsl` around lines 52 - 55, The German locale still contains English text for RSBot.Party.Main.TabControl.TabPage.GroupBox.labelCommandsInfo (and the similar untranslated string referenced at the same file further down), so replace the English value with a proper German translation; locate the resource key RSBot.Party.Main.TabControl.TabPage.GroupBox.labelCommandsInfo and update its value to a German string that conveys the same meaning (e.g., explain that these commands are only for the in-game chat and translate the examples "traceme" and "sitdown" to German descriptions), then search the file for any other occurrences of the same English phrases (the other untranslated entry noted in the comment) and translate them consistently as well.Dependencies/Languages/RSBot.Party/tr_TR.rsl-62-63 (1)
62-63:⚠️ Potential issue | 🟡 MinorFix min/max label consistency in level restriction group.
label1as"Dakika"does not match the level-range context and reads as a unit mismatch.💡 Suggested correction
RSBot.Party.AutoFormParty.GroupBox.label2="Maks." -RSBot.Party.AutoFormParty.GroupBox.label1="Dakika" +RSBot.Party.AutoFormParty.GroupBox.label1="Min."🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Party/tr_TR.rsl` around lines 62 - 63, label1 is incorrectly set to a time unit ("Dakika") while label2 is "Maks." for level restrictions; update RSBot.Party.AutoFormParty.GroupBox.label1 to a matching min/level term (e.g., "Min." or "Seviye Min.") so both labels are consistent with the level-range context (refer to RSBot.Party.AutoFormParty.GroupBox.label1 and RSBot.Party.AutoFormParty.GroupBox.label2).Botbases/RSBot.Training/Bot/NavigationManager.cs-421-423 (1)
421-423:⚠️ Potential issue | 🟡 MinorTimestamp precision can overwrite dynamic scripts generated in the same second.
Using second-level precision for filenames risks collisions and silent overwrite.
💡 Suggested change
- var timestamp = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"); + var timestamp = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss-fff");🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 421 - 423, The current filename generation (variables timestamp, fileName, dynamicScriptsDir using ScriptManager.InitialDirectory) uses second-level precision and can collide; update the timestamp generation to use higher precision (e.g., DateTime.UtcNow with milliseconds or ticks) or append a short Guid (Guid.NewGuid()) to the fileName to guarantee uniqueness (e.g., include ".fff" or ticks or a GUID) while still writing to dynamicScriptsDir; keep using ScriptManager.InitialDirectory and ensure the created filename preserves the ".rbs" extension.Botbases/RSBot.Training/Bot/NavigationManager.cs-258-264 (1)
258-264:⚠️ Potential issue | 🟡 MinorRemove explicit
GC.Collect()after path calculation.While this operation is infrequent (only triggered during initialization when no walkback script exists), explicit garbage collection is generally discouraged. The .NET GC is designed to handle collection automatically, and the code already nulls
_linkageto signal cleanup. Forcing a collection can introduce unnecessary pauses.Suggested change
lock (_linkageLock) { _activePath = path; _linkage = null; // Clear linkage data once path is cached to save memory } - GC.Collect(); return true;🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Botbases/RSBot.Training/Bot/NavigationManager.cs` around lines 258 - 264, Remove the forced GC.Collect() call that follows setting _activePath and nulling _linkage in NavigationManager; the GC should run automatically and nulling _linkage already signals cleanup. Locate the block that locks on _linkageLock and assigns _activePath = path and _linkage = null (look for variables _activePath, _linkage, and _linkageLock) and delete the GC.Collect() invocation that comes immediately after it; ensure no other code depends on an immediate collection before merging.Dependencies/Languages/RSBot.Party/ar_AR.rsl-1-1 (1)
1-1:⚠️ Potential issue | 🟡 MinorUse a group/party term here.
حزبreads as a political party in Arabic, so the module title will be misleading in the game UI.مجموعةorفريقwould fit this screen better.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Party/ar_AR.rsl` at line 1, The DisplayName value "حزب" is misleading in Arabic; replace it with a game-appropriate group term such as "مجموعة" or "فريق" by updating the DisplayName attribute (DisplayName="حزب") to one of those alternatives so the UI shows a correct group/party label.Dependencies/Languages/RSBot.Skills/es_ES.rsl-44-44 (1)
44-44:⚠️ Potential issue | 🟡 MinorUse the buff term here, not “búfer.”
búferreads as a technical buffer, not the Skills buffs section. This should match the rest of the locale and usemejorasorbuffs.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@Dependencies/Languages/RSBot.Skills/es_ES.rsl` at line 44, The translation key RSBot.Skills.Main.TabControl.TabPage.groupBoxAdvancedBuff uses the incorrect term "búfer"; update its value to use the game-appropriate term (e.g., "mejoras" or "buffs") so it matches the rest of the locale — replace "Configuración avanzada de búfer" with "Configuración avanzada de mejoras" (or "Configuración avanzada de buffs") in the RSBot.Skills/es_ES.rsl resource.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@Dependencies/Languages/RSBot.Items/ar_AR.rsl`:
- Around line 35-36: The "InputDialogContent" value currently contains a literal
newline which breaks the line-based .rsl parser; replace the multiline string
with a single-line string using the escape sequence \n (e.g., set
InputDialogContent="يرجى إدخال الكمية التى يجب ان يشتريها البوت\n للعنصر
المحدد") so the value is parsed correctly, and also provide Arabic translations
for the keys checkBow and checkAxe (replace their English labels with the
appropriate Arabic text) so those entries are not left untranslated.
In `@Dependencies/Languages/RSBot.Party/ar_AR.rsl`:
- Around line 19-20: The translation for
RSBot.Party.Main.TabControl.TabPage.GroupBox.checkAutoExpAutoShare is incorrect
(it currently reads as “automatic sharing of expiration date”); update that
value to a correct Arabic phrase describing EXP (experience) sharing, for
example "مشاركة الخبرة تلقائيًا" or "مشاركة الخبرة (EXP) تلقائيًا", leaving
RSBot.Party.Main.TabControl.TabPage.GroupBox.checkAutoItemAutoShare untouched.
- Around line 45-47: The three Arabic captions are using off-domain words;
replace the values for RSBot.Party.Main.TabControl.tpAutoParty,
RSBot.Party.Main.TabControl.tpPartyMatching, and
RSBot.Party.Main.TabControl.tpPartyBuffing with consistent party/group
terminology used elsewhere (e.g., use "إدارة الفرقة" or "الفرقة التلقائية" for
auto party, "مطابقة الفرق" for party matching, and "تعزيز الفرقة" or "تدعيم
الفرقة" for party buffing) so they match the file's existing vocabulary and are
semantically correct.
- Around line 58-74: The Arabic translations in the AutoFormParty block are
incorrect; update the specific keys with proper game-localized terminology:
change RSBot.Party.AutoFormParty.GroupBox.cb_AutoReform from "إصلاح السيارات" to
"إصلاح تلقائي", change RSBot.Party.AutoFormParty.GroupBox.rbtn_Trade from "نقابة
العمال" to "نقابة التجار" (or "تجارة" if shorter), change
RSBot.Party.AutoFormParty.groupBox3 from "نوع الحفلة" to "نوع المجموعة", and
change RSBot.Party.AutoFormParty.gbObjective from "هدف الحزب" to "هدف المجموعة";
review nearby labels (e.g., label1/label2) for context and adjust wording to
natural Arabic where needed.
---
Outside diff comments:
In `@Dependencies/Languages/RSBot/de_DE.rsl`:
- Around line 47-53: The string ConfigureTrainingAreaBeforeStartBot is still in
English; replace its value with a German translation (e.g., "Bitte konfiguriere
den Trainingsbereich, bevor du den Bot startest!") so the key
ConfigureTrainingAreaBeforeStartBot is fully localized like the other entries in
the file.
---
Minor comments:
In `@Botbases/RSBot.Training/Bot/NavigationManager.cs`:
- Around line 421-423: The current filename generation (variables timestamp,
fileName, dynamicScriptsDir using ScriptManager.InitialDirectory) uses
second-level precision and can collide; update the timestamp generation to use
higher precision (e.g., DateTime.UtcNow with milliseconds or ticks) or append a
short Guid (Guid.NewGuid()) to the fileName to guarantee uniqueness (e.g.,
include ".fff" or ticks or a GUID) while still writing to dynamicScriptsDir;
keep using ScriptManager.InitialDirectory and ensure the created filename
preserves the ".rbs" extension.
- Around line 258-264: Remove the forced GC.Collect() call that follows setting
_activePath and nulling _linkage in NavigationManager; the GC should run
automatically and nulling _linkage already signals cleanup. Locate the block
that locks on _linkageLock and assigns _activePath = path and _linkage = null
(look for variables _activePath, _linkage, and _linkageLock) and delete the
GC.Collect() invocation that comes immediately after it; ensure no other code
depends on an immediate collection before merging.
In `@Dependencies/Languages/RSBot.Alchemy/ar_AR.rsl`:
- Around line 10-21: Replace the non-native Arabic terms: change occurrences of
"البلوز" used in RSBot.Alchemy.Main.Panel.Panel.radioMagicOptions and
RSBot.Alchemy.Main.GroupBox.TabControl.tabMagicOptions to a normalized label
like "خيارات سحرية", and replace the item selector term "غرض" used in
RSBot.Alchemy.Main.GroupBox.lblItemSelection and RSBot.Alchemy.Main.groupItem
with the preferred UI term "عنصر" (or "صنف" if product uses that glossary).
Update the corresponding keys (radioMagicOptions, tabMagicOptions,
lblItemSelection, groupItem) so all panel/radio/tab/group labels are consistent
with the chosen glossary.
- Around line 3-8: Update the Arabic string for
RSBot.Alchemy.Main.Panel.Panel.EnhanceSettingsView.checkUseLuckyStones to a
shorter, more idiomatic UI term (replace "استخدم الأحجار الكريمة لجلب الحظ" with
"أحجار الحظ") so the label reads cleaner and matches the style of the other keys
in the same block.
In `@Dependencies/Languages/RSBot.Alchemy/es_ES.rsl`:
- Around line 17-21: The labels in the Alchemy Spanish resource are
inconsistent: keys RSBot.Alchemy.Main.GroupBox.lblOptLevelText,
RSBot.Alchemy.Main.GroupBox.lblItemSelection,
RSBot.Alchemy.Main.GroupBox.lblDegree,
RSBot.Alchemy.Main.GroupBox.lblDegreeText, and RSBot.Alchemy.Main.groupItem mix
“Realce” with “Artículo”; update these values to use the same terminology used
elsewhere in the file (e.g., replace “Realce” with “Mejorar” and standardize
“Artículo”/“Objeto” according to the project's chosen term) so all five entries
use the normalized wording and match other strings in the file.
- Line 3: The translation for the key
RSBot.Alchemy.Main.Panel.Panel.EnhanceSettingsView.checkStopLuckyPowder is
awkward; replace the current string "Detente si 0 polvo de la suerte" with a
clearer, natural Spanish phrase such as "Detente cuando el polvo de la suerte
llegue a 0." to improve readability and user understanding.
In `@Dependencies/Languages/RSBot.General/es_ES.rsl`:
- Line 9: The button label RSBot.General.Main.GroupBox.btnGoClientless contains
a non-meaningful Spanish string; replace "Opta por la prescindible" with a
clear, natural Spanish action label such as "Iniciar sin cliente" or "Usar modo
sin cliente" by updating the value of
RSBot.General.Main.GroupBox.btnGoClientless to the chosen phrase so the UI shows
a correct, user-friendly action name.
In `@Dependencies/Languages/RSBot.General/tr_TR.rsl`:
- Line 92: The translation key GoClientlessMsgBoxTitle currently uses the
incorrect term "Müşterisiz"; update its value to the correct Turkish computing
term "İstemcisiz" (or "İstemcisiz" without accent if your locale prefers) so the
UI label means "clientless" rather than "customerless"—locate
GoClientlessMsgBoxTitle in the RSBot.General tr_TR.rsl resource and replace the
string value accordingly.
In `@Dependencies/Languages/RSBot.General/vn_VN.rsl`:
- Line 92: The Vietnamese UI title string GoClientlessMsgBoxTitle currently
reads "Không có khách hàng" (means “without customers”); change its value to a
correct translation for the UI concept "No client" (for example replace with
"Không có client" or "Không có kết nối client") so the label reflects absence of
a client/connection rather than customers.
In `@Dependencies/Languages/RSBot.Items/ar_AR.rsl`:
- Line 64: The Arabic localization still contains English labels for the weapon
filters: update the values for the keys
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBow and
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkAxe to their Arabic
translations so the Items tab displays consistently; locate those keys (and the
duplicate occurrence noted further down) in the ar_AR.rsl resource entries and
replace "Bow" and "Axe" with the appropriate Arabic strings, preserving the
exact key names and file encoding.
In `@Dependencies/Languages/RSBot.Items/de_DE.rsl`:
- Around line 24-29: Replace the literal German phrasing with the in-game UI
terminology for the item filter labels: update the resource keys
RSBot.Items.Main.TabControl.TabPage.GroupBox.checkQuestItems, .checkEverything,
.checkAllEquips, .checkPickupBlue (and similar keys in lines 42-67) to use the
established German game terms for "Questgegenstände", the in-game toggle text
for "Alles aufheben"/"Alles", the term for "Rarität"/"Seltene Gegenstände" or
the exact in-game word for rare items, and the correct wording for light
armor/staff as used elsewhere in the UI; keep the key names the same but change
the string values to match the canonical in-game German labels used across the
localization files so the filter panel recognizes them.
In `@Dependencies/Languages/RSBot.Items/es_ES.rsl`:
- Around line 40-50: Several filter labels are mistranslated; update the strings
for the keys in this diff so the UI shows correct Spanish terms: change
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkChinese from "Porcelana"
to "Chino" (or the agreed game-term for Chinese-origin items),
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkQuest from "Búsqueda" to
"Misión" (or "De misión"),
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkBoxRareItems from
"Imprimir (Sox)" to a clear Spanish phrase like "Imprimible (SOX)" or the agreed
SOX wording, and RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkLight
from "Luz" to "Ligero" (if it denotes light-weight items); verify and correct
the same keys in the other block mentioned (lines 68-75) so both sections use
the consistent, game-accurate Spanish terms.
In `@Dependencies/Languages/RSBot.Items/tr_TR.rsl`:
- Around line 66-68: The localization entry for the staff weapon filter is
incorrect: update the value of
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.checkStaff from "Kadro" to
the correct Turkish noun for staff (e.g., "Asa") so the weapon filter reads
properly; modify the string value in the RSBot.Items/tr_TR.rsl file where
checkStaff is defined.
In `@Dependencies/Languages/RSBot.Items/vn_VN.rsl`:
- Around line 45-67: The Vietnamese labels contain awkward or literal
translations; update the strings for the listed keys to natural Vietnamese
(replace label3 "Bằng cấp" -> "Cấp độ" or "Hạng", checkBoxRareItems "In (Sox)"
-> "Hiếm (SOX)", checkLight "Ánh sáng" -> "Giáp nhẹ" or "Nhẹ", checkHead "Cái
đầu" -> "Đầu" or "Mũ", checkStaff "Nhân viên" -> "Gậy/Trượng", checkBow "Bow" ->
"Cung", and consider improving checkClothes "Quần áo" -> "Trang phục" for
consistency). Edit the values for the unique resource keys (e.g.,
RSBot.Items.Main.TabControl.TabPage.Panel.GroupBox.label3, checkBoxRareItems,
checkLight, checkHead, checkStaff, checkBow, checkClothes) to these suggested
replacements so the filter UI reads naturally in Vietnamese.
In `@Dependencies/Languages/RSBot.Party/ar_AR.rsl`:
- Line 1: The DisplayName value "حزب" is misleading in Arabic; replace it with a
game-appropriate group term such as "مجموعة" or "فريق" by updating the
DisplayName attribute (DisplayName="حزب") to one of those alternatives so the UI
shows a correct group/party label.
In `@Dependencies/Languages/RSBot.Party/de_DE.rsl`:
- Around line 52-55: The German locale still contains English text for
RSBot.Party.Main.TabControl.TabPage.GroupBox.labelCommandsInfo (and the similar
untranslated string referenced at the same file further down), so replace the
English value with a proper German translation; locate the resource key
RSBot.Party.Main.TabControl.TabPage.GroupBox.labelCommandsInfo and update its
value to a German string that conveys the same meaning (e.g., explain that these
commands are only for the in-game chat and translate the examples "traceme" and
"sitdown" to German descriptions), then search the file for any other
occurrences of the same English phrases (the other untranslated entry noted in
the comment) and translate them consistently as well.
In `@Dependencies/Languages/RSBot.Party/tr_TR.rsl`:
- Around line 62-63: label1 is incorrectly set to a time unit ("Dakika") while
label2 is "Maks." for level restrictions; update
RSBot.Party.AutoFormParty.GroupBox.label1 to a matching min/level term (e.g.,
"Min." or "Seviye Min.") so both labels are consistent with the level-range
context (refer to RSBot.Party.AutoFormParty.GroupBox.label1 and
RSBot.Party.AutoFormParty.GroupBox.label2).
In `@Dependencies/Languages/RSBot.Party/vn_VN.rsl`:
- Around line 52-55: Replace the English help text in the resource key
RSBot.Party.Main.TabControl.TabPage.GroupBox.labelCommandsInfo with a Vietnamese
localization; update the value so the UI reads fully in Vietnamese (e.g., a
suggested translation: "Các lệnh chỉ dùng trong cửa sổ chat trong
game!\n\ntraceme: Gửi yêu cầu theo dõi đến người chơi\nsitdown: Gửi yêu cầu ngồi
xuống đến người chơi").
In `@Dependencies/Languages/RSBot.Protection/ar_AR.rsl`:
- Line 21: Replace the awkward noun-phrase translation for
RSBot.Protection.Main.GroupBox.checkAutoSummonAttackPet with an actionable
Arabic phrasing that clearly indicates a toggle for auto-summoning the attack
and fellow pet; e.g., change to something like "تفعيل الاستدعاء التلقائي للحيوان
الهجومي والحيوان المرافق" or "استدعِ تلقائياً الحيوان الهجومي والحيوان المرافق"
to match the original intent and match wording used in other locales.
- Line 45: Update the Arabic localization key
RSBot.Protection.Main.GroupBox.buttonRun to an action-oriented label instead of
the present-tense "يجري"; replace its value with "تشغيل" or "ابدأ" to match
other button labels (e.g., "استخدام") so the UI uses consistent
imperative/action form for buttons.
In `@Dependencies/Languages/RSBot.Protection/de_DE.rsl`:
- Around line 44-50: Remove the duplicate localization key by deleting
RSBot.Protection.Main.GroupBox.checkUseHPPotionsPlayer and ensure the UI uses
the existing RSBot.Protection.Main.groupHPMP.checkUseHPPotionsPlayer entry (keep
only the groupHPMP key); also update the button label
RSBot.Protection.Main.GroupBox.buttonRun value from "Laufen" to a more
appropriate action word such as "Starten" or "Ausführen" to reflect the
launch/start action.
In `@Dependencies/Languages/RSBot.Protection/es_ES.rsl`:
- Line 50: The translation for RSBot.Protection.Main.GroupBox.buttonRun uses
"Correr", which is ambiguous; update the string value to a more appropriate
Spanish UI term such as "Ejecutar" (or "Iniciar" if the action is a start) by
replacing "Correr" with the chosen term so the button label reads e.g.
RSBot.Protection.Main.GroupBox.buttonRun="Ejecutar".
In `@Dependencies/Languages/RSBot.Skills/es_ES.rsl`:
- Line 44: The translation key
RSBot.Skills.Main.TabControl.TabPage.groupBoxAdvancedBuff uses the incorrect
term "búfer"; update its value to use the game-appropriate term (e.g., "mejoras"
or "buffs") so it matches the rest of the locale — replace "Configuración
avanzada de búfer" with "Configuración avanzada de mejoras" (or "Configuración
avanzada de buffs") in the RSBot.Skills/es_ES.rsl resource.
In `@Dependencies/Languages/RSBot.Skills/vn_VN.rsl`:
- Around line 35-36: The two entries
RSBot.Skills.Main.TabControl.TabPage.GroupBox.btnRemoveAttackSkill and
RSBot.Skills.Main.TabControl.TabPage.GroupBox.btnRemoveBuffSkill currently use
the placeholder value "r"; update both to meaningful Vietnamese button labels
(e.g., "Xóa" or "Loại bỏ") so the UI is readable and not accidental, and ensure
the text matches the app's localization style and casing.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro Plus
Run ID: 5d9902cc-1f33-46ed-abd6-f5495393e0e2
📒 Files selected for processing (55)
.github/workflows/pull_request.ymlBotbases/RSBot.Training/Bot/NavigationManager.csDependencies/Languages/RSBot.Alchemy/ar_AR.rslDependencies/Languages/RSBot.Alchemy/de_DE.rslDependencies/Languages/RSBot.Alchemy/es_ES.rslDependencies/Languages/RSBot.Alchemy/tr_TR.rslDependencies/Languages/RSBot.Alchemy/vn_VN.rslDependencies/Languages/RSBot.Chat/ar_AR.rslDependencies/Languages/RSBot.Chat/de_DE.rslDependencies/Languages/RSBot.Chat/es_ES.rslDependencies/Languages/RSBot.Chat/tr_TR.rslDependencies/Languages/RSBot.General/ar_AR.rslDependencies/Languages/RSBot.General/de_DE.rslDependencies/Languages/RSBot.General/es_ES.rslDependencies/Languages/RSBot.General/tr_TR.rslDependencies/Languages/RSBot.General/vn_VN.rslDependencies/Languages/RSBot.Inventory/ar_AR.rslDependencies/Languages/RSBot.Items/ar_AR.rslDependencies/Languages/RSBot.Items/de_DE.rslDependencies/Languages/RSBot.Items/es_ES.rslDependencies/Languages/RSBot.Items/tr_TR.rslDependencies/Languages/RSBot.Items/vn_VN.rslDependencies/Languages/RSBot.Log/de_DE.rslDependencies/Languages/RSBot.Log/es_ES.rslDependencies/Languages/RSBot.Log/tr_TR.rslDependencies/Languages/RSBot.Log/vn_VN.rslDependencies/Languages/RSBot.Map/ar_AR.rslDependencies/Languages/RSBot.Map/es_ES.rslDependencies/Languages/RSBot.Map/tr_TR.rslDependencies/Languages/RSBot.Party/ar_AR.rslDependencies/Languages/RSBot.Party/de_DE.rslDependencies/Languages/RSBot.Party/es_ES.rslDependencies/Languages/RSBot.Party/tr_TR.rslDependencies/Languages/RSBot.Party/vn_VN.rslDependencies/Languages/RSBot.Protection/ar_AR.rslDependencies/Languages/RSBot.Protection/de_DE.rslDependencies/Languages/RSBot.Protection/es_ES.rslDependencies/Languages/RSBot.Protection/tr_TR.rslDependencies/Languages/RSBot.Protection/vn_VN.rslDependencies/Languages/RSBot.Skills/ar_AR.rslDependencies/Languages/RSBot.Skills/de_DE.rslDependencies/Languages/RSBot.Skills/es_ES.rslDependencies/Languages/RSBot.Skills/tr_TR.rslDependencies/Languages/RSBot.Skills/vn_VN.rslDependencies/Languages/RSBot.Statistics/ar_AR.rslDependencies/Languages/RSBot.Statistics/de_DE.rslDependencies/Languages/RSBot.Training/ar_AR.rslDependencies/Languages/RSBot.Training/de_DE.rslDependencies/Languages/RSBot.Training/es_ES.rslDependencies/Languages/RSBot.Training/tr_TR.rslDependencies/Languages/RSBot.Training/vn_VN.rslDependencies/Languages/RSBot/de_DE.rslDependencies/Languages/RSBot/es_ES.rslDependencies/Languages/RSBot/vn_VN.rslscripts/build.ps1
✅ Files skipped from review due to trivial changes (26)
- Dependencies/Languages/RSBot.Log/es_ES.rsl
- Dependencies/Languages/RSBot.Map/es_ES.rsl
- Dependencies/Languages/RSBot.Map/ar_AR.rsl
- Dependencies/Languages/RSBot.Log/vn_VN.rsl
- Dependencies/Languages/RSBot.Training/es_ES.rsl
- Dependencies/Languages/RSBot.Map/tr_TR.rsl
- Dependencies/Languages/RSBot.Chat/de_DE.rsl
- Dependencies/Languages/RSBot/vn_VN.rsl
- Dependencies/Languages/RSBot.Chat/tr_TR.rsl
- Dependencies/Languages/RSBot.Training/tr_TR.rsl
- Dependencies/Languages/RSBot.Inventory/ar_AR.rsl
- Dependencies/Languages/RSBot.Statistics/de_DE.rsl
- Dependencies/Languages/RSBot.Training/vn_VN.rsl
- Dependencies/Languages/RSBot.Log/de_DE.rsl
- Dependencies/Languages/RSBot.Skills/de_DE.rsl
- Dependencies/Languages/RSBot.Chat/es_ES.rsl
- Dependencies/Languages/RSBot.Alchemy/vn_VN.rsl
- Dependencies/Languages/RSBot.Alchemy/de_DE.rsl
- Dependencies/Languages/RSBot/es_ES.rsl
- Dependencies/Languages/RSBot.Statistics/ar_AR.rsl
- Dependencies/Languages/RSBot.Alchemy/tr_TR.rsl
- Dependencies/Languages/RSBot.Training/de_DE.rsl
- Dependencies/Languages/RSBot.Training/ar_AR.rsl
- Dependencies/Languages/RSBot.Chat/ar_AR.rsl
- Dependencies/Languages/RSBot.Protection/tr_TR.rsl
- Dependencies/Languages/RSBot.Log/tr_TR.rsl
🚧 Files skipped from review as they are similar to previous changes (1)
- .github/workflows/pull_request.yml
| InputDialogContent="يرجى إدخال الكمية التى يجب ان يشتريها البوت | ||
| للعنصر المحدد" |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
git ls-files | head -20Repository: Silkroad-Developer-Community/RSBot
Length of output: 696
🏁 Script executed:
find . -name "*.rsl" -type f | head -10Repository: Silkroad-Developer-Community/RSBot
Length of output: 559
🏁 Script executed:
cat -n "Dependencies/Languages/RSBot.Items/ar_AR.rsl" | head -80Repository: Silkroad-Developer-Community/RSBot
Length of output: 5902
🏁 Script executed:
# Search for .rsl file parsing code or documentation
rg -i "\.rsl" --type-list | head -20Repository: Silkroad-Developer-Community/RSBot
Length of output: 468
🏁 Script executed:
# Look for how multiline values are handled in resource files
rg "InputDialogContent" --type-listRepository: Silkroad-Developer-Community/RSBot
Length of output: 468
🏁 Script executed:
# Search for other .rsl files and check their format
find . -name "*.rsl" -exec wc -l {} \;Repository: Silkroad-Developer-Community/RSBot
Length of output: 4946
🏁 Script executed:
find . -name "*.cs" -o -name "*.cpp" -o -name "*.h" | xargs rg -l "\.rsl" | head -10Repository: Silkroad-Developer-Community/RSBot
Length of output: 129
🏁 Script executed:
# Search for code that loads or parses .rsl files
rg -i "rsl|resource" --type cs | grep -i "load\|parse\|read" | head -20Repository: Silkroad-Developer-Community/RSBot
Length of output: 940
🏁 Script executed:
# Look at the English version of the same file to see if multiline format is used there
cat -n "Dependencies/Languages/RSBot.Items/en_US.rsl" | grep -A 1 "InputDialogContent"Repository: Silkroad-Developer-Community/RSBot
Length of output: 181
🏁 Script executed:
# Check other language versions to see if they use multiline format
for file in Dependencies/Languages/RSBot.Items/*.rsl; do
echo "=== $file ==="
grep -A 1 "InputDialogContent" "$file" || echo "Not found"
doneRepository: Silkroad-Developer-Community/RSBot
Length of output: 1152
🏁 Script executed:
# Search for any .rsl or resource loading code in the entire codebase
find . -type f \( -name "*.cs" -o -name "*.xaml" -o -name "*.xml" \) -exec grep -l "rsl\|ResourceManager\|XmlDocument" {} \; | head -20Repository: Silkroad-Developer-Community/RSBot
Length of output: 609
🏁 Script executed:
cat -n "Library/RSBot.Core/Components/LanguageManager.cs"Repository: Silkroad-Developer-Community/RSBot
Length of output: 10123
Use escape sequences for line breaks instead of literal newlines.
The .rsl parser is line-based and doesn't support multiline string values. Line 36 will be skipped entirely because it doesn't contain "=", resulting in an incomplete value. Use \n to preserve the intended formatting:
Suggested fix
InputDialogContent="يرجى إدخال الكمية التى يجب ان يشتريها البوت\n للعنصر المحدد"
Also translate the untranslated English labels at lines 64 (checkBow) and 73 (checkAxe).
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Dependencies/Languages/RSBot.Items/ar_AR.rsl` around lines 35 - 36, The
"InputDialogContent" value currently contains a literal newline which breaks the
line-based .rsl parser; replace the multiline string with a single-line string
using the escape sequence \n (e.g., set InputDialogContent="يرجى إدخال الكمية
التى يجب ان يشتريها البوت\n للعنصر المحدد") so the value is parsed correctly,
and also provide Arabic translations for the keys checkBow and checkAxe (replace
their English labels with the appropriate Arabic text) so those entries are not
left untranslated.
| RSBot.Party.Main.TabControl.TabPage.GroupBox.checkAutoItemAutoShare="مشاركة العنصر تلقائيًا" | ||
| RSBot.Party.Main.TabControl.TabPage.GroupBox.checkAutoExpAutoShare="مشاركة تلقائية لتاريخ انتهاء الصلاحية" |
There was a problem hiding this comment.
Fix the EXP-share translation.
مشاركة تلقائية لتاريخ انتهاء الصلاحية says “automatic sharing of expiration date,” which is unrelated to the EXP option. It should describe EXP sharing instead.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Dependencies/Languages/RSBot.Party/ar_AR.rsl` around lines 19 - 20, The
translation for
RSBot.Party.Main.TabControl.TabPage.GroupBox.checkAutoExpAutoShare is incorrect
(it currently reads as “automatic sharing of expiration date”); update that
value to a correct Arabic phrase describing EXP (experience) sharing, for
example "مشاركة الخبرة تلقائيًا" or "مشاركة الخبرة (EXP) تلقائيًا", leaving
RSBot.Party.Main.TabControl.TabPage.GroupBox.checkAutoItemAutoShare untouched.
| RSBot.Party.Main.TabControl.tpAutoParty="حفلة سيارات" | ||
| RSBot.Party.Main.TabControl.tpPartyMatching="التوفيق بين الأحزاب" | ||
| RSBot.Party.Main.TabControl.tpPartyBuffing="التلميع" |
There was a problem hiding this comment.
These tab captions are off-domain.
حفلة سيارات, التوفيق بين الأحزاب, and التلميع are not understandable as party/buffing labels. Please rewrite them with the same group/party terminology used elsewhere in the file.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Dependencies/Languages/RSBot.Party/ar_AR.rsl` around lines 45 - 47, The three
Arabic captions are using off-domain words; replace the values for
RSBot.Party.Main.TabControl.tpAutoParty,
RSBot.Party.Main.TabControl.tpPartyMatching, and
RSBot.Party.Main.TabControl.tpPartyBuffing with consistent party/group
terminology used elsewhere (e.g., use "إدارة الفرقة" or "الفرقة التلقائية" for
auto party, "مطابقة الفرق" for party matching, and "تعزيز الفرقة" or "تدعيم
الفرقة" for party buffing) so they match the file's existing vocabulary and are
semantically correct.
| RSBot.Party.AutoFormParty.GroupBox.cb_AutoReform="إصلاح السيارات" | ||
| RSBot.Party.AutoFormParty.GroupBox.cb_AutoAccept="قبول تلقائي" | ||
| RSBot.Party.AutoFormParty.GroupBox.label_partytype2="مشاركة العناصر تلقائيًا" | ||
| RSBot.Party.AutoFormParty.GroupBox.label_partytype="مشاركة تلقائية" | ||
| RSBot.Party.AutoFormParty.GroupBox.label2="الأعلى." | ||
| RSBot.Party.AutoFormParty.GroupBox.label1="دقيقة." | ||
| RSBot.Party.AutoFormParty.GroupBox.rbtn_Thief="نقابة اللصوص" | ||
| RSBot.Party.AutoFormParty.GroupBox.rbtn_Trade="نقابة العمال" | ||
| RSBot.Party.AutoFormParty.GroupBox.rbtn_Quest="مهمة" | ||
| RSBot.Party.AutoFormParty.GroupBox.rbtn_Hunting="الصيد" | ||
| RSBot.Party.AutoFormParty.groupBox5="التكوين" | ||
| RSBot.Party.AutoFormParty.groupBox4="عنوان" | ||
| RSBot.Party.AutoFormParty.groupBox3="نوع الحفلة" | ||
| RSBot.Party.AutoFormParty.groupBox2="تقييد المستوى" | ||
| RSBot.Party.AutoFormParty.gbObjective="هدف الحزب" | ||
| RSBot.Party.AutoFormParty.btnCancel="يلغي" | ||
| RSBot.Party.AutoFormParty.btnAccept="يقبل" |
There was a problem hiding this comment.
This AutoFormParty block needs a translation pass.
Several values are clearly mistranslated (إصلاح السيارات, نقابة العمال, نوع الحفلة, هدف الحزب), which will make the configuration page hard to understand.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@Dependencies/Languages/RSBot.Party/ar_AR.rsl` around lines 58 - 74, The
Arabic translations in the AutoFormParty block are incorrect; update the
specific keys with proper game-localized terminology: change
RSBot.Party.AutoFormParty.GroupBox.cb_AutoReform from "إصلاح السيارات" to "إصلاح
تلقائي", change RSBot.Party.AutoFormParty.GroupBox.rbtn_Trade from "نقابة
العمال" to "نقابة التجار" (or "تجارة" if shorter), change
RSBot.Party.AutoFormParty.groupBox3 from "نوع الحفلة" to "نوع المجموعة", and
change RSBot.Party.AutoFormParty.gbObjective from "هدف الحزب" to "هدف المجموعة";
review nearby labels (e.g., label1/label2) for context and adjust wording to
natural Arabic where needed.
|
@CodeRabbit pause |
✅ Actions performedReviews paused. |
7e10d01
into
Silkroad-Developer-Community:main

Implements a lightweight, graph-based navigation system using semantic node mapping and A* pathfinding when there's no walkscript to work with.
Creates a timestamped
.rbsfile asData/Scripts/Dynamic/yyyy-mm-dd_hh-mm-ss.rbs. Shoots a linear line towards theTrainingtarget from the closest node (might collide. as the data isn't complete and there's no functionality to ignore objects, yet).https://github.com/Egezenn/Silkroad-NavLink/blob/main/navigation_linkage.json
Thanks to Jelly's xSROMap, @kis1yi 's fork that has the necessary scripts to work with and @Day4Date 's Python API making the development of this much easier.
A button is available on
TrainingtabsBack to trainingsubsection to refetch the data.TODO:
FURTHER:
Summary by CodeRabbit
New Features
Chores
Localization