コード例 #1
0
ファイル: FriendsModule.cs プロジェクト: BogusCurry/opensim-1
        public void FindFriend(IClientAPI remoteClient, UUID HunterID, UUID PreyID)
        {
            UUID requester = remoteClient.AgentId;

            if (requester != HunterID) // only allow client agent to be the hunter (?)
            {
                return;
            }

            FriendInfo[] friends = GetFriendsFromCache(requester);
            if (friends.Length == 0)
            {
                return;
            }

            FriendInfo friend = GetFriend(friends, PreyID);

            if (friend == null)
            {
                return;
            }

            if (friend.TheirFlags == -1 || (friend.TheirFlags & (int)FriendRights.CanSeeOnMap) == 0)
            {
                return;
            }

            Scene hunterScene = (Scene)remoteClient.Scene;

            if (hunterScene == null)
            {
                return;
            }

            // check local
            ScenePresence sp;
            double        px;
            double        py;

            if (hunterScene.TryGetScenePresence(PreyID, out sp))
            {
                if (sp == null)
                {
                    return;
                }
                px = hunterScene.RegionInfo.WorldLocX + sp.AbsolutePosition.X;
                py = hunterScene.RegionInfo.WorldLocY + sp.AbsolutePosition.Y;

                remoteClient.SendFindAgent(HunterID, PreyID, px, py);
                return;
            }

            PresenceInfo[] friendSessions = PresenceService.GetAgents(new string[] { PreyID.ToString() });

            if (friendSessions == null || friendSessions.Length == 0)
            {
                return;
            }

            PresenceInfo friendSession = friendSessions[0];

            if (friendSession == null)
            {
                return;
            }

            GridRegion region = GridService.GetRegionByUUID(hunterScene.RegionInfo.ScopeID, friendSession.RegionID);

            if (region == null)
            {
                return;
            }

            // we don't have presence location so point to a standard region center for now
            px = region.RegionLocX + 128.0;
            py = region.RegionLocY + 128.0;

            remoteClient.SendFindAgent(HunterID, PreyID, px, py);
        }