Fixed Faction population

This commit is contained in:
2026-01-25 18:11:59 -05:00
parent 8779ad3d3b
commit 1f0b974f6c
6 changed files with 102 additions and 58 deletions

View File

@@ -53,19 +53,23 @@ class ServerState:
if member_id in coll:
coll[member_id].group = group_key
def _remove_member_assignment_unlocked(self, member_id: int):
"""Internal helper - assumes lock is already held"""
for gk, buckets in self.groups.items():
if member_id in buckets["friendly"]:
buckets["friendly"].remove(member_id)
if member_id in buckets["enemy"]:
buckets["enemy"].remove(member_id)
# clear group attribute
if member_id in self.friendly:
self.friendly[member_id].group = None
if member_id in self.enemy:
self.enemy[member_id].group = None
async def remove_member_assignment(self, member_id: int):
async with self.lock:
for gk, buckets in self.groups.items():
if member_id in buckets["friendly"]:
buckets["friendly"].remove(member_id)
if member_id in buckets["enemy"]:
buckets["enemy"].remove(member_id)
# clear group attribute
if member_id in self.friendly:
self.friendly[member_id].group = None
if member_id in self.enemy:
self.enemy[member_id].group = None
self._remove_member_assignment_unlocked(member_id)
async def clear_all_assignments(self):
async with self.lock:
@@ -113,7 +117,7 @@ class ServerState:
coll = self.friendly if kind == "friendly" else self.enemy
to_remove = [mid for mid in coll.keys() if mid not in set(received_ids)]
for mid in to_remove:
await self.remove_member_assignment(mid)
self._remove_member_assignment_unlocked(mid)
del coll[mid]
# Single global state