update
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
class_name Profile
|
||||
extends RefCounted
|
||||
## Spielstand: Sammlung, Münzen, Decks, Staub, Booster, Statistik, Tagesaufgabe, Einstellungen.
|
||||
## Spielstand: Sammlung, Münzen, Decks, Staub, Booster, Kartenstatistik (für Deckstärke und Schwierigkeit), Tagesaufgabe, Einstellungen.
|
||||
|
||||
const SAVE_VERSION := 5
|
||||
const PITY_BOOSTERS := 20 # danach ist eine mythische Karte garantiert
|
||||
@@ -20,7 +20,7 @@ const DIFFICULTIES := {
|
||||
"normal": {"name": "Normal", "factor": 1.0, "reward": 1.0, "smart": true, "tier": ""},
|
||||
"schwer": {"name": "Schwer", "factor": 1.2, "reward": 1.5, "smart": true, "tier": "schwer"},
|
||||
}
|
||||
# Werkstatt: Zerlegen bringt Staub, Herstellen kostet Staub.
|
||||
# Sammlung: Zerlegen bringt Staub, Herstellen kostet Staub.
|
||||
const DUST_DISMANTLE := {"gewöhnlich": 5, "selten": 20, "episch": 100, "legendär": 400, "mythisch": 1600}
|
||||
const DUST_CRAFT := {"gewöhnlich": 40, "selten": 100, "episch": 400, "legendär": 1600, "mythisch": 3200}
|
||||
|
||||
@@ -53,9 +53,7 @@ var settings := {"volume": 0.8, "music": 0.5, "ai_speed": 1.0, "animations": tru
|
||||
var notices: Array[String] = [] # Meldungen für die Oberfläche (Tagesaufgabe, Fortschritt)
|
||||
var card_stats := {} # id -> {"played", "games", "wins"}
|
||||
var booster_since_mythic := 0
|
||||
var tutorial_done := false
|
||||
var perk := "" # gewähltes eigenes Merkmal (nach Kapitel 1)
|
||||
var tutorial2_done := false
|
||||
var records := {"streak": 0, "best_streak": 0, "fastest_win": 0, "loss_streak": 0, "margins": []}
|
||||
|
||||
## Das aktive Deck (Kartenliste des gewählten Slots).
|
||||
@@ -151,7 +149,6 @@ static func from_dict(d: Dictionary) -> Profile:
|
||||
var st = d.card_stats[cid]
|
||||
p.card_stats[cid] = {"played": int(st.get("played", 0)), "games": int(st.get("games", 0)), "wins": int(st.get("wins", 0))}
|
||||
p.booster_since_mythic = int(d.get("booster_since_mythic", 0))
|
||||
p.tutorial_done = bool(d.get("tutorial_done", false))
|
||||
if version >= 5:
|
||||
p.perk = str(d.get("perk", ""))
|
||||
if not Game.PERKS.has(p.perk):
|
||||
@@ -160,7 +157,6 @@ static func from_dict(d: Dictionary) -> Profile:
|
||||
p.records = {"streak": int(rc.get("streak", 0)), "best_streak": int(rc.get("best_streak", 0)),
|
||||
"fastest_win": int(rc.get("fastest_win", 0)), "loss_streak": int(rc.get("loss_streak", 0)),
|
||||
"margins": Array(rc.get("margins", [])).map(func(m): return int(m))}
|
||||
p.tutorial2_done = bool(d.get("tutorial2_done", false))
|
||||
return p
|
||||
|
||||
|
||||
@@ -169,8 +165,8 @@ func to_dict() -> Dictionary:
|
||||
"decks": decks, "active_deck": active_deck,
|
||||
"stats": stats, "campaign_stage": campaign_stage,
|
||||
"daily": daily, "settings": settings, "card_stats": card_stats,
|
||||
"booster_since_mythic": booster_since_mythic, "tutorial_done": tutorial_done,
|
||||
"perk": perk, "records": records, "tutorial2_done": tutorial2_done}
|
||||
"booster_since_mythic": booster_since_mythic,
|
||||
"perk": perk, "records": records}
|
||||
|
||||
|
||||
## Speichert und sichert den vorherigen Stand als .bak.
|
||||
@@ -252,18 +248,6 @@ func autofill_deck(slot: int) -> String:
|
||||
return "" if ok[0] else ok[1]
|
||||
|
||||
|
||||
## Bestenliste: Karten mit den meisten Siegen (mindestens eine Partie).
|
||||
func top_cards(n: int) -> Array:
|
||||
var rows := []
|
||||
for cid in card_stats:
|
||||
var st: Dictionary = card_stats[cid]
|
||||
if st.games > 0:
|
||||
rows.append({"card": Cards.by_id(cid), "games": st.games, "wins": st.wins, "played": st.played,
|
||||
"rate": float(st.wins) / st.games})
|
||||
rows.sort_custom(func(a, b): return a.wins > b.wins or (a.wins == b.wins and a.rate > b.rate))
|
||||
return rows.slice(0, n)
|
||||
|
||||
|
||||
func owned_cards() -> Array:
|
||||
return Cards.all().filter(func(c): return collection.get(c.id, 0) > 0)
|
||||
|
||||
@@ -276,7 +260,7 @@ func distinct_owned() -> int:
|
||||
return n
|
||||
|
||||
|
||||
# --- Werkstatt --------------------------------------------------------------------
|
||||
# --- Zerlegen und Herstellen ------------------------------------------------------
|
||||
|
||||
## Zerlegt n Kopien in Staub. Gibt "" zurück oder eine Fehlermeldung.
|
||||
func dismantle(cid: String, n: int = 1) -> String:
|
||||
@@ -528,26 +512,6 @@ func perk_unlocked() -> bool:
|
||||
return campaign_stage >= Campaign.STAGES.size()
|
||||
|
||||
|
||||
## Schreibt Statistik als CSV (Kartenwerte und Gesamtzahlen), z. B. für Spieltests.
|
||||
func export_stats(path: String) -> String:
|
||||
var f := FileAccess.open(path, FileAccess.WRITE)
|
||||
if f == null:
|
||||
return "Datei nicht schreibbar"
|
||||
f.store_line("karte;seltenheit;gespielt;partien;siege")
|
||||
for cid in card_stats:
|
||||
var st: Dictionary = card_stats[cid]
|
||||
var c := Cards.by_id(cid)
|
||||
f.store_line("%s;%s;%d;%d;%d" % [c.name, c.rarity, st.played, st.games, st.wins])
|
||||
f.store_line("")
|
||||
f.store_line("kaempfe;%d" % stats.games)
|
||||
f.store_line("siege;%d" % stats.wins)
|
||||
f.store_line("booster;%d" % stats.boosters)
|
||||
f.store_line("beste_serie;%d" % records.best_streak)
|
||||
f.store_line("schnellster_sieg;%d" % records.fastest_win)
|
||||
f.close()
|
||||
return ""
|
||||
|
||||
|
||||
static func today() -> String:
|
||||
return today_override if today_override != "" else Time.get_date_string_from_system()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user