public void CrossSimBorder(LLVector3 avatarpos) { // VERY VERY BASIC LLVector3 newpos = avatarpos; uint neighbourx = this.m_regionData.RegionLocX; uint neighboury = this.m_regionData.RegionLocY; if (avatarpos.X < 0) { neighbourx -= 1; newpos.X = 254; } if (avatarpos.X > 255) { neighbourx += 1; newpos.X = 1; } if (avatarpos.Y < 0) { neighboury -= 1; newpos.Y = 254; } if (avatarpos.Y > 255) { neighbourx += 1; newpos.Y = 1; } OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:CrossSimBorder() - Crossing border to neighbouring sim at [" + neighbourx.ToString() + "," + neighboury.ToString() + "]"); Hashtable SimParams; ArrayList SendParams; XmlRpcRequest GridReq; XmlRpcResponse GridResp; foreach (Hashtable borderingSim in ((RemoteGridBase)m_gridServer).neighbours) { if (((string)borderingSim["region_locx"]).Equals(neighbourx.ToString()) && ((string)borderingSim["region_locy"]).Equals(neighboury.ToString())) { SimParams = new Hashtable(); SimParams["firstname"] = this.ClientAvatar.firstname; SimParams["lastname"] = this.ClientAvatar.lastname; SimParams["circuit_code"] = this.CircuitCode.ToString(); SimParams["pos_x"] = newpos.X.ToString(); SimParams["pos_y"] = newpos.Y.ToString(); SimParams["pos_z"] = newpos.Z.ToString(); SendParams = new ArrayList(); SendParams.Add(SimParams); GridReq = new XmlRpcRequest("agent_crossing", SendParams); GridResp = GridReq.Send("http://" + borderingSim["sim_ip"] + ":" + borderingSim["sim_port"], 3000); CrossedRegionPacket NewSimPack = new CrossedRegionPacket(); NewSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); NewSimPack.AgentData.AgentID = this.AgentID; NewSimPack.AgentData.SessionID = this.SessionID; NewSimPack.Info = new CrossedRegionPacket.InfoBlock(); NewSimPack.Info.Position = newpos; NewSimPack.Info.LookAt = new LLVector3(0.99f, 0.042f, 0); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!! NewSimPack.RegionData = new libsecondlife.Packets.CrossedRegionPacket.RegionDataBlock(); NewSimPack.RegionData.RegionHandle = Helpers.UIntsToLong((uint)(Convert.ToInt32(borderingSim["region_locx"]) * 256), (uint)(Convert.ToInt32(borderingSim["region_locy"]) * 256)); System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse((string)borderingSim["sim_ip"]); byte[] byteIP = neighbourIP.GetAddressBytes(); NewSimPack.RegionData.SimIP = (uint)byteIP[3] << 24; NewSimPack.RegionData.SimIP += (uint)byteIP[2] << 16; NewSimPack.RegionData.SimIP += (uint)byteIP[1] << 8; NewSimPack.RegionData.SimIP += (uint)byteIP[0]; NewSimPack.RegionData.SimPort = (ushort)Convert.ToInt32(borderingSim["sim_port"]); NewSimPack.RegionData.SeedCapability = new byte[0]; lock (PacketQueue) { ProcessOutPacket(NewSimPack); DowngradeClient(); } } } }
public void CrossSimBorder(LLVector3 avatarpos) { // VERY VERY BASIC LLVector3 newpos = avatarpos; uint neighbourx = this.m_regionData.RegionLocX; uint neighboury = this.m_regionData.RegionLocY; if (avatarpos.X < 0) { neighbourx -= 1; newpos.X = 254; } if (avatarpos.X > 255) { neighbourx += 1; newpos.X = 1; } if (avatarpos.Y < 0) { neighboury -= 1; newpos.Y = 254; } if (avatarpos.Y > 255) { neighbourx += 1; newpos.Y = 1; } OpenSim.Framework.Console.MainConsole.Instance.WriteLine("SimClient.cs:CrossSimBorder() - Crossing border to neighbouring sim at [" + neighbourx.ToString() + "," + neighboury.ToString() + "]"); Hashtable SimParams; ArrayList SendParams; XmlRpcRequest GridReq; XmlRpcResponse GridResp; foreach (Hashtable borderingSim in ((RemoteGridBase)m_gridServer).neighbours) { if (((string)borderingSim["region_locx"]).Equals(neighbourx.ToString()) && ((string)borderingSim["region_locy"]).Equals(neighboury.ToString())) { SimParams = new Hashtable(); SimParams["firstname"] = this.ClientAvatar.firstname; SimParams["lastname"] = this.ClientAvatar.lastname; SimParams["circuit_code"] = this.CircuitCode.ToString(); SimParams["pos_x"] = newpos.X.ToString(); SimParams["pos_y"] = newpos.Y.ToString(); SimParams["pos_z"] = newpos.Z.ToString(); SendParams = new ArrayList(); SendParams.Add(SimParams); GridReq = new XmlRpcRequest("agent_crossing", SendParams); GridResp = GridReq.Send("http://" + borderingSim["sim_ip"] + ":" + borderingSim["sim_port"], 3000); CrossedRegionPacket NewSimPack = new CrossedRegionPacket(); NewSimPack.AgentData = new CrossedRegionPacket.AgentDataBlock(); NewSimPack.AgentData.AgentID = this.AgentID; NewSimPack.AgentData.SessionID = this.SessionID; NewSimPack.Info = new CrossedRegionPacket.InfoBlock(); NewSimPack.Info.Position = newpos; NewSimPack.Info.LookAt = new LLVector3(0.99f, 0.042f, 0); // copied from Avatar.cs - SHOULD BE DYNAMIC!!!!!!!!!! NewSimPack.RegionData = new libsecondlife.Packets.CrossedRegionPacket.RegionDataBlock(); NewSimPack.RegionData.RegionHandle = Helpers.UIntsToLong((uint)(Convert.ToInt32(borderingSim["region_locx"]) * 256), (uint)(Convert.ToInt32(borderingSim["region_locy"]) * 256)); System.Net.IPAddress neighbourIP = System.Net.IPAddress.Parse((string)borderingSim["sim_ip"]); byte[] byteIP = neighbourIP.GetAddressBytes(); NewSimPack.RegionData.SimIP = (uint)byteIP[3] << 24; NewSimPack.RegionData.SimIP += (uint)byteIP[2] << 16; NewSimPack.RegionData.SimIP += (uint)byteIP[1] << 8; NewSimPack.RegionData.SimIP += (uint)byteIP[0]; NewSimPack.RegionData.SimPort = (ushort)Convert.ToInt32(borderingSim["sim_port"]); NewSimPack.RegionData.SeedCapability = new byte[0]; lock (PacketQueue) { ProcessOutPacket(NewSimPack); DowngradeClient(); } } } }