This commit is contained in:
team3
2026-09-16 17:55:28 +02:00
parent 9800c614bb
commit a0597110bd
17 changed files with 652 additions and 278 deletions

View File

@@ -25,6 +25,8 @@ var dice_start := START_DICE
## Nur für `make sim`; fünfzig Partien in Sekunden statt Minuten.
var simulation := false
var runde := 0 ## laufende Rundennummer, für Anzeige und Messung
var ausgeschieden: Array = [] ## Plätze in der Reihenfolge ihres Ausscheidens
var cfg_start: Dictionary = {} ## Startaufstellung, fürs Nochmal
var rng := RandomNumberGenerator.new()
var seats: Array = [] ## [{peer, name, ai, count, alive}]
@@ -67,6 +69,7 @@ func _ready() -> void:
func setup(cfg: Dictionary) -> void:
cfg_start = cfg.duplicate(true)
DiceAI.stufe = int(cfg.get("stufe", 1))
seats.clear()
if cfg.has("seats"):
@@ -83,8 +86,11 @@ func setup(cfg: Dictionary) -> void:
for p in peers:
seats.append({"peer": int(p), "name": String(cfg.names[p]), "ai": false,
"count": dice, "alive": true, "verwaist": false})
var bots: Array = cfg.get("bots", [])
for i in int(cfg.ai):
seats.append({"peer": 0, "name": "Bot %d" % (i + 1), "ai": true,
var b: Dictionary = bots[i] if i < bots.size() else {}
seats.append({"peer": 0, "name": String(b.get("name", "Bot %d" % (i + 1))), "ai": true,
"stufe": int(b.get("stufe", DiceAI.stufe)),
"count": dice, "alive": true, "verwaist": false})
# Der Spielserver spielt nicht mit und bekommt deshalb keinen Platz.
@@ -108,6 +114,7 @@ func setup(cfg: Dictionary) -> void:
hud.challenge_pressed.connect(_on_challenge_pressed)
hud.exact_pressed.connect(_on_exact_pressed)
hud.rematch_pressed.connect(_on_rematch)
hud.karte_pressed.connect(_on_karte)
hud.booster_chosen.connect(_on_booster_chosen)
hud.quit_pressed.connect(_on_quit)
hud.pause_changed.connect(_on_pause_changed)
@@ -209,6 +216,7 @@ func _host_loop() -> void:
winner = s.name
banner = "%s gewinnt" % winner
_log(banner)
Kampagne.ergebnis(seats, ausgeschieden)
_push_state()
@@ -433,6 +441,7 @@ func _phase_bid() -> Dictionary:
await _sleep(1.1)
# Erst planen, dann passend dazu eine Münze werfen. Die kann die
# Lage ändern - also danach noch einmal entscheiden.
DiceAI.stufe = int(seats[turn].get("stufe", DiceAI.stufe))
var a := DiceAI.choose_action(host_values[turn], _total_dice(), bid,
must_bid.get(turn, false), rng, _bot_wissen(turn))
if await _bot_muenze(turn, a):
@@ -788,7 +797,19 @@ func _on_rematch() -> void:
for s in seats:
if s.ai:
bots += 1
Net.rematch = {"name": Net.player_name, "ai": bots, "stufe": DiceAI.stufe}
var kap := ""
if Kampagne.kampagnenpartie and cfg_start.get("bots", []).size() > 0:
kap = String(cfg_start.bots[0].name)
Net.rematch = {"name": Net.player_name, "ai": bots, "stufe": int(cfg_start.get("stufe", 1)),
"bots": cfg_start.get("bots", []), "kampagne": kap}
_on_quit()
## Zurück auf die Seekarte: das frisch geladene Menü zeigt sie sofort.
func _on_karte() -> void:
if _quitting:
return
Kampagne.zur_karte = true
_on_quit()