ハイパーグリッドへのテレポートができません。

ハイパーグリッドへのテレポートができません。

- Shinobar Martinek の投稿
返信数: 10

最近の出来事なのか、ずっと前からなのか、JOGから他グリッドへのテレポートが困難になっています。

できる場合とできない場合が判然としませんが、少なくとも5月5日14時現在、JOG Center Sim にあるハイパーグリッドあんないエリアにあるTP看板は、どれもテレポートに失敗します。また、以前に集めていたランドマークでテレポートしようとしても、JOG内へのTPはできるが、HGのLMで他グリッドへのTPができません。

Shinobar Annex に少し 他グリッドへのTP看板があります。これでTPできるもの、できるときがときどきあります。LMを使ってのTPもできる場合と、できない場合があります。

Shinobar Martinek への返信

Re: ハイパーグリッドへのテレポートができません。

- Shinobar Martinek の投稿

brezza land にもHGへのTP看板がいくつかあり、これらはTPできるので、どうやら JOG Center Sim だけの問題みたいです。

Shinobar Martinek への返信

Re: ハイパーグリッドへのテレポートができません。

- Iseki Fumikazu の投稿

テレポート先のリージョンを見つけるところで,配列の添え字の範囲例外を起こしているようなのですが....

2016-05-05 14:52:32,127 ERROR (STP:Util:15) - OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule [ENTITY TRANSFER MODULE]: Exception on teleport of ab Resident from <140.8004, 166.6968, 29.46057>@JOG Center Sim to <321.7834, 49.00615, 29.46057>@(not found): Index was outside the bounds of the array. at System.Collections.Generic.Dictionary`2+ValueCollection+Enumerator[TKey,TValue].MoveNext () <0x422376f0 + 0x00041> in <filename unknown>:0
  at OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.RegionCache.GetRegionByPosition (Int32 x, Int32 y) <0x42237230 + 0x0018f> in <filename unknown>:0
  at OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.LocalGridServicesConnector.GetRegionByPosition (UUID scopeID, Int32 x, Int32 y) <0x42236a40 + 0x000cb> in <filename unknown>:0
  at OpenSim.Region.CoreModules.ServiceConnectorsOut.Grid.RemoteGridServicesConnector.GetRegionByPosition (UUID scopeID, Int32 x, Int32 y) <0x42235af0 + 0x000ff> in <filename unknown>:0
  at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.GetRegionContainingWorldLocation (IGridService pGridService, UUID pScopeID, Double px, Double py, UInt32 pSizeHint) <0x4fcc4ef0 + 0x002a7> in <filename unknown>:0
  at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.GetRegionContainingWorldLocation (IGridService pGridService, UUID pScopeID, Double px, Double py) <0x4fcc4e90 + 0x0004f> in <filename unknown>:0
  at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.GetTeleportDestinationRegion (IGridService gridService, UUID scope, UInt64 regionHandle, OpenMetaverse.Vector3& position) <0x4fcc4c50 + 0x00117> in <filename unknown>:0
  at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.TeleportAgentToDifferentRegion (OpenSim.Region.Framework.Scenes.ScenePresence sp, UInt64 regionHandle, Vector3 position, Vector3 lookAt, UInt32 teleportFlags, OpenSim.Services.Interfaces.GridRegion& finalDestination, IClientAPI client) <0x4fcc4600 + 0x000db> in <filename unknown>:0
  at OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule.Teleport (OpenSim.Region.Framework.Scenes.ScenePresence sp, UInt64 regionHandle, Vector3 position, Vector3 lookAt, UInt32 teleportFlags, IClientAPI client) <0x4fcc3170 + 0x004eb> in <filename unknown>:0

 

例外発生関数は GetRegionByPosition (Int32 x, Int32 y) ですよね.

        public GridRegion GetRegionByPosition(int x, int y)
        {
            // do actual search by position
            // not the best, but this will not hold that many regions
            GridRegion foundRegion = null;
            foreach(GridRegion r in m_neighbours.Values)
            {
                if (x >= r.RegionLocX && x < r.RegionLocX + r.RegionSizeX
                     && y >= r.RegionLocY && y < r.RegionLocY + r.RegionSizeY)
                {
                    foundRegion = r;
                    break;
                }
            }

            return foundRegion;
        }

でもこれって,foreach なのになぜに範囲例外になるんだ???

mono のバグ?

 

Iseki Fumikazu への返信

Re: ハイパーグリッドへのテレポートができません。

- Shinobar Martinek の投稿

エラーの冒頭に

from <140.8004, 166.6968, 29.46057>@JOG Center Sim to <321.7834, 49.00615, 29.46057>@(not found)

とあるから、行き先リージョンが見つかっていないのが一義的な原因ではないですか。

Shinobar Martinek への返信

Re: ハイパーグリッドへのテレポートができません。

- Iseki Fumikazu の投稿

エラーが起こったので,(not found) と表示されていると解釈しました.

今は大丈夫みたいなんですが.(何も操作はやっていないです)

どうでしょう? 

Iseki Fumikazu への返信

Re: ハイパーグリッドへのテレポートができません。

- Iseki Fumikazu の投稿

エラー出てますね.

私が試したときは,行けたのに?

 

Iseki Fumikazu への返信

Re: ハイパーグリッドへのテレポートができません。

- Shinobar Martinek の投稿

5月5日22:30現在で、しのぐりやOSGトップなどへはTPできましたが、外部グリッド内の特定リージョン、たとえば OSGのLani Mall などの看板から(Mapから)TPしようとすると internal error が出ます。このLani Mall へLMではTPできました。

Shinobar Martinek への返信

Re: ハイパーグリッドへのテレポートができません。

- Iseki Fumikazu の投稿

OSG は試していませんでした.

ソースコードに lock() を入れてみたので,また試してみてください.

Iseki Fumikazu への返信

Re: ハイパーグリッドへのテレポートができません。

- Shinobar Martinek の投稿
> ソースコードに lock() を入れてみたので,また試してみてください.

おお〜!ほとんどのところにTPできるようになりました。一部飛べないところはありますが、先方の問題でしょう。5月6日0:30ごろテスト。

 

Shinobar Martinek への返信

Re: ハイパーグリッドへのテレポートができません。

- Iseki Fumikazu の投稿

検証,ありがとうございます.

もうちょっと様子見して,大丈夫そうなら全SIMにパッチを当てます.

Iseki Fumikazu への返信

Re: ハイパーグリッドへのテレポートができません。

- Iseki Fumikazu の投稿

マルチスレッド なので,foreach している最中に m_neighbours.Values が書き換わると,範囲例外を起こす可能性がありますね.

lock を噛ましてみます.