Files
Viano-Core/tests/clientless/test_adventure_intent_fallbacks.py
T
Nico 7b4994400b
GCC PCH / build (push) Canceled after 0s
clang PCH / build (push) Canceled after 0s
Stabilize grouped instance intent transitions
2026-10-31 22:13:39 +01:00

39 lines
1.7 KiB
Python

"""Guard the two fallback invariants that previously caused live intent loops."""
from pathlib import Path
root = Path(__file__).resolve().parents[2]
source = (root / "src/server/game/World/AdventureBehaviorMgr.cpp").read_text()
start = source.index("void AdventureBehaviorMgr::Fallback(")
end = source.index("void AdventureBehaviorMgr::ResetMicro(", start)
fallback = source[start:end]
instance_guard = fallback.index("r.Instance.Stage==AdventureInstancePolicy::Phase::Travel")
ordinary_reselection = fallback.index("r.Tried.insert(r.Location)")
assert instance_guard < ordinary_reselection
assert "FinishInstance(player,r)" not in fallback[instance_guard:ordinary_reselection]
assert "INSTANCE_TRAVEL_RETRY" in fallback[instance_guard:ordinary_reselection]
assert "r.Instance.Location" in fallback[instance_guard:ordinary_reselection]
follower_guard = fallback.index("sAdventureGroupMgr->BotLed(player)")
assert follower_guard < ordinary_reselection
follower_hold = fallback[follower_guard:ordinary_reselection]
assert "r.GroupOverride" in follower_hold
assert "r.Dirty=false" in follower_hold
assert "GROUP_MEMBER_FALLBACK_HOLD" in follower_hold
protect_start = source.index("bool AdventureBehaviorMgr::ProtectGroupLeave(")
protect_end = source.index("void AdventureBehaviorMgr::InterruptForInteraction(", protect_start)
protection = source[protect_start:protect_end]
for invariant in (
'r.Intent=="groupformation"',
'r.WantedIntent=="groupformation"',
"r.Gathering",
"r.Departure.Active(now)",
"r.State==Phase::Switching",
"r.State==Phase::Handover",
):
assert invariant in protection
print("Instance visit retention, inherited group-target hold and formation leave protection passed.")