Textsystem: Bis-Strich mit Leerzeichen (Zahl – Zahl) per Agent-Sweep
562 Ersetzungen in 50 Dateien: Halbgeviertstrich zwischen zwei Ziffern (= "bis"-Bereich) bekommt Leerzeichen davor/danach (3–4 -> 3 – 4). Regex /([0-9])\s*–\s*(?=[0-9])/ auf Rohtext (format-erhaltend, CRLF/Einrueckung unveraendert), Bindestriche in Woertern und Minuszeichen unangetastet, alle JSON weiter gueltig. Energiemanager-Zeitbloecke sind Display-Labels (kein Logik-Key) -> safe. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -226,8 +226,8 @@
|
||||
</td>
|
||||
<td>
|
||||
<span class="cat cat-geschick">Geschick</span><br>
|
||||
• Start-Sterne (1–5)<br>
|
||||
• Landung-Sterne (1–5)<br>
|
||||
• Start-Sterne (1 – 5)<br>
|
||||
• Landung-Sterne (1 – 5)<br>
|
||||
• G-Kraft-Durchschnitt<br>
|
||||
• Berührungen
|
||||
</td>
|
||||
|
||||
@@ -2366,7 +2366,7 @@ var HELI_ONBOARDING_STEPS = [
|
||||
+ '<text x="445" y="110" fill="#3d5165">+ Auswertung</text>'
|
||||
+ '</g>'
|
||||
+ '<defs><marker id="arrowg" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" fill="#5a8a5e"/></marker></defs>'
|
||||
+ '<text x="240" y="158" text-anchor="middle" font-size="9" fill="#3d5165" font-style="italic">~ 5–8 Minuten pro Einsatz</text>'
|
||||
+ '<text x="240" y="158" text-anchor="middle" font-size="9" fill="#3d5165" font-style="italic">~ 5 – 8 Minuten pro Einsatz</text>'
|
||||
+ '</svg>',
|
||||
text: 'Jede Mission besteht aus <b>5 Phasen</b>:<ul>'
|
||||
+ '<li><b>📋 Auftrag wählen</b> — wir bekommen drei Einsätze vorgeschlagen. Such einen aus.</li>'
|
||||
@@ -2470,7 +2470,7 @@ var HELI_ONBOARDING_STEPS = [
|
||||
+ '<br><br><ul>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="vogelschlag"><b>🦅 Vögel (Vogelschlag)</b></span> — gefährlich für Rotor und Cockpitscheibe. Besonders über Seen (Möwen), bei Dämmerung (Zugvögel) und an Berghängen (Greifvögel auf Aufwinden). Bei Sichtung kurz Höhe oder Kurs ändern.</li>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="luftverkehr"><b>✈ Anderer Luftverkehr</b></span> — andere Helis, Flugzeuge, Drohnen, Segelflieger, Paragleiter. Abstand halten über <span class="heli-glossar-term" data-glossar="tower">Funk</span> und Sicht. Als Notarzt-Heli haben wir Vorflugrecht, andere müssen ausweichen.</li>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="gewitter-flug"><b>⛈ Gewitter</b></span> — lebensgefährlich für Helis (Sturmböen, Hagel, Sicht-Verlust, Blitz). Mindestens <b>10–15 km Abstand</b> halten. Bei plötzlichem Gewitter: sofort landen, Patient später holen.</li>'
|
||||
+ '<li><span class="heli-glossar-term" data-glossar="gewitter-flug"><b>⛈ Gewitter</b></span> — lebensgefährlich für Helis (Sturmböen, Hagel, Sicht-Verlust, Blitz). Mindestens <b>10 – 15 km Abstand</b> halten. Bei plötzlichem Gewitter: sofort landen, Patient später holen.</li>'
|
||||
+ '</ul>'
|
||||
+ '<br><b>Tipp:</b> Klick auf jeden der unterstrichenen Begriffe — Marlene erklärt sie dir kurz. Im <b>📖 Glossar</b> findest du die ausführlichen Versionen.'
|
||||
},
|
||||
@@ -2496,11 +2496,11 @@ var HELI_ONBOARDING_STEPS = [
|
||||
+ '<text x="390" y="118" font-size="8" fill="#3d5165">Landezone frei</text>'
|
||||
// Mittelwert-Pfeil
|
||||
+ '<path d="M 240 135 L 240 148" stroke="#c97a3f" stroke-width="2" marker-end="url(#arrowo)"/>'
|
||||
+ '<text x="240" y="158" font-weight="800" fill="#c97a3f">⌀ Gesamtbewertung 1–5 ★</text>'
|
||||
+ '<text x="240" y="158" font-weight="800" fill="#c97a3f">⌀ Gesamtbewertung 1 – 5 ★</text>'
|
||||
+ '</g>'
|
||||
+ '<defs><marker id="arrowo" viewBox="0 0 10 10" refX="8" refY="5" markerWidth="6" markerHeight="6" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" fill="#c97a3f"/></marker></defs>'
|
||||
+ '</svg>',
|
||||
text: 'Wir bewerten drei Bereiche: <b>📍 Routenplanung</b>, <b>🛫 Start</b>, <b>🛬 Landung</b> — jeweils 1–5 Sterne. Aus dem Mittelwert ergibt sich deine Gesamtbewertung.'
|
||||
text: 'Wir bewerten drei Bereiche: <b>📍 Routenplanung</b>, <b>🛫 Start</b>, <b>🛬 Landung</b> — jeweils 1 – 5 Sterne. Aus dem Mittelwert ergibt sich deine Gesamtbewertung.'
|
||||
+ '<br><br><b>Und wenn du Fehler machst?</b> Keine Sorge — ich sitze ja neben dir. Bei der Routenplanung darfst du <b>15 falsche Wegpunkt-Klicks</b> ausprobieren. Bei mehr greife ich ein und plane den Rest. Beim Start oder bei der Landung übernehme ich, wenn ein Manöver zu riskant wird. <b>Den Patient bringen wir in jedem Fall sicher ins Krankenhaus</b> — du sammelst nur weniger Sterne und kannst es im nächsten Einsatz selbst besser machen.'
|
||||
+ '<br><br>📍 Diese Einschulung kannst du übrigens jederzeit oben über den <b>❓ Spielhilfe</b>-Button nochmal aufrufen. Und die <b>📍 Übersichtskarte</b> ist deine beste Vorbereitung — schau dir Stützpunkte, Städte und Berge vorher in Ruhe an.'
|
||||
+ '<br><br>Bereit? Such dir deinen ersten Einsatz aus. 💪'
|
||||
|
||||
@@ -1131,7 +1131,7 @@
|
||||
mastH: 30 + Math.random() * 12
|
||||
});
|
||||
}
|
||||
// 2–3 große Segelschiffe mit hohem Mast (echtes Hindernis)
|
||||
// 2 – 3 große Segelschiffe mit hohem Mast (echtes Hindernis)
|
||||
const tall = 2 + Math.floor(Math.random() * 2);
|
||||
for (let i = 0; i < tall; i++) {
|
||||
let x;
|
||||
@@ -1168,7 +1168,7 @@
|
||||
const segStart = segmentStarts[segIdx], segEnd = segmentEnds[segIdx];
|
||||
const zoneW = 220;
|
||||
const zoneX = segStart + 40 + Math.random() * (segEnd - segStart - zoneW - 80);
|
||||
// Unfallstelle 100–160 px vor oder hinter der Landezone — aber im selben Segment
|
||||
// Unfallstelle 100 – 160 px vor oder hinter der Landezone — aber im selben Segment
|
||||
let crashX = zoneX + zoneW/2 + (Math.random() < 0.5 ? -1 : 1) * (110 + Math.random()*40);
|
||||
crashX = Math.max(segStart + 60, Math.min(segEnd - 60, crashX));
|
||||
// Gaffer im naheren Umfeld der Landezone — sie laufen durchgehend in
|
||||
@@ -3508,7 +3508,7 @@
|
||||
else if (sinkRate > 40) { lzR=74; lzG=124; lzB=78; lzLabel='GUTES TEMPO'; }
|
||||
else { lzLabel='ANFLUG — TIEFER'; }
|
||||
}
|
||||
// Landezone deutlich heller (Alpha 0.65–1.0, voller Farbton statt gedaempft)
|
||||
// Landezone deutlich heller (Alpha 0.65 – 1.0, voller Farbton statt gedaempft)
|
||||
ctx.fillStyle = `rgba(${lzR},${lzG},${lzB},${0.65 + 0.35 * blink})`;
|
||||
ctx.fillRect(lzSx, GROUND_Y - 22, lz.w, 22);
|
||||
ctx.strokeStyle = `rgba(255,255,255,1.0)`;
|
||||
@@ -3988,7 +3988,7 @@
|
||||
state._fuelTrack.lastFuel = h.fuel;
|
||||
state._fuelTrack.lastT = state.t;
|
||||
}
|
||||
// Balken: 0..12 l/min (typisch 4–6, Vollschub bis ~10), mit Mindestbreite 4%
|
||||
// Balken: 0..12 l/min (typisch 4 – 6, Vollschub bis ~10), mit Mindestbreite 4%
|
||||
const lpm = state._fuelLitersPerMin || 0;
|
||||
const fr = document.getElementById('fFuelRate');
|
||||
const vr = document.getElementById('vFuelRate');
|
||||
|
||||
@@ -290,7 +290,7 @@ var ROUTES = [
|
||||
waypoints:['hohenems','dornbirn','egg','bezau','au','schroecken','warth','riezlern'],
|
||||
desc:'Einsatz im Kleinwalsertal. Das Tal ist nur von Deutschland oder per Luft erreichbar — eine der anspruchsvollsten Routen Vorarlbergs.', reason:'Funktionale Exklave — Luftweg einzige österreichische Verbindung', region:'vlbg'},
|
||||
|
||||
// === TIROL-ROUTEN (31–60) ===
|
||||
// === TIROL-ROUTEN (31 – 60) ===
|
||||
// Von C1 Innsbruck
|
||||
{id:31, name:'Innsbruck → Sölden (Skiunfall)', start:'innsbruck_c1', end:'skiunfall_soelden', difficulty:'medium', region:'tirol',
|
||||
waypoints:['innsbruck_c1','telfs','oetz','soelden','skiunfall_soelden'],
|
||||
|
||||
Reference in New Issue
Block a user