#!/usr/bin/env bash # Игровая проверка режима «Гонка» на локальном сервере: 2 клиента-бота (+ третий, который заходит в разгар круга 1, # наблюдает, участвует в круге 2 и выходит посреди него). Окно не открывается. # tools/test/race_game_test.sh [рабочая_папка=/tmp/race_game] # MAP=race2 — то же для карты «Гонка 2» (бот проводит игроков через ворота телепортами: проверяются правила). # Печатает факты и итог «ПРОВЕРКА ПРОЙДЕНА / ПРОВАЛЕНА». Порт сервера 9080 должен быть свободен. # Настоящий рекорд (user://race_best.cfg) не трогается: рекорд ботов идёт в файлы в рабочей папке. set -uo pipefail SRC="$(cd "$(dirname "$0")/../.." && pwd)" W="${1:-/tmp/race_game}" MAP="${MAP:-race}" if [ "$MAP" = race2 ]; then SCENE=res://maps/race2/race2.tscn; MARG="--map=race2"; else SCENE=res://maps/race/race.tscn; MARG=""; fi rm -rf "$W"; mkdir -p "$W" "$SRC/tools/test/make_test_server.sh" "$W/server" >/dev/null "$SRC/tools/test/make_test_project.sh" "$W/project" >/dev/null sed -i 's#^Bot="\*res://tools/test/bot.gd"#Bot="*res://tools/test/bot.gd"\nRaceBot="*res://tools/test/race_bot.gd"#' "$W/project/project.godot" sed -i 's#^config/name="world2"#config/name="world2-racetest"#' "$W/project/project.godot" (cd "$W/project" && godot --headless --import --path . >/dev/null 2>&1) XDG_DATA_HOME="$W/xdg" godot --headless --path "$W/server" > "$W/server.log" 2>&1 & # рейтинг сервера — в рабочую папку SERVER=$! sleep 2 run() { # имя, остальные аргументы бота local n="$1"; shift timeout 420 godot --headless --path "$W/project" $SCENE -- --client $MARG --race-log --race-best="$W/best_$n.cfg" --profile="$W/prof_$n.cfg" --name="$n" "$@" > "$W/$n.log" 2>&1 & } run A --expect=2 --rounds=2 --die-at-gate=3 PA=$! run B --expect=2 --rounds=2 --delay=2.0 --fall-at-gate=2 PB=$! sleep 40 # круг 1 в разгаре (отсчёт 6 с + бег) run C --expect=2 --rounds=1 --quit-race-time=12 PC=$! sleep 5; ps -eo pid,args | grep '[g]odot' | cut -c1-200 > "$W/ps_after_C.txt" wait $PA $PB $PC kill $SERVER 2>/dev/null echo "логи: $W/{A,B,C,server}.log" python3 "$SRC/tools/test/race_game_check.py" "$W"