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:
@@ -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()
|
||||
|
||||
@@ -165,7 +165,7 @@ func _ready() -> void:
|
||||
await frames(3)
|
||||
var fast := OS.get_environment("DINGER_FAST") != ""
|
||||
var suite := [test_menu_und_regeln, test_gamepad_menue, test_booster, test_deckbau, test_gegnerauswahl, test_einstellungen,
|
||||
test_erfolge, test_kampagne, test_werkstatt, test_sprache, test_anleitung, test_anleitung2, test_herausforderung,
|
||||
test_erfolge, test_kampagne, test_werkstatt, test_sprache, test_anleitung, test_anleitung2,
|
||||
test_kampf_fortsetzen, test_gamepad_deckbau, test_deckcode, test_elementbooster]
|
||||
if not fast:
|
||||
suite += [test_kampf.bind(2, 3), test_kampf_abbrechen]
|
||||
@@ -695,26 +695,6 @@ func test_profil_zuruecksetzen() -> void:
|
||||
check(Profile.load_or_new(SAVE).coins == Profile.START_COINS, "zurückgesetzt gespeichert")
|
||||
|
||||
|
||||
func test_herausforderung() -> void:
|
||||
await click(find_button("Herausforderung"))
|
||||
var scr = screen()
|
||||
check(scr is ChallengeScreen, "Herausforderung geöffnet")
|
||||
var ch := Challenge.current()
|
||||
var allowed := Challenge.deck_allowed(ch, main.profile.deck_cards()) == ""
|
||||
check(find_button("Antreten").disabled == not allowed, "Antreten je nach Deck")
|
||||
await shot("28_herausforderung")
|
||||
if allowed:
|
||||
await click(find_button("Antreten"))
|
||||
var b = screen()
|
||||
check(b is BattleScreen and b.challenge == ch and b.game.opponents.size() == ch.n_opp, "Herausforderungskampf")
|
||||
var everyone: String = ch.rules.get("everyone_perk", "")
|
||||
check(everyone == "" or b.game.players.all(func(p): return everyone in p.perks), "Regel gilt für alle")
|
||||
await give_up()
|
||||
else:
|
||||
await click(find_button("Zurück"))
|
||||
check(screen() is MenuScreen, "zurück im Menü")
|
||||
|
||||
|
||||
func test_sprache() -> void:
|
||||
await click(find_button("Einstellungen"))
|
||||
var scr = screen()
|
||||
|
||||
Reference in New Issue
Block a user