<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FCode_Map%2FScenePresence</id>
	<title>OpenSimulator Internals/Code Map/ScenePresence - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://osimdev.org/wiki/index.php?action=history&amp;feed=atom&amp;title=OpenSimulator_Internals%2FCode_Map%2FScenePresence"/>
	<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Code_Map/ScenePresence&amp;action=history"/>
	<updated>2026-08-04T15:40:15Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Code_Map/ScenePresence&amp;diff=90&amp;oldid=prev</id>
		<title>Jwbshaw: first</title>
		<link rel="alternate" type="text/html" href="http://osimdev.org/wiki/index.php?title=OpenSimulator_Internals/Code_Map/ScenePresence&amp;diff=90&amp;oldid=prev"/>
		<updated>2026-07-07T13:17:18Z</updated>

		<summary type="html">&lt;p&gt;first&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= OpenSimulator Internals/Code Map/ScenePresence =&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
&lt;br /&gt;
 OpenSim/Region/Framework/Scenes/ScenePresence.cs&lt;br /&gt;
&lt;br /&gt;
One ScenePresence instance exists per agent per region. It represents the avatar -- whether root (avatar is here) or child (avatar is elsewhere, this is a listening post for interest management). ScenePresence implements IScenePresence and EntityBase.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Lifecycle States ==&lt;br /&gt;
&lt;br /&gt;
Governed by ScenePresenceStateMachine. The critical flag for most code paths is IsChildAgent (bool).&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! State !! IsChildAgent !! Description&lt;br /&gt;
|-&lt;br /&gt;
| Child || true || Pre-seeded in neighbouring region. Tracks position updates, no physics, no full scene state.&lt;br /&gt;
|-&lt;br /&gt;
| Root || false || Avatar is present in this region. Full physics, full scene state, heartbeat participation.&lt;br /&gt;
|-&lt;br /&gt;
| Deleted || -- || IsDeleted set. Dispose() called.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Transition from child to root happens in MakeRootAgent(), called from CompleteMovement(). Transition from root to child happens in MakeChildAgent(), called by EntityTransferModule on departure.&lt;br /&gt;
&lt;br /&gt;
See [[OpenSimulator Internals/Walkthroughs/Avatar Rez In Region]] for the full transition sequence on login.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Constructor ==&lt;br /&gt;
&lt;br /&gt;
 ScenePresence(IClientAPI client, Scene world, AvatarAppearance appearance, PresenceType type)&lt;br /&gt;
&lt;br /&gt;
# Sets IsChildAgent = true.&lt;br /&gt;
# Sets draw distance from client.StartFar, clamped to region MaxDrawDistance / DefaultDrawDistance.&lt;br /&gt;
# Sets RegionHandle, ControllingClient, name fields, UUID, LocalId.&lt;br /&gt;
# Fetches UserAccount -- sets m_userFlags and GodController god level. If no account found, god level 0.&lt;br /&gt;
# Initialises ScenePresenceAnimator and MovementAnimationOverrides.&lt;br /&gt;
# Sets AbsolutePosition from ControllingClient.StartPos.&lt;br /&gt;
# Disables child updates and reprioritization (m_childUpdatesBusy = true, m_reprioritizationBusy = true) -- re-enabled after CompleteMovement.&lt;br /&gt;
# Calls AdjustKnownSeeds() -- initialises m_knownChildRegions from CapsModule.&lt;br /&gt;
# Calls RegisterToClientEvents() -- see Event Wiring below.&lt;br /&gt;
# Sets Appearance from passed AvatarAppearance.&lt;br /&gt;
# Constructs ScenePresenceStateMachine.&lt;br /&gt;
# Calls ControllingClient.RefreshGroupMembership().&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Event Wiring ==&lt;br /&gt;
&lt;br /&gt;
RegisterToClientEvents() hooks the following on ControllingClient:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Event !! Handler&lt;br /&gt;
|-&lt;br /&gt;
| OnCompleteMovementToRegion || CompleteMovement()&lt;br /&gt;
|-&lt;br /&gt;
| OnAgentUpdate || HandleAgentUpdate()&lt;br /&gt;
|-&lt;br /&gt;
| OnAgentCameraUpdate || HandleAgentCamerasUpdate()&lt;br /&gt;
|-&lt;br /&gt;
| OnAgentRequestSit || HandleAgentRequestSit()&lt;br /&gt;
|-&lt;br /&gt;
| OnAgentSit || HandleAgentSit()&lt;br /&gt;
|-&lt;br /&gt;
| OnSetAlwaysRun || HandleSetAlwaysRun()&lt;br /&gt;
|-&lt;br /&gt;
| OnStartAnim || HandleStartAnim()&lt;br /&gt;
|-&lt;br /&gt;
| OnStopAnim || HandleStopAnim()&lt;br /&gt;
|-&lt;br /&gt;
| OnChangeAnim || avnHandleChangeAnim()&lt;br /&gt;
|-&lt;br /&gt;
| OnForceReleaseControls || HandleForceReleaseControls()&lt;br /&gt;
|-&lt;br /&gt;
| OnAutoPilotGo || MoveToTargetHandle()&lt;br /&gt;
|-&lt;br /&gt;
| OnRegionHandShakeReply || RegionHandShakeReply()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
All removed in RemoveClientEvents() on disposal.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== MakeRootAgent() ==&lt;br /&gt;
&lt;br /&gt;
 private bool MakeRootAgent(Vector3 pos, bool isFlying, ref Vector3 lookat)&lt;br /&gt;
