Tourismustal: Soziale Verantwortung (Personalhaus) + Editor-Fixes
- Personalhaus-Ausbau = Wohnqualitaet: zufriedenes Personal, freundlicher Service, +2/+4/+6 Gaeste-Zufriedenheit je Stufe (nur bei Beschaeftigten). Report-Zeile, Wissensbaustein (reale Saisonkraft-Unterkuenfte), BUILD_INFO + Audio neu, spezieller Ausbau-Toast. Glossar-Begriff soziale-verantwortung mit Bild + Modul-Zuordnung (SQL). - Editor-Bugfix: _sprite las w/bottom aus der beim Laden eingefrorenen Kopie - Justierungen wirkten nicht. Jetzt live aus SPRITE_DEFS. - Export-Button klargestellt: exportiert ALLE justierten Gebaeude auf einmal. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
@@ -89,10 +89,10 @@
|
||||
|
||||
<div class="ed-btns">
|
||||
<button id="edReset">↩︎ Zurücksetzen</button>
|
||||
<button id="edCopy" class="primary">📋 Export kopieren</button>
|
||||
<button id="edCopy" class="primary">📋 ALLES exportieren</button>
|
||||
</div>
|
||||
|
||||
<label>Export (an Atlas → wird fest eingebaut)</label>
|
||||
<label>Gesamt-Export: enthält ALLE justierten Gebäude & Stufen (an Atlas → wird fest eingebaut)</label>
|
||||
<textarea id="edOut" readonly></textarea>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -416,9 +416,11 @@ export const BUILD_INFO = {
|
||||
icon: '🏠', title: 'Wohnraum für dein Personal!',
|
||||
text: '12 Angestellte finden hier ein Zuhause. Betriebe ohne Personal '
|
||||
+ 'laufen nur mit halber Kraft – die Personal-Zeile links zeigt, ob '
|
||||
+ 'alle Stellen besetzt sind.\n\n📍 LAGE ZÄHLT: Baue es nahe bei den '
|
||||
+ 'Betrieben (max. 4 Felder, Kreis beim Bauen) – liegt es weiter weg, '
|
||||
+ 'wirkt es nur zu zwei Dritteln.',
|
||||
+ 'alle Stellen besetzt sind.\n\n🤝 SOZIALE VERANTWORTUNG: Baust du das '
|
||||
+ 'Personalhaus später aus, wohnt dein Personal besser – zufriedene '
|
||||
+ 'Mitarbeiter:innen sind freundlicher, und das merken die Gäste.\n\n'
|
||||
+ '📍 LAGE ZÄHLT: Baue es nahe bei den Betrieben (max. 4 Felder, Kreis '
|
||||
+ 'beim Bauen) – liegt es weiter weg, wirkt es nur zu zwei Dritteln.',
|
||||
},
|
||||
snow: {
|
||||
icon: '❄️', title: 'Die Beschneiung steht bereit!',
|
||||
@@ -714,6 +716,7 @@ export const KNOWLEDGE = {
|
||||
],
|
||||
staffhouse: [
|
||||
{ term: 'Saisonarbeit & Wohnraum', text: 'Tourismus braucht viele Arbeitskräfte, oft in Saisonarbeit. Ohne leistbaren Wohnraum finden die Betriebe kein Personal.' },
|
||||
{ term: 'Soziale Verantwortung', text: 'Real wohnen Saisonkräfte oft in engen, schlechten Unterkünften. Wer in gute Personalhäuser investiert, bekommt zufriedenes Personal – und das spüren die Gäste: freundlicher Service, bessere Bewertungen. Ein Win-win.' },
|
||||
],
|
||||
snow: [
|
||||
{ term: 'Klimawandel-Anpassung', text: 'Beschneiung sichert die Saison, wenn die Winter wärmer werden – braucht aber viel Wasser und Energie.' },
|
||||
|
||||
@@ -1716,10 +1716,13 @@ export class IsoRenderer {
|
||||
_sprite(name, x, y, scale = 1, flip = false) {
|
||||
const s = this.sprites[name];
|
||||
if (!s) return false;
|
||||
const w = s.w * scale;
|
||||
// w/bottom IMMER live aus SPRITE_DEFS lesen – so wirken Editor-
|
||||
// Justierungen sofort (die geladene Kopie wäre eingefroren).
|
||||
const def = SPRITE_DEFS[name] || s;
|
||||
const w = def.w * scale;
|
||||
this._shadow(x, y + 2, w * 0.38, w * 0.16);
|
||||
// Motiv endet im 1024er-Bild bei ~88 % der Höhe
|
||||
const top = y + s.bottom - w * 0.88;
|
||||
const top = y + def.bottom - w * 0.88;
|
||||
if (flip) {
|
||||
const ctx = this.ctx;
|
||||
ctx.save(); ctx.translate(x, 0); ctx.scale(-1, 1);
|
||||
|
||||
@@ -98,7 +98,9 @@ function inspectBuilding(c, r) {
|
||||
audio.build();
|
||||
renderer.addFloat('🏗️ Umbau …', '#e8892b', c + 0.5, r - 0.5, true);
|
||||
ui.updateKPIs();
|
||||
ui.toast(`🏗️ ${res.name} wird auf Stufe ${roman} umgebaut (−${res.cost.toLocaleString('de-AT')} €) – schau zu!`);
|
||||
ui.toast(rep.type === 'staffhouse'
|
||||
? `🤝 ${res.name} wird auf Stufe ${roman} ausgebaut (−${res.cost.toLocaleString('de-AT')} €) – dein Personal wohnt besser, der Service wird freundlicher!`
|
||||
: `🏗️ ${res.name} wird auf Stufe ${roman} umgebaut (−${res.cost.toLocaleString('de-AT')} €) – schau zu!`, 6000);
|
||||
telemetry.log('upgrade', { c, r, cost: res.cost, level: res.level });
|
||||
ui._closeBuilding(); // Karte schließen → man sieht die Baustelle
|
||||
},
|
||||
|
||||
@@ -506,7 +506,12 @@ export function buildingReport(state, c, r) {
|
||||
if (def.cap) lines.push(`Förderleistung: ${effVal(b, 'cap')} Gäste/Tag`);
|
||||
if (def.beds) lines.push(`Betten: ${effVal(b, 'beds')}`);
|
||||
if (def.access) lines.push(`Anreise: +${effVal(b, 'access')} Gäste/Tag`);
|
||||
if (def.housing) lines.push(`Wohnraum: ${effVal(b, 'housing')} Angestellte`);
|
||||
if (def.housing) {
|
||||
lines.push(`Wohnraum: ${effVal(b, 'housing')} Angestellte`);
|
||||
lines.push((b.level || 1) > 1
|
||||
? `🤝 Wohnqualität Stufe ${['', 'I', 'II', 'III', 'IV'][b.level || 1]}: zufriedenes Personal, freundlicherer Service (+${((b.level - 1) * 2)} Zufriedenheit)`
|
||||
: '🤝 Ausbau verbessert die Wohnqualität – soziale Verantwortung zahlt sich in Zufriedenheit aus');
|
||||
}
|
||||
if (def.summerCap) lines.push(`Sommergäste: bis ${effVal(b, 'summerCap')}/Tag`);
|
||||
if (def.spendBonus) lines.push(`Mehrumsatz: +${effVal(b, 'spendBonus')} €/Gast`);
|
||||
if (def.snowPower) lines.push(`Beschneiung: +${effVal(b, 'snowPower').toFixed(1)} cm/Tag`);
|
||||
@@ -826,6 +831,18 @@ export function simulateDay(state) {
|
||||
let satTarget = 70;
|
||||
if (count(state, 'restaurant') > 0) satTarget += 12;
|
||||
satTarget += Math.min(8, sum(state, 'satBonus'));
|
||||
// Soziale Verantwortung: gut ausgebaute Personalhäuser = bessere Wohn-
|
||||
// qualität = zufriedenes Personal = freundlicherer Service. Wirkt nur,
|
||||
// wenn überhaupt Personal beschäftigt ist. (Ø-Ausbaustufe → 0…+6)
|
||||
const shLevels = state.buildings
|
||||
.filter(b => b.type === 'staffhouse').map(b => b.level || 1);
|
||||
if (shLevels.length && state.staffNeeded > 0) {
|
||||
const avg = shLevels.reduce((a, v) => a + v, 0) / shLevels.length;
|
||||
state.staffCare = Math.round((avg - 1) * 20) / 10; // Stufe II=+2 … IV=+6
|
||||
satTarget += state.staffCare;
|
||||
} else {
|
||||
state.staffCare = 0;
|
||||
}
|
||||
if (crowding > 0.9) satTarget -= 20;
|
||||
if (staffFactor < 1) satTarget -= 15;
|
||||
if (winter) {
|
||||
|
||||
Reference in New Issue
Block a user