Erfolge entfernt, der Bildschirm zeigt nur noch Statistik
- Die dreizehn Erfolge samt Belohnungen, Meldungen und Spielstandfeld sind weg - Der bisherige Erfolgs-Bildschirm heißt Statistik und zeigt Kämpfe, Tagesaufgabe, Bestenliste, beste Karten und den CSV-Export Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QPgKvy5W9WRNFHjkm5QsHx
This commit is contained in:
@@ -93,7 +93,7 @@ func _initialize() -> void:
|
||||
test_ki_besser_als_gierig()
|
||||
test_ki_spiele_enden()
|
||||
test_spielstand_migration()
|
||||
test_erfolge_und_tagesaufgabe()
|
||||
test_tagesaufgabe()
|
||||
test_kampagne()
|
||||
test_fallen()
|
||||
test_ki_sieht_fallen_nicht()
|
||||
@@ -648,29 +648,25 @@ func test_spielstand_migration() -> void:
|
||||
var alt := {"coins": 300, "collection": {"f_kobold": 2, "unbekannt": 1}, "deck": ["f_kobold", "f_kobold"]}
|
||||
var p := Profile.from_dict(alt)
|
||||
check(p.coins == 300 and p.collection == {"f_kobold": 2} and p.deck.size() == 2, "Version 1 gelesen")
|
||||
check(p.stats.games == 0 and p.achievements.is_empty() and p.campaign_stage == 0, "Standardwerte ergänzt")
|
||||
check(p.stats.games == 0 and p.campaign_stage == 0, "Standardwerte ergänzt")
|
||||
check(p.settings.volume == 0.8 and p.settings.animations, "Einstellungen Standard")
|
||||
p.stats.wins = 3
|
||||
p.achievements.append("erster_sieg")
|
||||
p.campaign_stage = 2
|
||||
p.settings.volume = 0.3
|
||||
var d := p.to_dict()
|
||||
check(d.version == Profile.SAVE_VERSION, "Version gespeichert")
|
||||
var p2 := Profile.from_dict(JSON.parse_string(JSON.stringify(d)))
|
||||
check(p2.stats.wins == 3 and p2.achievements == ["erster_sieg"] and p2.campaign_stage == 2, "Version 2 gelesen")
|
||||
check(p2.stats.wins == 3 and p2.campaign_stage == 2, "Version 2 gelesen")
|
||||
check(is_equal_approx(p2.settings.volume, 0.3), "Einstellungen gelesen")
|
||||
|
||||
|
||||
func test_erfolge_und_tagesaufgabe() -> void:
|
||||
func test_tagesaufgabe() -> void:
|
||||
Profile.today_override = "2026-09-16"
|
||||
var p := Profile.starter()
|
||||
var coins := p.coins
|
||||
var reward := p.record_battle(true, 1, p.deck_cards())
|
||||
check(reward == Profile.REWARD_WIN[1], "Duell-Belohnung")
|
||||
check("erster_sieg" in p.achievements and "duellant" in p.achievements, "Erfolge Erster Sieg und Duellant")
|
||||
check(not ("tischherr" in p.achievements), "Herr des Tisches noch offen")
|
||||
check(p.coins == coins + reward + 100 + (p.daily_task().reward if p.daily.done else 0), "Münzen inklusive Erfolge")
|
||||
check(p.notices.size() >= 2, "Meldungen vorhanden")
|
||||
check(p.coins == coins + reward + (p.daily_task().reward if p.daily.done else 0), "Münzen verbucht")
|
||||
p.take_notices()
|
||||
check(p.notices.is_empty(), "Meldungen abgeholt")
|
||||
check(p.daily.date == "2026-09-16" and p.daily.task != "", "Tagesaufgabe gesetzt")
|
||||
@@ -690,14 +686,12 @@ func test_erfolge_und_tagesaufgabe() -> void:
|
||||
p.refresh_daily()
|
||||
check(p.daily.date == "2026-09-17" and not p.daily.done and p.daily.progress == 0, "neuer Tag, neue Aufgabe")
|
||||
Profile.today_override = ""
|
||||
# Mono-Deck-Erfolg
|
||||
var mono := []
|
||||
for cid in ["f_funke", "f_kobold", "f_wolf", "f_feuerball", "f_asche", "f_glutpfeil", "f_elementar"]:
|
||||
for i in 3:
|
||||
mono.append(Cards.by_id(cid))
|
||||
mono = mono.slice(0, 20)
|
||||
p.record_battle(true, 3, mono)
|
||||
check("elementarist" in p.achievements and "tischherr" in p.achievements, "Elementarist und Herr des Tisches")
|
||||
check(p.stats.wins == 3 and p.stats.wins_by_opp["1"] == 2, "Statistik")
|
||||
|
||||
|
||||
@@ -719,7 +713,7 @@ func test_kampagne() -> void:
|
||||
check(p.campaign_stage == 1 and reward == Profile.REWARD_LOSS, "Niederlage schaltet nichts frei")
|
||||
p.campaign_stage = 9
|
||||
p.record_battle(true, 5, p.deck_cards(), 9)
|
||||
check(p.campaign_stage == 10 and "kampagnenheld" in p.achievements, "Kampagne abgeschlossen")
|
||||
check(p.campaign_stage == 10, "Kampagne abgeschlossen")
|
||||
var sim := Game.new_battle_with(Profile.starter().deck_cards(), Campaign.opponents(0, r), r)
|
||||
var guard := 0
|
||||
while sim.winner == "" and guard < 300:
|
||||
@@ -1140,7 +1134,7 @@ func test_kapitel_zwei_und_merkmalwahl() -> void:
|
||||
check(g.human.perks == ["feuer_angriff"] and g.log.any(func(l): return l.begins_with("Du: Feuerwesen")), "eigenes Merkmal wirkt und steht im Verlauf")
|
||||
p.campaign_stage = 19
|
||||
p.record_battle(true, 5, p.deck_cards(), 19)
|
||||
check(p.campaign_stage == 20 and "elementmeister" in p.achievements, "Kapitel 2 abgeschlossen")
|
||||
check(p.campaign_stage == 20, "Kapitel 2 abgeschlossen")
|
||||
var v := Profile.from_dict(JSON.parse_string(JSON.stringify(p.to_dict())))
|
||||
check(v.perk == "feuer_angriff" and v.campaign_stage == 20, "Version 5 gelesen")
|
||||
|
||||
@@ -1163,7 +1157,6 @@ func test_bestenliste() -> void:
|
||||
check(p.records.streak == 0 and p.records.best_streak == 2, "Niederlage bricht die Serie")
|
||||
for i in 5:
|
||||
p.record_battle(true, 1, mono, -1, [], 10)
|
||||
check("serie" in p.achievements, "Siegesserie-Erfolg")
|
||||
var path := "user://test_statistik.csv"
|
||||
check(p.export_stats(path) == "", "Statistik exportiert")
|
||||
var text := FileAccess.get_file_as_string(path)
|
||||
|
||||
@@ -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_statistik, 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]
|
||||
@@ -202,13 +202,8 @@ func test_booster() -> void:
|
||||
var scr = screen()
|
||||
check(scr is BoosterScreen, "Boosterbildschirm")
|
||||
var coins: int = main.profile.coins
|
||||
var ach_before: int = main.profile.achievements.size()
|
||||
await click(scr.b_buy)
|
||||
var bonus := 0
|
||||
for a in Profile.ACHIEVEMENTS:
|
||||
if a.id in main.profile.achievements.slice(ach_before):
|
||||
bonus += a.reward
|
||||
check(main.profile.coins == coins - Profile.BOOSTER_COST + bonus, "Booster bezahlt (plus Erfolgsmünzen %d)" % bonus)
|
||||
check(main.profile.coins == coins - Profile.BOOSTER_COST, "Booster bezahlt")
|
||||
check(scr.cards.size() == 5 and scr.revealed.is_empty(), "5 verdeckte Karten")
|
||||
await shot("03_booster_zu")
|
||||
var backs: Array = scr.slots.get_children().filter(func(c): return c is BoosterScreen.CardBack)
|
||||
@@ -573,15 +568,15 @@ func test_einstellungen() -> void:
|
||||
check(screen() is MenuScreen, "zurück im Menü")
|
||||
|
||||
|
||||
func test_erfolge() -> void:
|
||||
await click(find_button("Erfolge"))
|
||||
check(screen() is AchievementsScreen, "Erfolge geöffnet")
|
||||
func test_statistik() -> void:
|
||||
await click(find_button("Statistik"))
|
||||
check(screen() is StatsScreen, "Statistik geöffnet")
|
||||
var csv := "user://statistik.csv"
|
||||
if FileAccess.file_exists(csv):
|
||||
DirAccess.remove_absolute(ProjectSettings.globalize_path(csv))
|
||||
await click(find_button("Statistik exportieren"))
|
||||
check(FileAccess.file_exists(csv) and "Gespeichert" in screen().export_label.text, "Statistik exportiert")
|
||||
await shot("14_erfolge")
|
||||
await shot("14_statistik")
|
||||
await click(find_button("Zurück"))
|
||||
check(screen() is MenuScreen, "zurück im Menü")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user