This commit is contained in:
team3
2026-09-16 15:04:02 +02:00
parent 3be22351a3
commit b9d6b115c0
23 changed files with 795 additions and 425 deletions

View File

@@ -16,7 +16,6 @@ var _code_datei := ""
func _ready() -> void:
Engine.time_scale = 8.0
_rng.randomize()
var args := OS.get_cmdline_user_args()
rolle = args[0]
@@ -33,7 +32,7 @@ func _lauf() -> void:
f.store_string(Net.room_code)
f.close()
await _warte(func(): return Net.lobby.size() >= 2, 80.0)
Net.request_start(1, 1)
Net.request_start(1, 1, 2)
else:
await _beitreten()
await _warte(func(): game = _find(get_tree().root, "Game"); return game != null, 120.0)
@@ -46,9 +45,9 @@ func _lauf() -> void:
var t := 0.0
var gewartet := 0.0
while t < 4400.0 and is_instance_valid(game) and game.phase != "over":
await get_tree().create_timer(0.2).timeout
t += 0.2
while t < 1400.0 and is_instance_valid(game) and game.phase != "over":
await get_tree().create_timer(0.1).timeout
t += 0.1
if not is_instance_valid(game):
break
if game.phase != _letzte_phase:
@@ -63,14 +62,14 @@ func _lauf() -> void:
if game.phase != "bid" or game.turn != me or not game.seats[me].alive:
gewartet = 0.0
continue
gewartet += 0.2
if gewartet < 0.6:
gewartet += 0.1
if gewartet < 0.2:
continue
var hand: Array = game.hand.get(me, [])
if not hand.is_empty() and (not BoosterDB.needs_bid(hand[0]) or not game.bid.is_empty()) and _rng.randf() < 0.7:
game._on_booster_chosen(hand[0], 0)
wuerfe += 1
await get_tree().create_timer(2.5).timeout
await get_tree().create_timer(0.4).timeout
if not is_instance_valid(game) or game.turn != me or game.phase != "bid":
continue
var total := 0
@@ -88,11 +87,22 @@ func _lauf() -> void:
game._on_exact_pressed()
genau += 1
zuege += 1
gewartet = -2.0
gewartet = -1.5
_pruef("%s: Partie endet über RPC (Runden=%d Züge=%d Würfe=%d Genau=%d)" % [rolle, runden, zuege, wuerfe, genau],
is_instance_valid(game) and game.phase == "over")
if rolle == "join":
_pruef("join: Wiedereinstieg hat geklappt", wieder_da)
# Nochmal: der Besitzer bittet darum, beide bekommen eine frische Partie.
var alt: Node = game
await get_tree().create_timer(0.5).timeout
if Net.is_owner:
Net.request_rematch()
var neu := await _warte(func(): game = _find(get_tree().root, "Game"); return game != null and game != alt, 20.0)
var laeuft := false
if neu:
laeuft = await _warte(func(): return game.phase == "bid" or game.phase == "roll", 20.0)
_pruef("%s: Nochmal im Netz bringt eine neue Partie (Platz %d)" % [rolle, game.local_seat if neu else -1],
neu and laeuft and game.local_seat >= 0)
if is_instance_valid(game):
print("%s: '%s'" % [rolle, game.banner])
for i in game.seats.size():
@@ -106,15 +116,19 @@ func _beitreten() -> void:
Net.join_room(FileAccess.get_file_as_string(_code_datei).strip_edges(), "Gast")
## Verbindung kappen, frisches Menü, mit demselben Namen wieder beitreten.
## Verbindung reisst ab (kein bewusstes Verlassen), frisches Menü, dann der
## Weg des Knopfs "Zurück in Raum XY".
func _wiederkommen() -> void:
var alter_platz: int = game.local_seat
var alte_zuege := zuege
Net.leave()
get_tree().change_scene_to_file("res://scenes/main.tscn")
await get_tree().create_timer(1.5).timeout
var code := Net.room_code
multiplayer.multiplayer_peer.close()
if Net.in_game:
Net._on_server_disconnected() # der Verlust-Handler, wie bei echtem Abbruch
await get_tree().create_timer(1.0).timeout
_pruef("join: Raum nach Abbruch gemerkt", Net.letzter_raum.get("code", "") == code)
game = null
await _beitreten()
Net.wieder_rein()
var ok := await _warte(func(): game = _find(get_tree().root, "Game"); return game != null, 60.0)
if not ok:
_pruef("join: nach Rückkehr kommt ein Spiel", false)