&lt;br /&gt;
Called only from CompleteMovement(). Returns false if already root.&lt;br /&gt;
&lt;br /&gt;
# Acquires m_completeMovementLock.&lt;br /&gt;
# Handles pending sit (ParentUUID set): resolves prim, re-seats avatar.&lt;br /&gt;
# Sets IsChildAgent = false.&lt;br /&gt;
# Updates RegionHandle.&lt;br /&gt;
# Fires EventManager.TriggerSetRootAgentScene().&lt;br /&gt;
# If not sitting:&lt;br /&gt;
#* Calls CheckAndAdjustLandingPoint_OS() or _SL() -- adjusts position for telehubs, parcel landing points, ban lines.&lt;br /&gt;
#* Clamps position to region bounds.&lt;br /&gt;
#* Raises Z to ground height + avatar half-height.&lt;br /&gt;
#* If ViaLogin or ViaLocation flags: raycasts downward from PhysSearchHeight (300f) using RayFilterFlags.PrimsNonPhantomAgents to find surface, avoids placing avatar inside objects.&lt;br /&gt;
#* Sets AbsolutePosition.&lt;br /&gt;
#* Calls AddToPhysicalScene(isFlying).&lt;br /&gt;
# Calls m_scene.SwapRootAgentCount(false, IsNPC).&lt;br /&gt;
# Resets MovementFlags = 0.&lt;br /&gt;
# Updates circuit: AuthenticateHandler.UpdateAgentChildStatus(circuitCode, false).&lt;br /&gt;
# Fires EventManager.TriggerOnMakeRootAgent(this).&lt;br /&gt;
&lt;br /&gt;
Physics position search constants:&lt;br /&gt;
* PhysSearchHeight = 300f&lt;br /&gt;
* PhysMinSkipGap = 20f&lt;br /&gt;
* PhysSkipGapDelta = 30f&lt;br /&gt;
* PhysNumberCollisions = 30&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== MakeChildAgent() ==&lt;br /&gt;
&lt;br /&gt;
 public void MakeChildAgent(ulong newRegionHandle)&lt;br /&gt;
&lt;br /&gt;
Called by EntityTransferModule when avatar departs.&lt;br /&gt;
&lt;br /&gt;
# Resets m_updateAgentReceivedAfterTransferEvent.&lt;br /&gt;
# Clears group information and cross-update flags.&lt;br /&gt;
# Unhooks RegionHeartbeatEnd.&lt;br /&gt;
# Sets IsChildAgent = true.&lt;br /&gt;
# Calls m_scene.SwapRootAgentCount(true, IsNPC).&lt;br /&gt;
# Calls RemoveFromPhysicalScene().&lt;br /&gt;
# Clears parcel tracking.&lt;br /&gt;
# Sends kill packets to root presences that don&amp;#039;t know the new region (won&amp;#039;t receive the avatar as child).&lt;br /&gt;
# Updates circuit: AuthenticateHandler.UpdateAgentChildStatus(circuitCode, true).&lt;br /&gt;
# Fires EventManager.TriggerOnMakeChildAgent(this).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== CompleteMovement() ==&lt;br /&gt;
&lt;br /&gt;
 public void CompleteMovement(IClientAPI client, bool openChildAgents)&lt;br /&gt;
