void UseCircuitCodeHandler(Packet packet, Agent agent) { RegionHandshakePacket handshake = new RegionHandshakePacket(); handshake.RegionInfo.BillableFactor = 0f; handshake.RegionInfo.CacheID = UUID.Random(); handshake.RegionInfo.IsEstateManager = false; handshake.RegionInfo.RegionFlags = 1; handshake.RegionInfo.SimOwner = UUID.Random(); handshake.RegionInfo.SimAccess = 1; handshake.RegionInfo.SimName = Utils.StringToBytes("Simian"); handshake.RegionInfo.WaterHeight = 20.0f; handshake.RegionInfo.TerrainBase0 = UUID.Zero; handshake.RegionInfo.TerrainBase1 = UUID.Zero; handshake.RegionInfo.TerrainBase2 = UUID.Zero; handshake.RegionInfo.TerrainBase3 = UUID.Zero; handshake.RegionInfo.TerrainDetail0 = UUID.Zero; handshake.RegionInfo.TerrainDetail1 = UUID.Zero; handshake.RegionInfo.TerrainDetail2 = UUID.Zero; handshake.RegionInfo.TerrainDetail3 = UUID.Zero; handshake.RegionInfo.TerrainHeightRange00 = 0f; handshake.RegionInfo.TerrainHeightRange01 = 20f; handshake.RegionInfo.TerrainHeightRange10 = 0f; handshake.RegionInfo.TerrainHeightRange11 = 20f; handshake.RegionInfo.TerrainStartHeight00 = 0f; handshake.RegionInfo.TerrainStartHeight01 = 40f; handshake.RegionInfo.TerrainStartHeight10 = 0f; handshake.RegionInfo.TerrainStartHeight11 = 40f; handshake.RegionInfo2.RegionID = UUID.Random(); agent.SendPacket(handshake); }
void StartPingCheckHandler(Packet packet, Agent agent) { StartPingCheckPacket start = (StartPingCheckPacket)packet; CompletePingCheckPacket complete = new CompletePingCheckPacket(); complete.Header.Reliable = false; complete.PingID.PingID = start.PingID.PingID; agent.SendPacket(complete); }
void CompleteAgentMovementHandler(Packet packet, Agent agent) { CompleteAgentMovementPacket request = (CompleteAgentMovementPacket)packet; // Create a representation for this agent Avatar avatar = new Avatar(); avatar.ID = agent.AgentID; avatar.LocalID = (uint)Interlocked.Increment(ref currentLocalID); avatar.Position = new Vector3(128f, 128f, 25f); avatar.Rotation = Quaternion.Identity; avatar.Scale = new Vector3(1f, 1f, 3f); // Set the avatar name NameValue[] name = new NameValue[2]; name[0] = new NameValue("FirstName", NameValue.ValueType.String, NameValue.ClassType.ReadWrite, NameValue.SendtoType.SimViewer, agent.FirstName); name[1] = new NameValue("LastName", NameValue.ValueType.String, NameValue.ClassType.ReadWrite, NameValue.SendtoType.SimViewer, agent.LastName); avatar.NameValues = name; // Link this avatar up with the corresponding agent agent.Avatar = avatar; // Give testers a provisionary balance of 1000L agent.Balance = 1000; AgentMovementCompletePacket complete = new AgentMovementCompletePacket(); complete.AgentData.AgentID = agent.AgentID; complete.AgentData.SessionID = agent.SessionID; complete.Data.LookAt = Vector3.UnitX; complete.Data.Position = avatar.Position; complete.Data.RegionHandle = server.RegionHandle; complete.Data.Timestamp = Utils.DateTimeToUnixTime(DateTime.Now); complete.SimData.ChannelVersion = Utils.StringToBytes("Simian"); agent.SendPacket(complete); SendLayerData(agent); }
void AgentWearablesRequestHandler(Packet packet, Agent agent) { AgentWearablesUpdatePacket update = new AgentWearablesUpdatePacket(); update.AgentData.AgentID = agent.AgentID; update.AgentData.SessionID = agent.SessionID; // Technically this should be per-agent, but if the only requirement is that it // increments this is easier update.AgentData.SerialNum = (uint)Interlocked.Increment(ref currentWearablesSerialNum); update.WearableData = new AgentWearablesUpdatePacket.WearableDataBlock[4]; for (int i = 0; i < 4; i++) { update.WearableData[i] = new AgentWearablesUpdatePacket.WearableDataBlock(); update.WearableData[i].AssetID = UUID.Zero; update.WearableData[i].ItemID = UUID.Zero; update.WearableData[i].WearableType = 42; // HACK } agent.SendPacket(update); }
void SendLayerData(Agent agent) { lock (server.Heightmap) { for (int y = 0; y < 16; y++) { for (int x = 0; x < 16; x++) { int[] patches = new int[1]; patches[0] = (y * 16) + x; LayerDataPacket layer = TerrainCompressor.CreateLandPacket(server.Heightmap, patches); agent.SendPacket(layer); } } } }