Files
my-world/tools/test/race_game_test.sh
T
aibrashandClaude Sonnet 5.5 9130202a51 Карта Race: гонка на ногах по киберпанк-антиутопии, 8 игроков
- maps/race: трасса 633 м из Blender (три развилки: срез по контейнерам, каньон со стенами
  против нижней дороги, труба с лазерами против коридора), запечённый свет, небо, дождь, гул;
  фоновая песня (Ogg Vorbis, ~0,6 МБ) включается на «СТАРТ!»
- Правила (race_rules.gd): R — готов; когда готовы все — отсчёт 6 с, заморозка в слотах,
  ворота строго по порядку, сплиты, место, итоги, личный рекорд (user://race_best.cfg)
- Сеть: Net.submit_race / recv_race / race_event (RACE_READY, START, CP, FINISH, STATE).
  ВНИМАНИЕ: набор RPC изменён — клиент и сервер выкладываются вместе, старый клиент
  с новым сервером не работает (rpc node checksum failed)
- player.gd: input_frozen и place() для режимов карт; project.godot: действие ready (R)
- Портал RACE в хабе, пресет экспорта Race (include_filter для ресурсов, грузимых строкой)
- tools/test: двухклиентный тест гонки на локальном сервере, бот, облёт, проверка пакета
- README: правила гонки, события, проверки, заметки

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WxZo3ekR5m1af437Qzqwc1
2026-10-28 17:28:05 +05:00

36 lines
2.1 KiB
Bash
Executable File

#!/usr/bin/env bash
# Игровая проверка режима «Гонка» на локальном сервере: 2 клиента-бота (+ третий, который заходит в разгар круга 1,
# наблюдает, участвует в круге 2 и выходит посреди него). Окно не открывается.
# tools/test/race_game_test.sh [рабочая_папка=/tmp/race_game]
# Печатает факты и итог «ПРОВЕРКА ПРОЙДЕНА / ПРОВАЛЕНА». Порт сервера 9080 должен быть свободен.
# Настоящий рекорд (user://race_best.cfg) не трогается: рекорд ботов идёт в файлы в рабочей папке.
set -uo pipefail
SRC="$(cd "$(dirname "$0")/../.." && pwd)"
W="${1:-/tmp/race_game}"
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)
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" res://maps/race/race.tscn -- --client --race-log --race-best="$W/best_$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"