&lt;br /&gt;
Triggered by OnCompleteMovementToRegion event from viewer.&lt;br /&gt;
&lt;br /&gt;
* For teleports/crossings: calls WaitForUpdateAgent() -- waits up to 10 seconds for source region&amp;#039;s UpdateAgent to arrive (sets m_originRegionID via CopyFrom()).&lt;br /&gt;
* For real login (IsRealLogin() true): skips WaitForUpdateAgent().&lt;br /&gt;
* Calls MakeRootAgent().&lt;br /&gt;
* Sends RegionHandshake if not a crossing.&lt;br /&gt;
* Calls ControllingClient.MoveAgentIntoRegion().&lt;br /&gt;
* Validates baked texture cache (AvatarFactory.ValidateBakedTextureCache()); queues appearance save if invalid.&lt;br /&gt;
* Sends initial avatar data to all presences.&lt;br /&gt;
* Sends appearance and animations to self and others.&lt;br /&gt;
* For real login: calls Scene.AttachmentsModule.RezAttachments(this).&lt;br /&gt;
* For crossing with carried attachments: restarts scripts, sends attachment updates.&lt;br /&gt;
* For login: calls IFriendsModule.SendFriendsOnlineIfNeeded().&lt;br /&gt;
* Hooks RegionHeartbeatEnd for per-frame processing.&lt;br /&gt;
&lt;br /&gt;
IsRealLogin() check:&lt;br /&gt;
&lt;br /&gt;
 (teleportFlags &amp;amp; (ViaLogin | ViaHGLogin)) == ViaLogin&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== RegionHandShakeReply() / SendInitialData() ==&lt;br /&gt;
&lt;br /&gt;
 public void RegionHandShakeReply(IClientAPI client)&lt;br /&gt;
 private void SendInitialData()&lt;br /&gt;
