Farmer-Fix: Begruendungstext passt jetzt zur echten Klimazone (nicht mehr zufaellig)
Bug: Kamel in tropischem Brasilien zeigte "Polargebiet/Permafrost", weil der
generische N2-Pool tropisch+polar mischt und pickFromPool zufaellig zog. Ebenso
"Kamele in Nordeuropa" auf einem Feld in Suedamerika (fester Regionsname).
- engine.js: pickZoneAware() waehlt per Klima-Stichwoertern (ZONE_KEYWORDS) den
zur Zone passenden Grund-Text statt zufaellig; Fallback = alt.
- crops.json: Kamel-N1-Text regions-neutral ("viel zu feucht" statt "Nordeuropa").
S1-Erfolgstexte mit Regions-Beispielen (Reis/Kaffee/Datteln) bewusst belassen
(Vergleich auf passendem Feld, didaktisch ok).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -217,7 +217,7 @@
|
||||
],
|
||||
"N1": [
|
||||
"Zu feucht ganzjährig — Hufkrankheiten, Parasiten, Pilzbefall im Fell. Die Tiere magern ab. Geringer Ertrag.",
|
||||
"Kamele in Nordeuropa? Sie überleben kurz, aber die Feuchtigkeit zerstört ihr Wesen. Keine Wirtschaftsbasis."
|
||||
"Für Kamele viel zu feucht: Sie überleben kurz, aber die ständige Feuchtigkeit zerstört Fell und Hufe. Keine Wirtschaftsbasis."
|
||||
],
|
||||
"N2": [
|
||||
"Tropischer Regenwald: Permanente Feuchtigkeit, zu warm, falsches Futter. Die Tiere gehen ein.",
|
||||
|
||||
@@ -368,6 +368,38 @@ window.FarmerEngine = (function () {
|
||||
return pool[idx];
|
||||
}
|
||||
|
||||
// Zone-charakteristische Stichwörter: wählt bei mehrdeutigen Pools den
|
||||
// KLIMAPASSENDEN Grund-Text statt zufällig einen klimafremden (Bug: Polar-Text
|
||||
// auf tropischem Feld). Greift zusätzlich zu den spezifischen
|
||||
// narratives[sui+'_'+zoneId]-Keys.
|
||||
const ZONE_KEYWORDS = {
|
||||
tropisch_feucht: ['tropisch', 'regenwald', 'schwül', 'permanente feucht', 'ganzjährig feucht'],
|
||||
tropisch_trocken: ['savanne', 'tropisch trocken', 'regenzeit', 'trockenzeit'],
|
||||
wueste: ['wüste', 'aride', 'dürre', 'extrem trocken', 'sand'],
|
||||
mittelmeer: ['mittelmeer', 'mediterran'],
|
||||
subtropisch_feucht: ['subtropisch', 'schwül'],
|
||||
gemaessigt_feucht: ['gemäßigt', 'mitteleurop', 'feuchtes klima'],
|
||||
kontinental: ['kontinental', 'steppe', 'binnenland'],
|
||||
boreal: ['boreal', 'taiga', 'kurze sommer', 'frost'],
|
||||
polar: ['polar', 'permafrost', 'arktis', 'ewiger schnee', 'tundra', 'schnee-tier'],
|
||||
};
|
||||
function pickZoneAware(pool, zoneId, rng) {
|
||||
if (!pool || pool.length === 0) return '(kein Bericht)';
|
||||
if (pool.length === 1) return pool[0];
|
||||
const kws = ZONE_KEYWORDS[zoneId];
|
||||
if (kws) {
|
||||
let best = null, bestScore = 0;
|
||||
for (const t of pool) {
|
||||
const s = (typeof t === 'string' ? t : (t && t.de) || '').toLowerCase();
|
||||
let score = 0;
|
||||
for (const kw of kws) if (s.indexOf(kw) >= 0) score++;
|
||||
if (score > bestScore) { bestScore = score; best = t; }
|
||||
}
|
||||
if (best) return best; // klar passender Text gefunden
|
||||
}
|
||||
return pickFromPool(pool, rng); // sonst wie bisher
|
||||
}
|
||||
|
||||
function harvestYear(game) {
|
||||
if (!CROPS_INDEX) return [];
|
||||
const reports = [];
|
||||
@@ -434,7 +466,7 @@ window.FarmerEngine = (function () {
|
||||
const specificPool = crop.narratives && crop.narratives[specificKey];
|
||||
const classPool = crop.narratives && crop.narratives[sui];
|
||||
const pool = (specificPool && specificPool.length > 0) ? specificPool : classPool;
|
||||
narrative = pickFromPool(pool, rng);
|
||||
narrative = pickZoneAware(pool, field.zoneId, rng);
|
||||
}
|
||||
|
||||
// Trade — Markt-Hub des Jahres, ggf. regional direkt zur Konsumcity
|
||||
|
||||
Reference in New Issue
Block a user