public void SendEstateTerrainHeights(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     AnArray list)
 {
     if (list.Count % 3 != 0)
     {
         return;
     }
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "textureheights"
             };
             for (int i = 0; i < list.Count; i += 3)
             {
                 double lowVal  = list[i + 1].AsReal;
                 double highVal = list[i + 2].AsReal;
                 msg.ParamList.Add(string.Format(CultureInfo.InvariantCulture, "{0} {1} {2}", list[i].AsInt, lowVal, highVal).ToUTF8Bytes());
             }
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #2
0
        private void EstateOwner_InstantMessage(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 2)
            {
                return;
            }

            var message = (req.ParamList.Count < 5 ?
                           req.ParamList[1] :
                           req.ParamList[4]).FromUTF8Bytes();

            var  scene         = circuit.Scene;
            var  thisRegionId  = scene.ID;
            var  estateService = scene.EstateService;
            uint estateId;

            if (estateService.RegionMap.TryGetValue(thisRegionId, out estateId))
            {
                foreach (var regionId in estateService.RegionMap[estateId])
                {
                    if (m_Scenes.TryGetValue(regionId, out scene))
                    {
                        foreach (var agent in scene.RootAgents)
                        {
                            agent.SendAlertMessage(message, regionId);
                        }
                    }
                }
            }
        }
 public void SendEstateTerrainDetail(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     AnArray list)
 {
     if (list.Count % 2 != 0)
     {
         return;
     }
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "texturedetail"
             };
             for (int i = 0; i < list.Count; i += 2)
             {
                 msg.ParamList.Add($"{list[i].AsInt} {list[i + 1].AsUUID}".ToUTF8Bytes());
             }
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #4
0
 public void SendEstateInstantMessage(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     string message)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "instantmessage"
             };
             /* first four are unused for that case */
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(string.Empty.ToUTF8Bytes());
             msg.ParamList.Add(message.ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #5
0
 public void SendEstateGetInfo(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey transactionID,
     LSLKey invoice)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID       = agent.AgentID,
                 SessionID     = viewerCircuit.SessionID,
                 Method        = "getinfo",
                 TransactionID = transactionID,
                 Invoice       = invoice
             };
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #6
0
        public override void SendEstateUpdateInfo(UUID invoice, UUID transactionID, EstateInfo estate, UUID fromSceneID, bool sendToAgentOnly = true)
        {
            var msg = new EstateOwnerMessage
            {
                AgentID       = Owner.ID,
                SessionID     = SessionID,
                Invoice       = invoice,
                TransactionID = transactionID,
                Method        = "estateupdateinfo"
            };

            msg.ParamList.Add(StringToBytes(estate.Name));
            msg.ParamList.Add(StringToBytes((string)estate.Owner.ID));
            msg.ParamList.Add(StringToBytes(estate.ID.ToString()));
            msg.ParamList.Add(StringToBytes(((uint)estate.Flags).ToString()));
            if (estate.UseGlobalTime)
            {
                msg.ParamList.Add(StringToBytes("0"));
            }
            else
            {
                msg.ParamList.Add(StringToBytes(((int)((estate.SunPosition + 6) * 1024)).ToString()));
            }
            msg.ParamList.Add(StringToBytes(estate.ParentEstateID.ToString()));
            msg.ParamList.Add(StringToBytes(estate.CovenantID.ToString()));
            msg.ParamList.Add(StringToBytes(estate.CovenantTimestamp.AsULong.ToString()));
            msg.ParamList.Add(StringToBytes(sendToAgentOnly?"1":"0"));
            msg.ParamList.Add(StringToBytes(estate.AbuseEmail));

            SendMessageIfRootAgent(msg, fromSceneID);
        }