&lt;br /&gt;
RegionHandShakeReply() sets NeedInitialData = 2 on receipt of viewer handshake reply.&lt;br /&gt;
&lt;br /&gt;
SendInitialData() is called from Update() when NeedInitialData &amp;gt; 0. It waits for:&lt;br /&gt;
* ViewerFlags.SentSeeds to be set (caps seeds sent to viewer).&lt;br /&gt;
* NeedInitialData incremented to 6 (several heartbeat frames for viewer to process seeds).&lt;br /&gt;
&lt;br /&gt;
Then fires async (Util.FireAndForget):&lt;br /&gt;
* Releases source region via SimulationService.ReleaseAgent() if callback URI present.&lt;br /&gt;
* Calls IEntityTransferModule.CloseOldChildAgents().&lt;br /&gt;
* Sends terrain layer data if not a teleport.&lt;br /&gt;
* Sends parcel info.&lt;br /&gt;
* Sends full avatar updates for all other root presences (SendOtherAgentsAvatarFullToMe()).&lt;br /&gt;
* Sends ObjectUpdate packets for all scene objects -- full updates or cache probes depending on ViewerFlags.&lt;br /&gt;
* Calls IEntityTransferModule.EnableChildAgents() -- seeds neighbouring regions.&lt;br /&gt;
* Sets m_childUpdatesBusy = false.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Update() ==&lt;br /&gt;
&lt;br /&gt;
Called each heartbeat frame from Scene.Update() for every ScenePresence.&lt;br /&gt;
&lt;br /&gt;
* If NeedInitialData &amp;gt; 0: calls SendInitialData() and returns.&lt;br /&gt;
* If IsChildAgent or IsInTransit: returns.&lt;br /&gt;
* Calls CheckForBorderCrossing().&lt;br /&gt;
* Handles MoveToTarget autopilot updates.&lt;br /&gt;
* Handles delayed stop.&lt;br /&gt;
* If avatar size changed: sends avatar data to all agents.&lt;br /&gt;
* If position, velocity, rotation, or collision plane changed beyond tolerance: calls SendTerseUpdateToAllClients().&lt;br /&gt;
* Calls CheckForSignificantMovement().&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Physical Scene ==&lt;br /&gt;
&lt;br /&gt;
AddToPhysicalScene(bool isFlying):&lt;br /&gt;
* Calls PhysicsScene.AddAvatar() -- creates PhysicsActor.&lt;br /&gt;
* Wires pa.OnCollisionUpdate → PhysicsCollisionUpdate().&lt;br /&gt;
* Wires pa.OnOutOfBounds → OutOfBoundsCall().&lt;br /&gt;
* Sets PhysicsActor = pa.&lt;br /&gt;
&lt;br /&gt;
RemoveFromPhysicalScene():&lt;br /&gt;
* Interlocked.Exchange to null (thread-safe).&lt;br /&gt;
* Unwires collision and OOB events.&lt;br /&gt;
* Calls PhysicsScene.RemoveAvatar().&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Neighbour Region Tracking ==&lt;br /&gt;
&lt;br /&gt;
m_knownChildRegions: Dictionary&amp;lt;ulong, string&amp;gt; -- regionHandle → seed cap URL.&lt;br /&gt;
m_knownChildRegionsSizeInfo: Dictionary&amp;lt;ulong, spRegionSizeInfo&amp;gt; -- regionHandle → (sizeX, sizeY).&lt;br /&gt;
&lt;br /&gt;
Key methods:&lt;br /&gt;
* AddNeighbourRegion() / RemoveNeighbourRegion()&lt;br /&gt;
* GetChildAgentsToClose() -- computes which neighbours to close on departure, based on IsOutsideView() distance check (currently hardcoded 255 rather than RegionViewDistance).&lt;br /&gt;
* CloseChildAgents() -- sends CloseChildAgentConnections to computed list, drops cap seeds.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Sitting ==&lt;br /&gt;
&lt;br /&gt;
HandleAgentRequestSit() → SendSitResponse() → HandleAgentSit() / PhysicsSit().&lt;br /&gt;
&lt;br /&gt;
PhysicsSit() delegates to PhysicsScene.SitAvatar() with callback PhysicsSitResponse(). Falls back to legacy sit if physics engine doesn&amp;#039;t support it.&lt;br /&gt;
&lt;br /&gt;
On sit:&lt;br /&gt;
* RemoveFromPhysicalScene().&lt;br /&gt;
* ParentID = part.LocalId, ParentPart = part.&lt;br /&gt;
* part.AddSittingAvatar(this).&lt;br /&gt;
* Animator.SetMovementAnimations(&amp;quot;SIT&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
StandUp():&lt;br /&gt;
* Computes world position from sit offset and prim rotation.&lt;br /&gt;
* Clears ParentID, ParentPart.&lt;br /&gt;
* Calls AddToPhysicalScene() if addPhys true.&lt;br /&gt;
* part.RemoveSittingAvatar(this).&lt;br /&gt;
* Animator.SetMovementAnimations(&amp;quot;STAND&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
SIT_TARGET_ADJUSTMENT = (0, 0, 0.4f) -- empirically derived fudge factor matching SL behaviour (Mantis 1716).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Parcel Visibility ==&lt;br /&gt;
&lt;br /&gt;
ParcelHideThisAvatar: true if current parcel has SeeAVs = false.&lt;br /&gt;
&lt;br /&gt;
On parcel crossing (currentParcelUUID setter → ParcelCrossCheck()):&lt;br /&gt;
* Computes which presences need kill packets (now hidden from them or they from us).&lt;br /&gt;
* Computes which presences need view packets (now visible).&lt;br /&gt;
* Sends kills and views accordingly.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Child Agent Data Transfer ==&lt;br /&gt;
&lt;br /&gt;
CopyTo(AgentData, isCrossUpdate): serialises full avatar state for transfer to destination region -- position, velocity, camera, appearance, animations, attachments, script controls, group info, friends online cache.&lt;br /&gt;
&lt;br /&gt;
CopyFrom(AgentData): deserialises on destination side. Sets m_originRegionID, which signals WaitForUpdateAgent() to unblock CompleteMovement().&lt;br /&gt;
&lt;br /&gt;
UpdateChildAgent(AgentData): called on destination when source fires UpdateAgent. Calls CopyFrom() then sets m_updateAgentReceivedAfterTransferEvent.&lt;br /&gt;
&lt;br /&gt;
UpdateChildAgent(AgentPosition): lightweight position-only update for child agent interest management. Adjusts position by region offset, updates throttles with distance-based scaling factor.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Movement ==&lt;br /&gt;
&lt;br /&gt;
HandleAgentUpdate(): main movement handler. Processes AgentUpdateArgs from viewer each packet.&lt;br /&gt;
* Drops updates where IsChildAgent or IsInTransit.&lt;br /&gt;
* Updates DrawDistance, HideTitle, MuteCollisions, mouse state, State byte.&lt;br /&gt;
* Computes movement vector from control flags.&lt;br /&gt;
* Calls AddNewMovement() → sets PhysicsActor.TargetVelocity.&lt;br /&gt;
* Calls Animator.UpdateMovementAnimations().&lt;br /&gt;
* Calls SendControlsToScripts() -- fires EventManager.TriggerControlEvent for scripted control listeners.&lt;br /&gt;
&lt;br /&gt;
Autopilot: MoveToTarget() / HandleMoveToTargetUpdate() -- PID-style movement toward a target position, used by llMoveToTarget() and parcel enforcement.&lt;br /&gt;
&lt;br /&gt;
Border crossing detection: CheckForBorderCrossing() -- projects position by velocity * FrameTime, if outside region bounds calls CrossToNewRegion() → Scene.CrossAgentToNewRegion().&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Attachment Management ==&lt;br /&gt;
&lt;br /&gt;
m_attachments: List&amp;lt;SceneObjectGroup&amp;gt;, locked on AttachmentsSyncLock.&lt;br /&gt;
&lt;br /&gt;
AddAttachment() / RemoveAttachment() / GetAttachments() / ClearAttachments().&lt;br /&gt;
&lt;br /&gt;
SendAttachmentsToAgentNF(): sends terse update then full updates for all attachments to a specific presence.&lt;br /&gt;
SendAttachmentScheduleUpdate(): sends pending flagged updates to self and all visible presences.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Animation ==&lt;br /&gt;
&lt;br /&gt;
Animator: ScenePresenceAnimator -- manages animation state machine.&lt;br /&gt;
Overrides: MovementAnimationOverrides -- server-side animation override pairs.&lt;br /&gt;
&lt;br /&gt;
HandleStartAnim() / HandleStopAnim() / avnHandleChangeAnim(): viewer-initiated animation control.&lt;br /&gt;
RegionHeartbeatEnd hook: calls Animator.UpdateMovementAnimations() every 2 frames when root and not sitting.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Significant Movement ==&lt;br /&gt;
&lt;br /&gt;
CheckForSignificantMovement():&lt;br /&gt;
* MOVEMENT (0.25f sq) threshold: fires EventManager.TriggerOnClientMovement().&lt;br /&gt;
* SIGNIFICANT_MOVEMENT (16.0f sq) threshold: fires EventManager.TriggerSignificantClientMovement().&lt;br /&gt;
* CHILDAGENTSCHECK_MOVEMENT (1024f sq / 32m) threshold: calls IEntityTransferModule.EnableChildAgents() to update neighbour seeds.&lt;br /&gt;
* CHILDUPDATES_MOVEMENT (100f sq): sends AgentPosition updates to known child regions.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Key Constants ==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Constant !! Value !! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| MOVEMENT || 0.25f || Minimum movement to trigger client movement event (sq distance)&lt;br /&gt;
|-&lt;br /&gt;
| SIGNIFICANT_MOVEMENT || 16.0f || Minimum movement to trigger significant movement event (sq distance)&lt;br /&gt;
|-&lt;br /&gt;
| CHILDUPDATES_MOVEMENT || 100.0f || Minimum movement to send child agent position update (sq distance)&lt;br /&gt;
|-&lt;br /&gt;
| CHILDAGENTSCHECK_MOVEMENT || 1024.0f || Minimum movement to recheck neighbour child agents (sq distance, ~32m)&lt;br /&gt;
|-&lt;br /&gt;
| CHILDUPDATES_TIME || 2000f || Minimum ms between child agent updates&lt;br /&gt;
|-&lt;br /&gt;
| SIT_TARGET_ADJUSTMENT || (0,0,0.4f) || Sit target fudge factor matching SL (Mantis 1716)&lt;br /&gt;
|-&lt;br /&gt;
| PhysSearchHeight || 300f || Ray cast start height for spawn position search&lt;br /&gt;
|-&lt;br /&gt;
| PhysMinSkipGap || 20f || Minimum gap between surfaces in spawn position search&lt;br /&gt;
|-&lt;br /&gt;
| AgentControlNormalVel || 4.096f || Normal walk speed multiplier&lt;br /&gt;
|-&lt;br /&gt;
| AgentControlMidVel || 0.6 * 4.096f || Slow walk speed multiplier&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
* IncomingAttechments() typo in Scene.cs line 2976 and AttachmentsModule.cs line 384 (Mantis pending).&lt;br /&gt;
* GetChildAgentsToClose() uses hardcoded 255 for view distance rather than RegionViewDistance -- comment in source acknowledges this.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/Scene]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/LLClientView]]&lt;br /&gt;
* [[OpenSimulator Internals/Code Map/LLUDP]]&lt;br /&gt;
* [[OpenSimulator Internals/Walkthroughs/Avatar Rez In Region]]&lt;br /&gt;
* [[OpenSimulator Internals/Walkthroughs/Avatar Transfer Between Regions]]&lt;br /&gt;
* [[OpenSimulator Internals/Walkthroughs/Avatar Logs Out]]&lt;/div&gt;</summary>
		<author><name>Jwbshaw</name></author>
	</entry>
</feed>