BurningTimesAi/공유/기획/FirstRising/맵/tools/prop_tour.sh

74 lines
3.1 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# 맵을 돌며 새 소품이 모인 자리를 찍고 물리 점검을 한다. bash prop_tour.sh <꼬리표> [맵 이름 ...] (Forest = 로비 숲 맵)
# Entry 에서 Play → 로비 → (Forest 면 그대로) 필드 이동으로 맵마다: 준비 기다림 → 물리 점검(phys_audit) → 시작 자리 + 새 소품 자리 촬영 → 에디터 로그 점검
SP="C:/Users/sw/AppData/Local/Temp/claude/E--BurningTimes/3562a2c1-e88a-4143-b7ec-e74c317778d8/scratchpad"
source "$SP/bt.sh"
export PYTHONIOENCODING=utf-8
TAG="${1:-p}"; shift
MAPS="${@:-Forest Graveyard RuinedKeep SpiderCave PlagueCatacomb HarborExecution ScorchedDesert}"
SHOTS="${SHOTS:-5}"
st
python "$SP/logscan.py" mark
unity command clear_console --project-path "$P" --format json --no-banner >/dev/null 2>&1
unity command editor_play --project-path "$P" --format json --no-banner 2>&1 | grep -E '"success"' | head -1
for i in $(seq 1 40); do
sleep 3
r=$(ev lobby_ready 2>&1 | head -1)
case "$r" in *"scene=Lobby"*"player=True"*"config=True"*) echo "ready $i"; break;; esac
done
sleep 6
for m in $MAPS; do
if [ "$m" != "Forest" ]; then
ev travel go "$m" | grep -o "go=[A-Za-z]*"
ok=""
for k in $(seq 1 60); do
sleep 2
s=$(ev travel state 2>&1 | head -1)
case "$s" in *"traveling=False"*"current=$m/"*"player=True"*) ok="1"; break;; esac
done
sleep 8
echo "[$m] ${ok:+OK} $(ev travel state | grep -o 'characters=[0-9]*\|pos=([^)]*)' | tr '\n' ' ')"
printf "x" > "$SP/eval/args.txt"
J=$(unity command eval_file --file "$SP/eval/phys_audit.cs" --project-path "$P" --detach --format json --no-banner 2>&1 | grep -o '"jobId": *"[a-f0-9]*"' | grep -o '[a-f0-9]\{32\}')
unity job wait "$J" --project-path "$P" --timeout 120 --format json --no-banner 2>&1 | python -c "
import sys, json
raw = sys.stdin.read()
try:
d = json.loads(raw)
except Exception:
print(raw[:600]); sys.exit(0)
def find(o):
if isinstance(o, dict):
for k, v in o.items():
if k == 'result' and isinstance(v, str) and len(v) > 10: return v
f = find(v)
if f: return f
if isinstance(o, list):
for v in o:
f = find(v)
if f: return f
print(find(d) or json.dumps(d, ensure_ascii=False)[:900])
"
else
echo "[Forest] $(ev travel state | grep -o 'characters=[0-9]*\|pos=([^)]*)' | tr '\n' ' ')"
fi
ev shot_cam "prop_${m}_${TAG}_0start" >/dev/null
python "$SP/shot_spots.py" "$m" "$SHOTS" > "$SP/spots.txt"
while read -r n x z names; do
if [ "$m" = "Forest" ]; then
# 숲 맵은 플레이어 둘레만 밝다 — 플레이어를 옮겨 놓고 게임 카메라로 찍는다
ev player_move "$x" "$z" >/dev/null
sleep 3
ev shot_cam "prop_${m}_${TAG}_${n}" >/dev/null
else
ev shot_at "prop_${m}_${TAG}_${n}" "$x" "$z" >/dev/null
fi
echo " shot $n ($x, $z) $names"
done < "$SP/spots.txt"
python "$SP/logscan.py" scan "after-$m"
done
unity command editor_stop --project-path "$P" --format json --no-banner 2>&1 | grep -E '"success"' | head -1
sleep 6
st
python "$SP/logscan.py" scan "prop-tour-$TAG"