예제 #7
0
        private void EstateOwner_SetRegionInfo(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 9)
            {
                return;
            }

            var scene = circuit.Scene;

            scene.RegionSettings.BlockTerraform  = ParamStringToBool(req.ParamList[0]);
            scene.RegionSettings.BlockFly        = ParamStringToBool(req.ParamList[1]);
            scene.RegionSettings.AllowDamage     = ParamStringToBool(req.ParamList[2]);
            scene.RegionSettings.AllowLandResell = ParamStringToBool(req.ParamList[3]);
            scene.RegionSettings.AgentLimit      = (int)decimal.Parse(req.ParamList[4].FromUTF8Bytes(), CultureInfo.InvariantCulture);
            scene.RegionSettings.ObjectBonus     = float.Parse(req.ParamList[5].FromUTF8Bytes(), CultureInfo.InvariantCulture);
            scene.Access = (RegionAccess)int.Parse(req.ParamList[6].FromUTF8Bytes());
            scene.RegionSettings.RestrictPushing     = ParamStringToBool(req.ParamList[7]);
            scene.RegionSettings.AllowLandJoinDivide = ParamStringToBool(req.ParamList[8]);
#if DEBUG
            m_Log.DebugFormat("RegionFlags={0} Access={1} AgentLimit={2} ObjectBonus={3}",
                              scene.RegionSettings.AsFlags.ToString(),
                              scene.Access,
                              scene.RegionSettings.AgentLimit,
                              scene.RegionSettings.ObjectBonus);
#endif

            scene.ReregisterRegion();
            scene.TriggerRegionSettingsChanged();
        }
예제 #8
0
 public void SendSetRegionDebug(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     int disableScripts,
     int disableCollision,
     int disablePhysics)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "setregiondebug"
             };
             msg.ParamList.Add(disableScripts.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(disableCollision.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(disablePhysics.Clamp(0, 1).ToString().ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #9
0
        /* this is groups only, so no code check inside */
        private void SendEstateList(UUID transactionID, UUID invoice, List <UGI> data, uint estateID, UUID fromSceneID)
        {
            int i = 0;

            while (i < data.Count)
            {
                int remaining = data.Count - i;
                if (remaining > 50)
                {
                    remaining = 50;
                }

                var msg = new EstateOwnerMessage
                {
                    TransactionID = transactionID,
                    Invoice       = invoice,
                    AgentID       = Owner.ID,
                    SessionID     = SessionID,
                    Method        = "setaccess"
                };
                msg.ParamList.Add(StringToBytes(estateID.ToString()));
                msg.ParamList.Add(StringToBytes(((uint)EstateAccessFlags.AllowedGroups).ToString()));
                msg.ParamList.Add(StringToBytes("0"));
                msg.ParamList.Add(StringToBytes(remaining.ToString()));
                msg.ParamList.Add(StringToBytes("0"));
                msg.ParamList.Add(StringToBytes("0"));
                while (remaining-- != 0)
                {
                    msg.ParamList.Add(data[i++].ID.GetBytes());
                }
                SendMessageIfRootAgent(msg, fromSceneID);
            }
        }
예제 #10
0
 public void SendEstateChangeInfo(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     string estateName,
     int estateFlags,
     double sunPos)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "estatechangeinfo"
             };
             uint actSunPos = (uint)((sunPos + 6) * 1024.0);
             msg.ParamList.Add(estateName.ToUTF8Bytes());
             msg.ParamList.Add(((uint)estateFlags).ToString().ToUTF8Bytes());
             msg.ParamList.Add(actSunPos.ToString().ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
        private void EstateOwner_Colliders(AgentCircuit circuit, EstateOwnerMessage req)
        {
            SceneInterface scene = circuit.Scene;

            if (scene == null)
            {
                return;
            }

            ProcessTopColliders(circuit, scene, LandStatFilterFlags.None, string.Empty);
        }
예제 #12
0
        private void EstateOwner_SetRegionDebug(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 3)
            {
                return;
            }
            var scene = circuit.Scene;

            scene.RegionSettings.DisableScripts    = ParamStringToBool(req.ParamList[0]);
            scene.RegionSettings.DisableCollisions = ParamStringToBool(req.ParamList[1]);
            scene.RegionSettings.DisablePhysics    = ParamStringToBool(req.ParamList[2]);
            scene.TriggerRegionSettingsChanged();
        }
예제 #13
0
        private void EstateOwner_SimulatorMessage(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 5)
            {
                return;
            }

            var message = req.ParamList[4].FromUTF8Bytes();

            foreach (var agent in circuit.Scene.Agents)
            {
                agent.SendRegionNotice(Owner, message, req.CircuitSceneID);
            }
        }
예제 #14
0
        private void EstateOwner_EstateChangeInfo(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 3)
            {
                return;
            }
            var    scene      = circuit.Scene;
            var    param1     = (RegionOptionFlags)uint.Parse(req.ParamList[1].FromUTF8Bytes());
            uint   param2     = uint.Parse(req.ParamList[2].FromUTF8Bytes());
            string estateName = req.ParamList[0].FromUTF8Bytes();

#if DEBUG
            m_Log.DebugFormat("Changing Estate Info: Name={0}, Flags={1}, SunPos={2}",
                              estateName, param1.ToString(), param2);
#endif

            EstateInfo estate;
            var        estateService = scene.EstateService;
            uint       estateID;
            if (estateService.RegionMap.TryGetValue(circuit.Scene.ID, out estateID) &&
                estateService.TryGetValue(estateID, out estate))
            {
                if (param2 != 0)
                {
                    estate.UseGlobalTime = false;
                    estate.SunPosition   = (param2 / 1024.0 - 6).Clamp(0, 24);
                }
                else
                {
                    estate.UseGlobalTime = true;
                }

                if (estateName.Length != 0)
                {
                    estate.Name = estateName;
                }
                estate.Flags = param1;
                estateService.Update(estate);

                SendEstateUpdateInfo(req.Invoice, req.TransactionID, estate, scene.ID);
                foreach (var regionID in estateService.RegionMap[estateID])
                {
                    SceneInterface estateScene;
                    if (m_Scenes.TryGetValue(regionID, out estateScene))
                    {
                        estateScene.TriggerEstateUpdate();
                    }
                }
            }
        }
