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 @@
-
-
-
-
-
-
+
+
+
+
+
+