update
This commit is contained in:
@@ -26,6 +26,11 @@ func _lauf() -> void:
|
||||
game.must_bid.clear()
|
||||
# --- Genau-Treffer: Ansager verliert, Rufer bekommt einen
|
||||
game.must_bid.clear()
|
||||
# Der Rufer (Platz 1) liegt unter seiner Startzahl - nur dann gibt es den
|
||||
# Bonus. Erst wegnehmen, dann zählen: der entfernte Würfel könnte eine 3 sein.
|
||||
game.seats[1].count = 4
|
||||
game.host_values[1].pop_back()
|
||||
game.table.set_dice_count(1, 4)
|
||||
var n3: int = game._count_face(3)
|
||||
if n3 == 0:
|
||||
game._set_die(me, 0, 3)
|
||||
|
||||
@@ -38,6 +38,9 @@ func _lauf() -> void:
|
||||
game.hand[me] = ["count"]
|
||||
await game._do_play(me, "count", 0)
|
||||
_pruef("Zählen ohne Ansage abgelehnt", game.hand[me].has("count"))
|
||||
game.hand[me] = ["gain_die"]
|
||||
await game._do_play(me, "gain_die", 0)
|
||||
_pruef("Nachschub bei voller Startzahl abgelehnt", game.hand[me].has("gain_die") and game.seats[me].count == 5)
|
||||
|
||||
# --- Topf: Deckel und Übertrag
|
||||
game.topf.clear()
|
||||
|
||||
@@ -103,6 +103,9 @@ func _lauf() -> void:
|
||||
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)
|
||||
# Kurz bleiben: sonst schliesst der Raum, bevor der Server-Läufer die
|
||||
# neue Partie überhaupt gesehen hat.
|
||||
await get_tree().create_timer(1.5).timeout
|
||||
if is_instance_valid(game):
|
||||
print("%s: '%s'" % [rolle, game.banner])
|
||||
for i in game.seats.size():
|
||||
|
||||
@@ -6,34 +6,51 @@ var game: Node
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
# Es laufen zwei Räume zugleich. Jedes Spiel bekommt tempo 0, jedes Ende
|
||||
# wird gemeldet; nach dem zweiten Ende noch kurz auf die Nochmal-Partien warten.
|
||||
var t := 0.0
|
||||
var runden := 0
|
||||
var letzte := ""
|
||||
var zuletzt := "" # letzter gesehener Stand - die Clients gehen sofort,
|
||||
# dann räumt der Server den Raum ab, bevor wir gucken
|
||||
while t < 1500.0:
|
||||
var gesehen := {} # Spielknoten -> {runden, letzte}
|
||||
var enden := 0
|
||||
var nochmal := 0
|
||||
while t < 1500.0 and enden < 2:
|
||||
await get_tree().create_timer(0.2).timeout
|
||||
t += 0.2
|
||||
if game == null:
|
||||
game = _find(get_tree().root, "Game")
|
||||
if game != null:
|
||||
game.tempo = 0.0
|
||||
var raeume := get_tree().root.get_node_or_null("Main/Raeume")
|
||||
if raeume == null:
|
||||
continue
|
||||
if not is_instance_valid(game):
|
||||
break
|
||||
if game.phase != letzte:
|
||||
letzte = game.phase
|
||||
if letzte == "roll":
|
||||
runden += 1
|
||||
var staende: Array = game.seats.map(func(x): return "%s=%d" % [x.name, x.count])
|
||||
zuletzt = "%s '%s' Runden=%d %s" % [game.phase, game.banner, runden, staende]
|
||||
if game.phase == "over":
|
||||
break
|
||||
print("SERVER: Ende %s" % zuletzt)
|
||||
var alt: Node = game
|
||||
var neu := await _warte(func(): game = _find(get_tree().root, "Game"); return game != null and game != alt, 15.0)
|
||||
if neu:
|
||||
game.tempo = 0.0
|
||||
print("SERVER: Nochmal-Partie aufgebaut=%s" % neu)
|
||||
await get_tree().create_timer(15.0).timeout
|
||||
for raum in raeume.get_children():
|
||||
var g := raum.get_node_or_null("Container/Viewport/Game")
|
||||
if g == null:
|
||||
continue
|
||||
if not gesehen.has(g):
|
||||
gesehen[g] = {"runden": 0, "letzte": "", "raum": raum.name, "fertig": false}
|
||||
g.tempo = 0.0
|
||||
if gesehen.size() > 2:
|
||||
nochmal += 1
|
||||
var info: Dictionary = gesehen[g]
|
||||
if g.phase != info.letzte:
|
||||
info.letzte = g.phase
|
||||
if g.phase == "roll":
|
||||
info.runden += 1
|
||||
if g.phase == "over" and not info.fertig:
|
||||
info.fertig = true
|
||||
enden += 1
|
||||
var staende: Array = g.seats.map(func(x): return "%s=%d" % [x.name, x.count])
|
||||
print("SERVER: Raum %s Ende '%s' Runden=%d %s" % [raum.name, g.banner, info.runden, staende])
|
||||
# Die Nochmal-Partien leben nur kurz: die Clients prüfen sie und gehen,
|
||||
# dann schliesst der Raum. Also laufend schauen statt einmal am Ende.
|
||||
var w := 0.0
|
||||
while w < 8.0:
|
||||
await get_tree().create_timer(0.1).timeout
|
||||
w += 0.1
|
||||
var raeume2 := get_tree().root.get_node_or_null("Main/Raeume")
|
||||
if raeume2 == null:
|
||||
continue
|
||||
for raum in raeume2.get_children():
|
||||
var g := raum.get_node_or_null("Container/Viewport/Game")
|
||||
if g != null and not gesehen.has(g):
|
||||
gesehen[g] = {"runden": 0, "letzte": "", "raum": raum.name, "fertig": false}
|
||||
nochmal += 1
|
||||
print("SERVER: Räume gesehen=%d, Nochmal-Partien=%d" % [gesehen.size() - nochmal, nochmal])
|
||||
await get_tree().create_timer(10.0).timeout
|
||||
get_tree().quit()
|
||||
|
||||
@@ -24,12 +24,15 @@ starte logik 90
|
||||
starte genau 90
|
||||
starte nochmal 60
|
||||
starte bots 90 2
|
||||
rm -f "$TMP/code.txt"
|
||||
rm -f "$TMP/code.txt" "$TMP/code2.txt"
|
||||
starte mp_start:srv 200 server "$PORT"
|
||||
sleep 2
|
||||
# Zwei Räume auf demselben Server: die RPCs müssen je Raum getrennt bleiben.
|
||||
PIRATE_DICE_SERVER="ws://127.0.0.1:$PORT" starte mp_start:host 190 host "$TMP/code.txt"
|
||||
PIRATE_DICE_SERVER="ws://127.0.0.1:$PORT" starte mp_start:host2 190 host "$TMP/code2.txt"
|
||||
sleep 1
|
||||
PIRATE_DICE_SERVER="ws://127.0.0.1:$PORT" starte mp_start:join 190 join "$TMP/code.txt"
|
||||
PIRATE_DICE_SERVER="ws://127.0.0.1:$PORT" starte mp_start:join2 190 join "$TMP/code2.txt"
|
||||
|
||||
# Warten, aber bei Skriptfehlern sofort abbrechen.
|
||||
while :; do
|
||||
@@ -49,7 +52,7 @@ done
|
||||
wait 2>/dev/null
|
||||
|
||||
ergebnis=0
|
||||
for name in logik genau nochmal bots mp_start:host mp_start:join mp_start:srv; do
|
||||
for name in logik genau nochmal bots mp_start:host mp_start:join mp_start:host2 mp_start:join2 mp_start:srv; do
|
||||
log="$TMP/$name.log"
|
||||
echo "=== $name"
|
||||
grep -E "^(OK |FEHL|SERVER:| |TEST:)" "$log"
|
||||
|
||||
Reference in New Issue
Block a user