Null-guard AreaInstance in 6 more BVM appearance / movement broadcasts#184
Merged
Conversation
Same broadcast-loop pattern as PR #183, more sites in ScriptingCommands.bb: - BVM_SETACTORGENDER (broadcasts "G" appearance update) - BVM_SETACTORBEARD (broadcasts "D" appearance update) - BVM_SETACTORHAIR (broadcasts "D" appearance update) - BVM_ROTATEACTOR (broadcasts "R" repos update) - BVM_MOVEACTOR (broadcasts "M" repos update) - BVM_CREATEFLOATINGNUMBER (broadcasts floating-number to zone) All six share the AInstance.AreaInstance = Object.AreaInstance( Actor\ServerArea) then immediate A2.ActorInstance = AInstance\FirstInZone shape. A stale ServerArea (mid-warp, freed zone) crashed each on the next deref. Skip the broadcast on Null; the script-side state change still applies in-memory. Continues the AInstance-Null sweep from PRs #154 / #155 / #176 / #182 / #183. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CoreyRDean
added a commit
that referenced
this pull request
May 25, 2026
Closes the AInstance-Null sweep for ScriptingCommands.bb. Three sites remained unguarded after PR #184: - BVM_SETACTORCLOTHES (P_AppearanceUpdate "B") - BVM_SETACTORFACE (P_AppearanceUpdate "F") - BVM_SETACTORLEVEL (P_XPUpdate "L" level-up broadcast) Same pattern, same fix. With this PR, every `AInstance = Object.AreaInstance(...)` immediately followed by `A2 = AInstance\FirstInZone` is guarded across ScriptingCommands.bb. Verified by `grep -A 1 "AInstance.AreaInstance = Object" | grep -B 1 "A2 = AInstance"` returning no unguarded matches. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2 tasks
CoreyRDean
added a commit
that referenced
this pull request
May 25, 2026
Closes the AInstance-Null sweep for ServerNet.bb. Sites: - /me chat broadcast (line ~284, "* AI\Name$ Params$") - /players zone count (line ~399, "PlayersInZone N") - General chat broadcast (line ~555, "<Name$> message") - P_Jump broadcast (line ~930) - P_InventoryUpdate "P" (line ~1409, pickup-removal) - P_InventoryUpdate "D" (line ~1450, drop-broadcast) - SendEquippedUpdate (line ~2645, gear-change broadcast) Each was the same AInstance = Object.AreaInstance(...) / A2 = AInstance\FirstInZone shape. A stale ServerArea (mid-warp, freed zone) crashed the server on the next deref. Same recovery: skip the broadcast on Null. The state change already applies in-memory. Continues the AInstance-Null sweep across rcce2 (PRs #154 / #155 / #176 / #182 / #183 / #184 / #185 / #186). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Same broadcast-loop pattern as #183, more sites in
ScriptingCommands.bb:BVM_SETACTORGENDERP_AppearanceUpdate "G"BVM_SETACTORBEARDP_AppearanceUpdate "D"BVM_SETACTORHAIRP_AppearanceUpdate "D"BVM_ROTATEACTORP_RepositionActor "R"BVM_MOVEACTORP_RepositionActor "M"BVM_CREATEFLOATINGNUMBERP_FloatingNumberAll six share the same
AInstance = Object.AreaInstance(Actor\ServerArea)then immediateA2 = AInstance\FirstInZoneshape. A staleServerArea(mid-warp, freed zone) crashed each on the next deref.Skip the broadcast on Null; the script-side state change still applies in-memory.
Continues the AInstance-Null sweep from PRs #154 / #155 / #176 / #182 / #183.
Test plan
compile.bat -tbuilds Server / Client / GUE / Project Manager cleanly.🤖 Generated with Claude Code