예제 #15
0
        private void EstateOwner_EstateChangeCovenantId(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 1)
            {
                return;
            }

            var        covenantID = UUID.Parse(req.ParamList[0].FromUTF8Bytes());
            EstateInfo estate;
            uint       estateID;
            var        estateService = circuit.Scene.EstateService;

            if (covenantID != UUID.Zero)
            {
                AssetData data;
                if (!circuit.Scene.AssetService.TryGetValue(covenantID, out data))
                {
                    if (circuit.Agent.AssetService.TryGetValue(covenantID, out data))
                    {
                        circuit.Scene.AssetService.Store(data);
                    }
                    else
                    {
                        return;
                    }
                }
                if (data.Type != AssetType.Notecard)
                {
                    /* do not allow to set anything else than a notecard here */
                    return;
                }
            }

            if (estateService.RegionMap.TryGetValue(circuit.Scene.ID, out estateID) &&
                estateService.TryGetValue(estateID, out estate))
            {
                estate.CovenantID        = covenantID;
                estate.CovenantTimestamp = Date.Now;
                estateService.Update(estate);
                foreach (var regionID in estateService.RegionMap[estateID])
                {
                    SceneInterface estateScene;
                    if (m_Scenes.TryGetValue(regionID, out estateScene))
                    {
                        estateScene.TriggerEstateUpdate();
                    }
                }
            }
        }
예제 #16
0
        private void EstateOwner_Restart(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 1)
            {
                return;
            }

            float timeToRestart;

            if (!float.TryParse(req.ParamList[0].FromUTF8Bytes(), NumberStyles.Any, CultureInfo.InvariantCulture, out timeToRestart))
            {
                timeToRestart = 120;
            }
            circuit.Scene.RequestRegionRestart((int)timeToRestart);
        }
예제 #17
0
        private void EstateOwner_TeleportHomeAllUsers(AgentCircuit circuit, EstateOwnerMessage req)
        {
            var scene = circuit.Scene;

            foreach (var targetagent in scene.RootAgents)
            {
                if (targetagent == circuit.Agent)
                {
                    /* do not do self-kick */
                }
                else if (!targetagent.TeleportHome(scene))
                {
                    targetagent.KickUser(this.GetLanguageString(circuit.Agent.CurrentCulture, "YouHaveBeenKickedSinceYouCouldNotBeTeleportedHome", "You have been kicked since you could not be teleported home."));
                }
            }
        }
