diff --git a/src/bannerlord/campaign_loop.py b/src/bannerlord/campaign_loop.py index 1282f97c..ff76689a 100644 --- a/src/bannerlord/campaign_loop.py +++ b/src/bannerlord/campaign_loop.py @@ -121,8 +121,6 @@ class CampaignLoop: Returns the list of tick results (for testing / benchmarking). Runs until M2 complete, externally stopped, or max_ticks reached. """ - from bannerlord.gabs_client import GabsClient - self._running = True logger.info( "CampaignLoop starting — gabs=%s:%d tick=%.1fs", diff --git a/src/bannerlord/campaign_state.py b/src/bannerlord/campaign_state.py index f54a0d58..be2b15f4 100644 --- a/src/bannerlord/campaign_state.py +++ b/src/bannerlord/campaign_state.py @@ -168,6 +168,9 @@ def parse_campaign_state(raw: dict[str, Any]) -> CampaignState: nearby_parties = [] for p in raw.get("nearby_parties", []): try: + if not isinstance(p, dict) or not p.get("id"): + logger.debug("Skipping malformed nearby_party entry: missing id") + continue nearby_parties.append( NearbyParty( party_id=str(p.get("id", "")),