mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-27 14:34:19 +00:00
fix: allies cannot annex your clusters (#2158)
## Description: Fixes #1685 Continuation from #1924, which was auto-closed after the upstream repo force-pushed main and I synced my fork. This change ensures that allies are excluded from the `getMode()` call made by `getCapturingPlayer()` inside `removeCluster()`. - Previously, friendly neighbors were treated as candidates for capturing, leading to incorrect annexations in certain edge cases. - Added a small efficiency improvement by filtering out non-player and friendly neighbors up front to reduce total computations down-the-line. - Important: we can’t simply check if the `getMode(neighborsIDs)` result is a friendly. Doing so would cause the territory to go to nobody until the user is attacked. I believe the expected behavior is the largest neighboring enemy should take it automatically. Here's an example of the new behavior in an extreme edge case: <img width="622" height="422" alt="Screenshot 2025-08-24 at 4 56 46 PM" src="https://github.com/user-attachments/assets/c5dd9c0d-0a3c-4657-8154-e114fa920689" /> ## Please complete the following: - [X] I have added screenshots for all UI updates - [X] I process any text displayed to the user through translateText() and I've added it to the en.json file - [X] I have added relevant tests to the test directory - [X] I confirm I have thoroughly tested these changes and take full responsibility for any bugs introduced ## Please put your Discord username so you can be contacted if a bug or regression is found: nottirb
This commit is contained in:
@@ -114,27 +114,6 @@ export function inscribed(
|
||||
);
|
||||
}
|
||||
|
||||
export function getMode(list: Set<number>): number {
|
||||
// Count occurrences
|
||||
const counts = new Map<number, number>();
|
||||
for (const item of list) {
|
||||
counts.set(item, (counts.get(item) ?? 0) + 1);
|
||||
}
|
||||
|
||||
// Find the item with the highest count
|
||||
let mode = 0;
|
||||
let maxCount = 0;
|
||||
|
||||
for (const [item, count] of counts) {
|
||||
if (count > maxCount) {
|
||||
maxCount = count;
|
||||
mode = item;
|
||||
}
|
||||
}
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
export function sanitize(name: string): string {
|
||||
return Array.from(name)
|
||||
.join("")
|
||||
|
||||
Reference in New Issue
Block a user