예제 #18
0
        private void TranslateEstateOwnerMessageSetExperience(EstateOwnerMessage m, ViewerConnection vc, ViewerAgentAccessor agent)
        {
            if (m.ParamList.Count < 5)
            {
                return;
            }
            var ev = new EstateOwnerMessageSetExperienceReceivedEvent
            {
                Agent         = agent,
                TransactionID = m.TransactionID,
                Invoice       = m.Invoice,
            };

            int blockedCount;
            int trustedCount;
            int allowedCount;

            if (!int.TryParse(m.ParamList[0].FromUTF8Bytes(), out ev.EstateID) ||
                !int.TryParse(m.ParamList[2].FromUTF8Bytes(), out blockedCount) ||
                !int.TryParse(m.ParamList[3].FromUTF8Bytes(), out trustedCount) ||
                !int.TryParse(m.ParamList[4].FromUTF8Bytes(), out allowedCount))
            {
                return;
            }
            if (m.ParamList.Count < 5 + blockedCount + trustedCount + allowedCount)
            {
                return;
            }

            int offset = 5;

            while (blockedCount-- > 0)
            {
                ev.Blocked.Add(new LSLKey(new UUID(m.ParamList[offset++], 0)));
            }
            while (trustedCount-- > 0)
            {
                ev.Trusted.Add(new LSLKey(new UUID(m.ParamList[offset++], 0)));
            }
            while (allowedCount-- > 0)
            {
                ev.Allowed.Add(new LSLKey(new UUID(m.ParamList[offset++], 0)));
            }

            vc.PostEvent(ev);
        }
예제 #19
0
        private void EstateOwner_TextureHeights(AgentCircuit circuit, EstateOwnerMessage req)
        {
            var scene = circuit.Scene;

            foreach (byte[] b in req.ParamList)
            {
                string   s          = b.FromUTF8Bytes();
                string[] splitfield = s.Split(' ');
                if (splitfield.Length != 3)
                {
                    continue;
                }

                var corner    = Int16.Parse(splitfield[0]);
                var lowValue  = float.Parse(splitfield[1], CultureInfo.InvariantCulture);
                var highValue = float.Parse(splitfield[2], CultureInfo.InvariantCulture);

                switch (corner)
                {
                case 0:
                    scene.RegionSettings.Elevation1SW = lowValue;
                    scene.RegionSettings.Elevation2SW = highValue;
                    break;

                case 1:
                    scene.RegionSettings.Elevation1NW = lowValue;
                    scene.RegionSettings.Elevation2NW = highValue;
                    break;

                case 2:
                    scene.RegionSettings.Elevation1SE = lowValue;
                    scene.RegionSettings.Elevation2SE = highValue;
                    break;

                case 3:
                    scene.RegionSettings.Elevation1NE = lowValue;
                    scene.RegionSettings.Elevation2NE = highValue;
                    break;

                default:
                    break;
                }
            }

            scene.TriggerRegionSettingsChanged();
        }
예제 #20
0
        private void EstateOwner_KickEstate(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 1)
            {
                return;
            }

            var prey = UUID.Parse(req.ParamList[0].FromUTF8Bytes());

            IAgent targetagent;
            var    scene = circuit.Scene;

            if (scene.RootAgents.TryGetValue(prey, out targetagent))
            {
                targetagent.KickUser(this.GetLanguageString(targetagent.CurrentCulture, "YouHaveBeenKicked", "You have been kicked."));
            }
        }
예제 #21
0
        private void EstateOwner_TeleportHomeUser(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 2)
            {
                return;
            }
            var prey = UUID.Parse(req.ParamList[1].FromUTF8Bytes());

            var scene = circuit.Scene;

            IAgent targetagent;

            if (scene.RootAgents.TryGetValue(prey, out targetagent) &&
                !targetagent.TeleportHome(scene))
            {
                targetagent.KickUser(this.GetLanguageString(circuit.Agent.CurrentCulture, "YouHaveBeenKickedSinceYouCouldNotBeTeleportedHome", "You have been kicked since you could not be teleported home."));
            }
        }
