public async Task SendRegionHandshakeReply(Guid agentId, Guid sessionId, RegionHandshakeReplyFlags flags) { //Logger.LogDebug($"Circuit.SendRegionHandshakeReply({agentId}, {sessionId}, {flags}): Sending to Host={Host}"); RegionHandshakeReplyMessage message = new RegionHandshakeReplyMessage(agentId, sessionId, flags); await SendReliable(message); }
public RegionHandshakeReplyMessage(Guid agentId, Guid sessionId, RegionHandshakeReplyFlags replyFlags) { MessageId = MessageId.RegionHandshakeReply; Flags = PacketFlags.Reliable; // TODO: message_template.msg says that this should be ZeroCoded but I don't have a way of doing that yet and Firestorm doesn't do it AgentId = agentId; SessionId = sessionId; ReplyFlags = replyFlags; }
protected static async void OnRegionHandshakeMessage(RegionHandshakeMessage message) { Region region = Agent.CurrentPlayer?.Region; if (region == null || region.Id != Guid.Empty && region.Id != message.RegionId) { return; } region.Id = message.RegionId; region.RegionFlags = message.RegionFlags; region.SimAccess = message.SimAccess; region.Name = message.SimName; region.Owner = message.SimOwner; region.IsCurrentPlayerEstateOwner = message.IsEstateManager; region.WaterHeight = message.WaterHeight; region.BillableFactor = message.BillableFactor; region.CacheId = message.CacheId; region.TerrainBase[0] = message.TerrainBase0; region.TerrainBase[1] = message.TerrainBase1; region.TerrainBase[2] = message.TerrainBase2; region.TerrainBase[3] = message.TerrainBase3; region.TerrainDetail[0] = message.TerrainDetail0; region.TerrainDetail[1] = message.TerrainDetail1; region.TerrainDetail[2] = message.TerrainDetail2; region.TerrainDetail[3] = message.TerrainDetail3; region.TerrainStartHeight[0] = message.TerrainStartHeight00; region.TerrainStartHeight[1] = message.TerrainStartHeight01; region.TerrainStartHeight[2] = message.TerrainStartHeight10; region.TerrainStartHeight[3] = message.TerrainStartHeight11; region.TerrainHeightRange[0] = message.TerrainHeightRange00; region.TerrainHeightRange[1] = message.TerrainHeightRange01; region.TerrainHeightRange[2] = message.TerrainHeightRange10; region.TerrainHeightRange[3] = message.TerrainHeightRange11; region.CpuClassId = message.CpuClassId; region.CpuRatio = message.CpuRatio; region.ColoName = message.ColoName; region.ProductSku = message.ProductSku; region.ProductName = message.ProductName; //TODO: Add RegionInfo4 when I know what it is string s = ""; for (int i = 0; i < 4; i++) { s += $"\nTerrainBase{i}: http://asset-cdn.glb.agni.lindenlab.com/?texture_id={region.TerrainBase[i]}"; s += $"\nTerrainDetail{i}: http://asset-cdn.glb.agni.lindenlab.com/?texture_id={region.TerrainDetail[i]}"; } Logger.LogDebug(s); EventManager.Instance.RaiseOnRegionDataChanged(region); // TODO: Load cache for the region, but should it be here? RegionHandshakeReplyFlags flags = 0 | RegionHandshakeReplyFlags.SendAllCacheableObjects | RegionHandshakeReplyFlags.CacheFileIsEmpty | RegionHandshakeReplyFlags.SupportsSelfAppearance; await region.Circuit.SendRegionHandshakeReply(Session.Instance.AgentId, Session.Instance.SessionId, flags); }