Fix repeated ActiveNano tick null reference for reflect aura
Reported evidence: 12:56:22–12:56:23 repeated Failed Ryan Nano Tick for Empowered Reactive Deflection Shield, NullReferenceException at ActiveNano.Tick line 325 -> PlayfieldInstance.HeartbeatPlayer line 800 in Newland Desert:0. Nearby Poke Eyes cast success and Unhandled function type ChangeEffect are not established causes. Scope: trace missing caster/target snapshot resolution for repeating nanos, reproduce the failure, preserve valid off-zone snapshot execution and gracefully handle unavailable identities without heartbeat exceptions. Validate nano regressions and engine build. User authorized committing and opening a pull request via /open-pr; deployment is not authorized. Acceptance: absent caster/target snapshot cannot throw each heartbeat; valid present and snapshotted off-zone casters still execute normally; skipped unavailable ticks retain duration/expiry behavior. Verified outcome: missing caster, missing target and missing both reproduce NullReferenceException in the original ActiveNano.Tick subject dereferences (checkout lines 324/325). A caster leaving the zone is not sufficient: a valid off-zone headless snapshot executes normally. PopulateCharacterTargets only captures identities currently resolvable in the playfield; ActiveNanoFlat restoration can likewise lack required entries. Tick now skips repeating effects when either required snapshot remains unavailable after resolution, preserving duration/expiry and the existing per-heartbeat population retry rather than fabricating caster stats. Five regressions pass, including live subject resolution and off-zone snapshot execution. Combined behavior-tree/ActiveNano suite passes 179 tests; PlayfieldEngine build and git diff --check pass. Committed as 3f67fbf66 on fix/npc-patrol-heartbeat-crash and pushed. Pull request #2564: https://git.project-rk.com/prk/engines/pulls/2564 (base develop). Ryan's actual persisted snapshot/deployed build was unavailable, so which subject is absent and how it became absent are unconfirmed; no live deployment performed. Unhandled ChangeEffect is a separate unsupported function warning and is not fixed here.
Checklist
2 of 2 complete- Reproduce missing caster/target ticking failure and verify safe resolution without breaking snapshot fallback or duration.
- Run relevant nano tests and PlayfieldEngine build.
- Area
- Project Rubi-Ka
- Project
- engines
- Kind
- Bug
- Task ID
tsk_6dxrdpw9tm- Updated