예제 #22
0
        private void EstateOwner_Terrain(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count < 1)
            {
                return;
            }
            SceneInterface scene = circuit.Scene;

            if (scene == null)
            {
                return;
            }
            switch (req.ParamList[0].FromUTF8Bytes())
            {
            case "download filename":
                if (req.ParamList.Count > 1)
                {
                    string viewerFilename = req.ParamList[1].FromUTF8Bytes();

                    AddNewFile("terrain.raw", LLRAWData.ToLLRaw(scene.Terrain.AllPatches));
                    circuit.SendMessage(new InitiateDownload
                    {
                        AgentID        = ID,
                        SimFilename    = "terrain.raw",
                        ViewerFilename = viewerFilename
                    });
                }
                break;

            case "upload filename":
                if (req.ParamList.Count > 1)
                {
                    var t = new TerrainUploadTransaction(circuit.Scene)
                    {
                        Filename = req.ParamList[1].FromUTF8Bytes()
                    };
                    AddTerrainUploadTransaction(t, req.CircuitSceneID);
                }
                break;

            default:
                break;
            }
        }
예제 #23
0
        private void EstateOwner_GetInfo(AgentCircuit circuit, EstateOwnerMessage req)
        {
            var        scene = circuit.Scene;
            uint       estateID;
            EstateInfo estateInfo;

            if (!scene.EstateService.RegionMap.TryGetValue(scene.ID, out estateID) ||
                !scene.EstateService.TryGetValue(estateID, out estateInfo))
            {
                return;
            }

            SendEstateList(
                req.TransactionID,
                req.Invoice,
                EstateAccessFlags.Managers,
                scene.EstateService.EstateManager.All[estateID],
                estateID,
                req.CircuitSceneID);
            SendEstateList(
                req.TransactionID,
                req.Invoice,
                EstateAccessFlags.AllowedAgents,
                scene.EstateService.EstateAccess.All[estateID],
                estateID,
                req.CircuitSceneID);
            SendEstateList(
                req.TransactionID,
                req.Invoice,
                scene.EstateService.EstateGroup.All[estateID],
                estateID,
                req.CircuitSceneID);
            SendEstateList(
                req.TransactionID,
                req.Invoice,
                EstateAccessFlags.BannedAgents,
                scene.EstateService.EstateBans.All[estateID],
                estateID,
                req.CircuitSceneID);

            SendEstateUpdateInfo(req.Invoice, req.TransactionID, estateInfo, req.CircuitSceneID);
        }
 public void SendTelehubDelete(
     ScriptInstance instance,
     ViewerAgentAccessor agent)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID = agent.AgentID,
                 Method  = "telehub"
             };
             msg.ParamList.Add("delete".ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #25
0
        private void SendEstateList(UUID transactionID, UUID invoice, EstateAccessFlags code, List <UGUI> data, uint estateID, UUID fromSceneID)
        {
            int i = 0;

            while (i < data.Count)
            {
                int remaining = data.Count - i;
                if (remaining > 50)
                {
                    remaining = 50;
                }

                var msg = new EstateOwnerMessage
                {
                    TransactionID = transactionID,
                    Invoice       = invoice,
                    AgentID       = Owner.ID,
                    SessionID     = SessionID,
                    Method        = "setaccess"
                };
                msg.ParamList.Add(StringToBytes(estateID.ToString()));
                msg.ParamList.Add(StringToBytes(((uint)code).ToString()));
                foreach (var flag in m_OrderedAccessFlags)
                {
                    if (code == flag)
                    {
                        msg.ParamList.Add(StringToBytes(remaining.ToString()));
                    }
                    else
                    {
                        msg.ParamList.Add(StringToBytes("0"));
                    }
                }
                while (remaining-- != 0)
                {
                    msg.ParamList.Add(data[i++].ID.GetBytes());
                }
                SendMessageIfRootAgent(msg, fromSceneID);
            }
        }
예제 #26
0
 public void SendEstateSetRegionTerrain(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey transactionID,
     LSLKey invoice,
     double waterHeight,
     double terrainRaiseLimit,
     double terrainLowerLimit,
     int isSunFixed,
     double sunPosition,
     int useEstateSun)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID       = agent.AgentID,
                 SessionID     = viewerCircuit.SessionID,
                 Method        = "setregionterrain",
                 TransactionID = transactionID,
                 Invoice       = invoice
             };
             msg.ParamList.Add(waterHeight.ToString(CultureInfo.InvariantCulture).ToUTF8Bytes());
             msg.ParamList.Add(terrainRaiseLimit.ToString(CultureInfo.InvariantCulture).ToUTF8Bytes());
             msg.ParamList.Add(terrainLowerLimit.ToString(CultureInfo.InvariantCulture).ToUTF8Bytes());
             msg.ParamList.Add(useEstateSun.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(isSunFixed.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(sunPosition.ToString(CultureInfo.InvariantCulture).ToUTF8Bytes());
             msg.ParamList.Add("0".ToUTF8Bytes());
             msg.ParamList.Add("0".ToUTF8Bytes());
             msg.ParamList.Add("6".ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #27
0
 public void SendSetRegionInfo(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     int blockTerraform,
     int blockFly,
     int allowDamage,
     int allowLandResell,
     int agentLimit,
     double objectBonus,
     int access,
     int restrictPushing,
     int allowLandJoinDivide)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "setregioninfo"
             };
             msg.ParamList.Add(blockTerraform.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(blockFly.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(allowDamage.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(allowLandResell.Clamp(0, 1).ToString().ToUTF8Bytes());
             msg.ParamList.Add(agentLimit.ToString().ToUTF8Bytes());
             msg.ParamList.Add(string.Format(CultureInfo.InvariantCulture, "{0}", objectBonus).ToUTF8Bytes());
             msg.ParamList.Add(access.ToString().ToUTF8Bytes());
             msg.ParamList.Add(restrictPushing.ToString().ToUTF8Bytes());
             msg.ParamList.Add(allowLandJoinDivide.ToString().ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #28
0
        private void EstateOwner_SetRegionTerrain(AgentCircuit circuit, EstateOwnerMessage req)
        {
            if (req.ParamList.Count != 9)
            {
                return;
            }

            var scene = circuit.Scene;

            scene.RegionSettings.WaterHeight       = float.Parse(req.ParamList[0].FromUTF8Bytes(), CultureInfo.InvariantCulture);
            scene.RegionSettings.TerrainRaiseLimit = float.Parse(req.ParamList[1].FromUTF8Bytes(), CultureInfo.InvariantCulture);
            scene.RegionSettings.TerrainLowerLimit = float.Parse(req.ParamList[2].FromUTF8Bytes(), CultureInfo.InvariantCulture);

            scene.RegionSettings.IsSunFixed   = ParamStringToBool(req.ParamList[4]);
            scene.RegionSettings.SunPosition  = (double.Parse(req.ParamList[5].FromUTF8Bytes(), CultureInfo.InvariantCulture) - 6).Clamp(0, 24);
            scene.RegionSettings.UseEstateSun = ParamStringToBool(req.ParamList[3]);
            /* 6 is bool estate use global time */
            /* 7 is bool for IsEstateFixedSun */
            /* 8 estate sun_hour */

            scene.TriggerRegionSettingsChanged();
        }
예제 #29
0
 public void SendEstateChangeCovenantID(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     LSLKey id)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "estatechangecovenantid"
             };
             msg.ParamList.Add(id.AsUUID.GetBytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }
예제 #30
0
 public void SendRegionRestart(
     ScriptInstance instance,
     ViewerAgentAccessor agent,
     double timeToRestart)
 {
     lock (instance)
     {
         ViewerConnection vc;
         ViewerCircuit    viewerCircuit;
         if (m_Clients.TryGetValue(agent.AgentID, out vc) &&
             vc.ViewerCircuits.TryGetValue((uint)agent.CircuitCode, out viewerCircuit))
         {
             var msg = new EstateOwnerMessage
             {
                 AgentID   = agent.AgentID,
                 SessionID = viewerCircuit.SessionID,
                 Method    = "restart"
             };
             msg.ParamList.Add(timeToRestart.ToString(CultureInfo.InvariantCulture).ToUTF8Bytes());
             viewerCircuit.SendMessage(msg);
         }
     }
 }