From 76ab83620b7732d53c5c7280b0925f682eb2fc44 Mon Sep 17 00:00:00 2001 From: haunter Date: Tue, 28 Apr 2026 23:08:35 +0300 Subject: [PATCH] fix 3 --- bot_modules/02_state.js | 35 +++++++++++++++++++++++++---- static/js/components/commandForm.js | 5 +++++ static/js/components/townViewer.js | 11 ++++----- templates/dashboard.html | 12 +++++----- 4 files changed, 48 insertions(+), 15 deletions(-) diff --git a/bot_modules/02_state.js b/bot_modules/02_state.js index 433151c..00cf8f4 100644 --- a/bot_modules/02_state.js +++ b/bot_modules/02_state.js @@ -74,16 +74,43 @@ function gatherState() { } catch (e) { log(`storage capacity lookup failed: ${e}`); } // ---- Market / Trade capacity ----------------------------------------- + // Uses multiple fallback paths to robustly read capacity across game versions. let marketCapacity = 0; let availableTradeCapacity = 0; try { const marketLevel = buildings.market ?? 0; const gd = uw.GameData?.buildingData?.market; - marketCapacity = gd?.capacity_per_level?.[marketLevel] || 0; - if (buildings.trade_office && buildings.trade_office > 0) { - marketCapacity += (uw.GameData?.buildingData?.trade_office?.capacity_extra_per_level || 500) * marketLevel; + if (gd) { + // Try various key names the game uses across versions + marketCapacity = + gd?.capacity_per_level?.[marketLevel] || + gd?.max_capacity?.[marketLevel] || + gd?.merchant_count?.[marketLevel] || + gd?.merchants?.[marketLevel] || + 0; + } + // Try the town object's built-in method first (most accurate) + if (town.getTradeCapacity) { + marketCapacity = town.getTradeCapacity() || marketCapacity; + } + // Available = total minus what is already used by pending trades + if (town.getAvailableTradeCapacity) { + availableTradeCapacity = town.getAvailableTradeCapacity() ?? marketCapacity; + } else { + // Fallback: read from trade collection + let usedCapacity = 0; + try { + const tradeColl = uw.MM.getOnlyCollectionByName('Trade'); + if (tradeColl) { + tradeColl.models.forEach(m => { + if (String(m.attributes?.town_id) === String(town.id)) { + usedCapacity += (m.attributes?.capacity || 0); + } + }); + } + } catch (e2) {} + availableTradeCapacity = Math.max(0, marketCapacity - usedCapacity); } - availableTradeCapacity = town.getAvailableTradeCapacity?.() ?? marketCapacity; } catch (e) { log(`market capacity lookup failed: ${e}`); } // ---- Coordinates & sea zone ----------------------------------------- diff --git a/static/js/components/commandForm.js b/static/js/components/commandForm.js index a7dd21b..5e199ec 100644 --- a/static/js/components/commandForm.js +++ b/static/js/components/commandForm.js @@ -9,6 +9,11 @@ window.onCmdTypeChange = function() { document.getElementById('amount-group').style.display = type === 'recruit' ? '' : 'none'; document.getElementById('market-options').style.display = type === 'market_offer' ? '' : 'none'; document.getElementById('research-options').style.display = type === 'research' ? '' : 'none'; + + // Refresh market capacity label whenever market tab is opened + if (type === 'market_offer' && window.renderTownDetails) { + window.renderTownDetails(); + } }; // Building emoji icons for the visual grid diff --git a/static/js/components/townViewer.js b/static/js/components/townViewer.js index bfbfef3..325728b 100644 --- a/static/js/components/townViewer.js +++ b/static/js/components/townViewer.js @@ -167,18 +167,19 @@ window.renderTownDetails = function() { const mCap = resObj.market_capacity || 0; const aCap = resObj.available_trade_capacity != null ? resObj.available_trade_capacity : mCap; - console.log("Town:", t.town_name, "MarketCap:", mCap, "AvailCap:", aCap, "ResObj:", resObj); + // Always update td-market in the details panel document.getElementById('td-market').innerHTML = mCap > 0 ? `📦 Εμπορική Χωρητικότητα: ${window.fmt(aCap)} / ${window.fmt(mCap)}` - : ''; - + : `📦 Εμπορική Χωρητικότητα: Χωρίς Αγορά (Επ.0)`; + + // Always update the label inside the market command form const mCapLabel = document.getElementById('market-capacity-label'); if (mCapLabel) { if (mCap > 0) { - mCapLabel.innerHTML = `Χωρητικότητα: ${window.fmt(aCap)} / ${window.fmt(mCap)}`; + mCapLabel.innerHTML = `🏪 Διαθέσιμη Χωρητικότητα: ${window.fmt(aCap)} / ${window.fmt(mCap)} max`; } else { - mCapLabel.textContent = ''; + mCapLabel.innerHTML = `⚠️ Αυτή η πόλη δεν έχει Αγορά`; } } diff --git a/templates/dashboard.html b/templates/dashboard.html index 1d86733..b580a41 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -258,11 +258,11 @@ - - - - - - + + + + + +