Wöchentliche Herausforderung und die Netzwerk-Hinweise entfernt

- Challenge samt Bildschirm, Menüpunkt, Erfolg "Wochenheld" und Spielstandfeld entfernt;
  record_battle verliert den challenge-Parameter, die Bestenliste bleibt
- Lobby: Erklärzeile unter dem Titel weg, "KI-Gegner (nur Host)" heißt jetzt "KI-Gegner"

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QPgKvy5W9WRNFHjkm5QsHx
This commit is contained in:
Team3
2026-09-17 21:13:08 +02:00
parent 0f2dc22ef6
commit 43073351b0
14 changed files with 24 additions and 161 deletions

View File

@@ -108,7 +108,7 @@ func _initialize() -> void:
test_deck_umbenennen_und_auffuellen()
test_neue_fallen()
test_kapitel_zwei_und_merkmalwahl()
test_herausforderung_und_bestenliste()
test_bestenliste()
test_deckstaerke_und_schwierigkeit()
test_starter_gegen_passende_gegner()
test_kurve_statistik_vorschlag_verbesserung()
@@ -1145,32 +1145,19 @@ func test_kapitel_zwei_und_merkmalwahl() -> void:
check(v.perk == "feuer_angriff" and v.campaign_stage == 20, "Version 5 gelesen")
func test_herausforderung_und_bestenliste() -> void:
Profile.today_override = "2026-09-16"
var ch := Challenge.current()
check(ch.has("rules") and ch.n_opp >= 1, "Herausforderung der Woche")
var weeks := {}
for d in range(1, 43, 7):
Profile.today_override = "2026-%02d-%02d" % [1 + d / 28, 1 + d % 28]
weeks[Challenge.current().id] = true
check(weeks.size() >= 4, "Herausforderungen wechseln wöchentlich")
func test_bestenliste() -> void:
Profile.today_override = "2026-09-16"
var mono := []
for i in 20:
mono.append(Cards.by_id("w_reiter"))
check(Challenge.deck_allowed(Challenge.LIST[5], Profile.starter().deck_cards()) != "", "Reine Lehre lehnt Zwei-Element-Deck ab")
check(Challenge.deck_allowed(Challenge.LIST[5], mono) == "", "Mono-Deck erlaubt")
var r := RandomNumberGenerator.new()
r.seed = 4
var g := Game.new_battle(mono, 3, r, Challenge.LIST[0].rules)
check(g.players.all(func(p): return p.life == 20 and "start_energie" in p.perks), "Eile: 20 Leben und Startenergie für alle")
var g := Game.new_battle(mono, 3, r, {"everyone_perk": "start_energie", "start_life": 20})
check(g.players.all(func(p): return p.life == 20 and "start_energie" in p.perks), "Regelvariante: 20 Leben und Startenergie für alle")
check(g.players[0].max_energy == 3, "Startspieler hat 3 Energie")
var p := Profile.starter()
var coins := p.coins
var reward := p.record_battle(true, 3, mono, -1, [], 7, Challenge.LIST[0])
check(reward == Challenge.LIST[0].reward and p.challenge_week == Challenge.week() and "wochenheld" in p.achievements, "Herausforderung belohnt")
reward = p.record_battle(true, 3, mono, -1, [], 9, Challenge.LIST[0])
check(reward == Profile.REWARD_WIN[3], "nur einmal pro Woche")
p.record_battle(true, 3, mono, -1, [], 7)
p.record_battle(true, 3, mono, -1, [], 9)
check(p.records.streak == 2 and p.records.best_streak == 2 and p.records.fastest_win == 7, "Serie und schnellster Sieg")
p.record_battle(false, 1, mono, -1, [], 12)
check(p.records.streak == 0 and p.records.best_streak == 2, "Niederlage bricht die Serie")
@@ -1211,7 +1198,7 @@ func test_deckstaerke_und_schwierigkeit() -> void:
check(is_equal_approx(p.target_rating(), rs * 1.2) and p.difficulty().smart, "Schwer: 1,2-fach mit Vorausschau-KI")
p.settings.difficulty = "leicht"
check(not p.difficulty().smart and is_equal_approx(p.target_rating(), rs * 0.9), "Leicht: einfache KI, 0,9-fach")
var reward := p.record_battle(true, 1, starter, -1, [], 5, {}, p.difficulty().reward)
var reward := p.record_battle(true, 1, starter, -1, [], 5, p.difficulty().reward)
check(reward == int(round(Profile.REWARD_WIN[1] * 0.75)), "Leicht: weniger Münzen")
var v := Profile.from_dict(JSON.parse_string(JSON.stringify(p.to_dict())))
check(v.settings.difficulty == "leicht", "Schwierigkeit gespeichert")
@@ -1268,17 +1255,17 @@ func test_kurve_statistik_vorschlag_verbesserung() -> void:
var mono := starter
check(p.suggest_difficulty() == "", "kein Vorschlag am Anfang")
for i in 3:
p.record_battle(true, 1, mono, -1, [], 6, {}, 1.0, 4)
p.record_battle(true, 1, mono, -1, [], 6, 1.0, 4)
check(p.suggest_difficulty() == "", "drei knappe Siege: noch kein Vorschlag")
p.records.streak = 0
p.records.margins = []
for i in 3:
p.record_battle(true, 1, mono, -1, [], 6, {}, 1.0, 20)
p.record_battle(true, 1, mono, -1, [], 6, 1.0, 20)
check(p.suggest_difficulty() == "schwer" and p.notices.any(func(n): return n.begins_with("Tipp: 3 Siege")), "drei deutliche Siege: Schwer vorschlagen")
p.records.streak = 0
p.records.margins = []
for i in 5:
p.record_battle(true, 1, mono, -1, [], 6, {}, 1.0, 2)
p.record_battle(true, 1, mono, -1, [], 6, 1.0, 2)
check(p.suggest_difficulty() == "schwer" and p.records.margins.size() == 5, "fünf Siege egal wie knapp")
p.settings.difficulty = "schwer"
p.take_notices()