1: 2009-08-31 (月) 17:53:53 iseki  |
現: 2009-08-31 (月) 18:16:43 iseki  |
- | *** [#nd8db2af] | + | *** SIMの境界で,座標な不正になった場合に,強制的に ''emergencyPos'' [すなわち(128,128,128)] へ移動させられる件 [#v18a1226] |
- | // Fumi.Iseki | + | - OpenSim/Region/Framework/Scenes/ScenePresence.cs |
- | if (pos.X < 0 || pos.X >= (int)Constants.RegionSize || pos.Y < 0 || pos.Y >= (int)Constants.RegionSize || pos.Z < 0) { | + | - MakeRootAgent() |
- | m_log.WarnFormat("[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}.", pos, Name, UUID); | + | if (pos.X < 0 || pos.X >= (int)Constants.RegionSize || pos.Y < 0 || pos.Y >= (int)Constants.RegionSize || pos.Z < 0) { |
| + | m_log.WarnFormat("[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}.", pos, Name, UUID); |
| + | |
| + | if (pos.X < 0) pos.X = 0; |
| + | else if (pos.X >= (int)Constants.RegionSize) pos.X = (int)Constants.RegionSize - 1; |
| + | if (pos.Y < 0) pos.Y = 0; |
| + | else if (pos.Y >= (int)Constants.RegionSize) pos.Y = (int)Constants.RegionSize - 1; |
| + | if (pos.Z < 0) pos.Z = 0; |
| + | } |
| + | /* |
| + | if (pos.X < 0 || pos.X >= (int)Constants.RegionSize || pos.Y < 0 || pos.Y >= (int)Constants.RegionSize || pos.Z < 0) |
| + | { |
| + | Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); |
| + | |
| + | m_log.WarnFormat( |
| + | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", |
| + | pos, Name, UUID, emergencyPos); |
| + | |
| + | pos = emergencyPos; |
| + | } |
| + | */ |
| | | |
- | if (pos.X < 0) pos.X = 0; | |
- | else if (pos.X >= (int)Constants.RegionSize) pos.X = (int)Constants.RegionSize - 1; | |
- | if (pos.Y < 0) pos.Y = 0; | |
- | else if (pos.Y >= (int)Constants.RegionSize) pos.Y = (int)Constants.RegionSize - 1; | |
- | if (pos.Z < 0) pos.Z = 0; | |
- | } | |
- | /* | |
- | if (pos.X < 0 || pos.X >= (int)Constants.RegionSize || pos.Y < 0 || pos.Y >= (int)Constants.RegionSize || pos.Z < 0) | |
- | { | |
- | Vector3 emergencyPos = new Vector3(((int)Constants.RegionSize * 0.5f), ((int)Constants.RegionSize * 0.5f), 128); | |
| | | |
- | m_log.WarnFormat( | + | *** 上記の様に変更した場合,CrossToNewRegion() でエラーが出る場合があるので修正する. [#j48d41ec] |
- | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Substituting {3}", | + | - OpenSim/Region/Framework/Scenes/ScenePresence.cs |
- | pos, Name, UUID, emergencyPos); | + | - CrossToNewRegion() |
- | | + | /// <summary> |
- | pos = emergencyPos; | + | /// Moves the agent outside the region bounds |
- | } | + | /// Tells neighbor region that we're crossing to it |
- | */ [#cf17a76c] | + | /// If the neighbor accepts, remove the agent's viewable avatar from this scene |
| + | /// set them to a child agent. |
| + | /// </summary> |
| + | protected void CrossToNewRegion() |
| + | { |
| + | // Fumi.Iseki |
| + | if (m_scene==null || m_physicsActor==null) return; |
| + | InTransit(); |
| + | m_scene.CrossAgentToNewRegion(this, m_physicsActor.Flying); |
| + | } |