本文整理汇总了C#中IClientAPI.SendMapItemReply方法的典型用法代码示例。如果您正苦于以下问题:C# IClientAPI.SendMapItemReply方法的具体用法?C# IClientAPI.SendMapItemReply怎么用?C# IClientAPI.SendMapItemReply使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类IClientAPI
的用法示例。
在下文中一共展示了IClientAPI.SendMapItemReply方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
lock (m_rootAgents)
{
if (!m_rootAgents.Contains(remoteClient.AgentId))
return;
}
uint xstart = 0;
uint ystart = 0;
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
if (itemtype == 6) // we only sevice 6 right now (avatar green dots)
{
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
// Local Map Item Request
List<ScenePresence> avatars = m_scene.GetAvatars();
int tc = Environment.TickCount;
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
if (avatars.Count == 0 || avatars.Count == 1)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + 1);
mapitem.y = (uint)(ystart + 1);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 0;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
else
{
foreach (ScenePresence avatar in avatars)
{
// Don't send a green dot for yourself
Vector3 avpos;
if ((avatar.UUID != remoteClient.AgentId) && avatar.HasSafePosition(out avpos))
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + avpos.X);
mapitem.y = (uint)(ystart + avpos.Y);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 1;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
}
}
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
else
{
RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle);
}
}
}
示例2: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
lock (m_rootAgents)
{
if (!m_rootAgents.Contains(remoteClient.AgentId))
return;
}
uint xstart = 0;
uint ystart = 0;
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
if (itemtype == 6) // we only sevice 6 right now (avatar green dots)
{
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
// Local Map Item Request
int tc = Environment.TickCount;
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
if (m_scene.GetRootAgentCount() <= 1)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + 1);
mapitem.y = (uint)(ystart + 1);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 0;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
else
{
m_scene.ForEachScenePresence(delegate(ScenePresence sp)
{
// Don't send a green dot for yourself
if (!sp.IsChildAgent && sp.UUID != remoteClient.AgentId)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + sp.AbsolutePosition.X);
mapitem.y = (uint)(ystart + sp.AbsolutePosition.Y);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 1;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
});
}
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
else
{
// Remote Map Item Request
// ensures that the blockingqueue doesn't get borked if the GetAgents() timing changes.
// Note that we only start up a remote mapItem Request thread if there's users who could
// be making requests
if (!threadrunning)
{
m_log.Warn("[WORLD MAP]: Starting new remote request thread manually. This means that AvatarEnteringParcel never fired! This needs to be fixed! Don't Mantis this, as the developers can see it in this message");
StartThread(new object());
}
RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle);
}
}
}
示例3: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
m_log.DebugFormat("[WORLD MAP]: Handle MapItem request {0} {1}", regionhandle, itemtype);
lock (m_rootAgents)
{
if (!m_rootAgents.Contains(remoteClient.AgentId))
return;
}
uint xstart = 0;
uint ystart = 0;
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
if (itemtype == 6) // Service 6 right now (MAP_ITEM_AGENTS_LOCATION; green dots)
{
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
// Local Map Item Request
int tc = Environment.TickCount;
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
if (m_scene.GetRootAgentCount() <= 1)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + 1);
mapitem.y = (uint)(ystart + 1);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 0;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
else
{
m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
{
// Don't send a green dot for yourself
if (sp.UUID != remoteClient.AgentId)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + sp.AbsolutePosition.X);
mapitem.y = (uint)(ystart + sp.AbsolutePosition.Y);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 1;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
});
}
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
else
{
// Remote Map Item Request
// ensures that the blockingqueue doesn't get borked if the GetAgents() timing changes.
RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle);
}
}
else if (itemtype == 7) // Service 7 (MAP_ITEM_LAND_FOR_SALE)
{
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
// Parcels
ILandChannel landChannel = m_scene.LandChannel;
List<ILandObject> parcels = landChannel.AllParcels();
// Local Map Item Request
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
if ((parcels != null) && (parcels.Count >= 1))
{
foreach (ILandObject parcel_interface in parcels)
{
// Play it safe
if (!(parcel_interface is LandObject))
continue;
LandObject land = (LandObject)parcel_interface;
LandData parcel = land.LandData;
// Show land for sale
if ((parcel.Flags & (uint)ParcelFlags.ForSale) == (uint)ParcelFlags.ForSale)
{
Vector3 min = parcel.AABBMin;
Vector3 max = parcel.AABBMax;
float x = (min.X+max.X)/2;
float y = (min.Y+max.Y)/2;
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + x);
mapitem.y = (uint)(ystart + y);
// mapitem.z = (uint)m_scene.GetGroundHeight(x,y);
mapitem.id = parcel.GlobalID;
mapitem.name = parcel.Name;
mapitem.Extra = parcel.Area;
mapitem.Extra2 = parcel.SalePrice;
mapitems.Add(mapitem);
}
//.........这里部分代码省略.........
示例4: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
//All the parts are in for this, except for popular places and those are not in as they are not reqested anymore.
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
uint xstart = 0;
uint ystart = 0;
OpenMetaverse.Utils.LongToUInts(remoteClient.Scene.RegionInfo.RegionHandle, out xstart, out ystart);
OpenSim.Services.Interfaces.GridRegion GR = m_Scenes[0].GridService.GetRegionByPosition(UUID.Zero, (int)xstart, (int)ystart);
#region Telehub
if (itemtype == (uint)OpenMetaverse.GridItemType.Telehub)
{
IRegionConnector GF = DataManager.DataManager.RequestPlugin<IRegionConnector>();
if (GF == null)
return;
int tc = Environment.TickCount;
//Find the telehub
Telehub telehub = GF.FindTelehub(GR.RegionID);
if (telehub != null)
{
mapitem = new mapItemReply();
//The position is in GLOBAL coordinates (in meters)
mapitem.x = (uint)(GR.RegionLocX + telehub.TelehubLocX);
mapitem.y = (uint)(GR.RegionLocY + telehub.TelehubLocY);
mapitem.id = GR.RegionID;
//This is how the name is sent, go figure
mapitem.name = Util.Md5Hash(GR.RegionName + tc.ToString());
//Not sure, but this is what gets sent
mapitem.Extra = 1;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
mapitems.Clear();
}
}
#endregion
#region Land for sale
//PG land that is for sale
if (itemtype == (uint)OpenMetaverse.GridItemType.LandForSale)
{
if (directoryService == null)
return;
//Find all the land, use "0" for the flags so we get all land for sale, no price or area checking
DirLandReplyData[] Landdata = directoryService.FindLandForSale("0", int.MaxValue.ToString(), "0", 0, 0);
uint locX = 0;
uint locY = 0;
foreach (DirLandReplyData landDir in Landdata)
{
LandData landdata = directoryService.GetParcelInfo(landDir.parcelID);
if (landdata.Maturity != 0)
continue; //Not a PG land
foreach (Scene scene in m_Scenes)
{
if (scene.RegionInfo.RegionID == landdata.RegionID)
{
//Global coords, so add the meters
locX = scene.RegionInfo.RegionLocX * Constants.RegionSize;
locY = scene.RegionInfo.RegionLocY * Constants.RegionSize;
}
}
if (locY == 0 && locX == 0)
{
//Ask the grid service for the coordinates if the region is not local
OpenSim.Services.Interfaces.GridRegion r = m_Scenes[0].GridService.GetRegionByUUID(UUID.Zero, landdata.RegionID);
if (r != null)
{
locX = (uint)r.RegionLocX;
locY = (uint)r.RegionLocY;
}
}
if (locY == 0 && locX == 0) //Couldn't find the region, don't send
continue;
mapitem = new mapItemReply();
//Global coords, so make sure its in meters
mapitem.x = (uint)(locX + landdata.UserLocation.X);
mapitem.y = (uint)(locY + landdata.UserLocation.Y);
mapitem.id = landDir.parcelID;
mapitem.name = landDir.name;
mapitem.Extra = landDir.actualArea;
mapitem.Extra2 = landDir.salePrice;
mapitems.Add(mapitem);
}
//Send all the map items
if (mapitems.Count != 0)
{
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
mapitems.Clear();
}
}
//.........这里部分代码省略.........
示例5: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
// m_log.DebugFormat("[WORLD MAP]: Handle MapItem request {0} {1}", regionhandle, itemtype);
lock (m_rootAgents)
{
if (!m_rootAgents.Contains(remoteClient.AgentId))
return;
}
uint xstart = 0;
uint ystart = 0;
Util.RegionHandleToWorldLoc(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
if (itemtype == (int)GridItemType.AgentLocations)
{
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
// Just requesting map info about the current, local region
int tc = Environment.TickCount;
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
if (m_scene.GetRootAgentCount() <= 1)
{
mapitem = new mapItemReply(
xstart + 1,
ystart + 1,
UUID.Zero,
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
0, 0);
mapitems.Add(mapitem);
}
else
{
m_scene.ForEachRootScenePresence(delegate(ScenePresence sp)
{
// Don't send a green dot for yourself
if (sp.UUID != remoteClient.AgentId)
{
mapitem = new mapItemReply(
xstart + (uint)sp.AbsolutePosition.X,
ystart + (uint)sp.AbsolutePosition.Y,
UUID.Zero,
Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
1, 0);
mapitems.Add(mapitem);
}
});
}
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
else
{
// Remote Map Item Request
// ensures that the blockingqueue doesn't get borked if the GetAgents() timing changes.
RequestMapItems("",remoteClient.AgentId,flags,EstateID,godlike,itemtype,regionhandle);
}
}
else if (itemtype == (int)GridItemType.LandForSale) // Service 7 (MAP_ITEM_LAND_FOR_SALE)
{
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
// Parcels
ILandChannel landChannel = m_scene.LandChannel;
List<ILandObject> parcels = landChannel.AllParcels();
// Local Map Item Request
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
if ((parcels != null) && (parcels.Count >= 1))
{
foreach (ILandObject parcel_interface in parcels)
{
// Play it safe
if (!(parcel_interface is LandObject))
continue;
LandObject land = (LandObject)parcel_interface;
LandData parcel = land.LandData;
// Show land for sale
if ((parcel.Flags & (uint)ParcelFlags.ForSale) == (uint)ParcelFlags.ForSale)
{
Vector3 min = parcel.AABBMin;
Vector3 max = parcel.AABBMax;
float x = (min.X+max.X)/2;
float y = (min.Y+max.Y)/2;
mapitem = new mapItemReply(
xstart + (uint)x,
ystart + (uint)y,
parcel.GlobalID,
parcel.Name,
parcel.Area,
parcel.SalePrice
);
mapitems.Add(mapitem);
}
}
}
//.........这里部分代码省略.........
示例6: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
if (remoteClient.Scene.GetScenePresence (remoteClient.AgentId).IsChildAgent)
return;//No child agent requests
uint xstart;
uint ystart;
Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
List<mapItemReply> mapitems = new List<mapItemReply>();
int tc = Environment.TickCount;
if (itemtype == (int)GridItemType.AgentLocations)
{
//If its local, just let it do it on its own.
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
//Only one person here, send a zero person response
mapItemReply mapitem;
IEntityCountModule entityCountModule = m_scene.RequestModuleInterface<IEntityCountModule>();
if (entityCountModule != null && entityCountModule.RootAgents <= 1)
{
mapitem = new mapItemReply
{
x = xstart + 1,
y = ystart + 1,
id = UUID.Zero,
name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
Extra = 0,
Extra2 = 0
};
mapitems.Add(mapitem);
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
return;
}
m_scene.ForEachScenePresence(delegate(IScenePresence sp)
{
// Don't send a green dot for yourself
if (!sp.IsChildAgent && sp.UUID != remoteClient.AgentId)
{
mapitem = new mapItemReply
{
x = (uint) (xstart + sp.AbsolutePosition.X),
y = (uint) (ystart + sp.AbsolutePosition.Y),
id = UUID.Zero,
name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString()),
Extra = 1,
Extra2 = 0
};
mapitems.Add(mapitem);
}
});
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
else
{
List<mapItemReply> reply;
if (!m_mapItemCache.TryGetValue(regionhandle, out reply))
{
m_itemsToRequest.Enqueue(new MapItemRequester
{
flags = flags,
itemtype = itemtype,
regionhandle = regionhandle,
remoteClient = remoteClient
});
if(!itemRequesterIsRunning)
threadpool.QueueEvent(GetMapItems, 3);
}
else
{
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
}
}
}
示例7: HandleMapItemRequest
public void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike,
uint itemtype, ulong regionhandle)
{
//The following constant appears to be from GridLayerType enum
//defined in OpenMetaverse/GridManager.cs of libopenmetaverse.
if (itemtype == (uint)OpenMetaverse.GridItemType.LandForSale)
{
Hashtable ReqHash = new Hashtable();
//The flags are: SortAsc (1 << 15), PerMeterSort (1 << 17)
ReqHash["flags"] = "163840";
ReqHash["type"] = "4294967295"; //This is -1 in 32 bits
ReqHash["price"] = "0";
ReqHash["area"] = "0";
ReqHash["query_start"] = "0";
Hashtable result = GenericXMLRPCRequest(ReqHash,
"dir_land_query");
if (!Convert.ToBoolean(result["success"]))
{
remoteClient.SendAgentAlertMessage(
result["errorMessage"].ToString(), false);
return;
}
ArrayList dataArray = (ArrayList)result["data"];
int count = dataArray.Count;
if (count > 100)
count = 101;
List<mapItemReply> mapitems = new List<mapItemReply>();
string ParcelRegionUUID;
string[] landingpoint;
foreach (Object o in dataArray)
{
Hashtable d = (Hashtable)o;
if (d["name"] == null)
continue;
mapItemReply mapitem = new mapItemReply();
ParcelRegionUUID = d["region_UUID"].ToString();
foreach (Scene scene in m_Scenes)
{
if (scene.RegionInfo.RegionID.ToString() == ParcelRegionUUID)
{
landingpoint = d["landing_point"].ToString().Split('/');
mapitem.x = (uint)((scene.RegionInfo.RegionLocX * 256) +
Convert.ToDecimal(landingpoint[0]));
mapitem.y = (uint)((scene.RegionInfo.RegionLocY * 256) +
Convert.ToDecimal(landingpoint[1]));
break;
}
}
mapitem.id = new UUID(d["parcel_id"].ToString());
mapitem.Extra = Convert.ToInt32(d["area"]);
mapitem.Extra2 = Convert.ToInt32(d["sale_price"]);
mapitem.name = d["name"].ToString();
mapitems.Add(mapitem);
}
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
mapitems.Clear();
}
if (itemtype == (uint)OpenMetaverse.GridItemType.PgEvent ||
itemtype == (uint)OpenMetaverse.GridItemType.MatureEvent ||
itemtype == (uint)OpenMetaverse.GridItemType.AdultEvent)
{
Hashtable ReqHash = new Hashtable();
//Find the maturity level
int maturity = (1 << 24);
//Find the maturity level
if (itemtype == (uint)OpenMetaverse.GridItemType.MatureEvent)
maturity = (1 << 25);
else
{
if (itemtype == (uint)OpenMetaverse.GridItemType.AdultEvent)
maturity = (1 << 26);
}
//The flags are: SortAsc (1 << 15), PerMeterSort (1 << 17)
maturity |= 163840;
//Character before | is number of days before/after current date
//Characters after | is the number for a category
ReqHash["text"] = "0|0";
ReqHash["flags"] = maturity.ToString();
ReqHash["query_start"] = "0";
//.........这里部分代码省略.........
示例8: HandleMapItemRequest
public void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
//The following constant appears to be from GridLayerType enum
//defined in OpenMetaverse/GridManager.cs of libopenmetaverse.
if (itemtype == 7) //(land sales)
{
int tc = Environment.TickCount;
Hashtable ReqHash = new Hashtable();
//The flags are: SortAsc (1 << 15), PerMeterSort (1 << 17)
ReqHash["flags"] = "163840";
ReqHash["type"] = "4294967295"; //This is -1 in 32 bits
ReqHash["price"] = "0";
ReqHash["area"] = "0";
ReqHash["query_start"] = "0";
Hashtable result = GenericXMLRPCRequest(ReqHash,
"dir_land_query");
if (!Convert.ToBoolean(result["success"]))
{
remoteClient.SendAgentAlertMessage(
result["errorMessage"].ToString(), false);
return;
}
ArrayList dataArray = (ArrayList)result["data"];
int count = dataArray.Count;
if (count > 100)
count = 101;
DirLandReplyData[] Landdata = new DirLandReplyData[count];
int i = 0;
string[] ParcelLandingPoint = new string[count];
string[] ParcelRegionUUID = new string[count];
foreach (Object o in dataArray)
{
Hashtable d = (Hashtable)o;
if (d["name"] == null)
continue;
Landdata[i] = new DirLandReplyData();
Landdata[i].parcelID = new UUID(d["parcel_id"].ToString());
Landdata[i].name = d["name"].ToString();
Landdata[i].auction = Convert.ToBoolean(d["auction"]);
Landdata[i].forSale = Convert.ToBoolean(d["for_sale"]);
Landdata[i].salePrice = Convert.ToInt32(d["sale_price"]);
Landdata[i].actualArea = Convert.ToInt32(d["area"]);
ParcelLandingPoint[i] = d["landing_point"].ToString();
ParcelRegionUUID[i] = d["region_UUID"].ToString();
i++;
if (i >= count)
break;
}
List<mapItemReply> mapitems = new List<mapItemReply>();
uint locX = 0;
uint locY = 0;
i = 0;
foreach (DirLandReplyData landDir in Landdata)
{
foreach (Scene scene in m_Scenes)
{
if (scene.RegionInfo.RegionID.ToString() == ParcelRegionUUID[i])
{
locX = scene.RegionInfo.RegionLocX;
locY = scene.RegionInfo.RegionLocY;
break;
}
}
string[] landingpoint = ParcelLandingPoint[i].Split('/');
mapItemReply mapitem = new mapItemReply();
mapitem.x = (uint)(locX + Convert.ToDecimal(landingpoint[0]));
mapitem.y = (uint)(locY + Convert.ToDecimal(landingpoint[1]));
mapitem.id = landDir.parcelID;
mapitem.name = landDir.name;
mapitem.Extra = landDir.actualArea;
mapitem.Extra2 = landDir.salePrice;
mapitems.Add(mapitem);
i++;
}
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
mapitems.Clear();
}
}
示例9: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
//All the parts are in for this, except for popular places and those are not in as they are not reqested anymore.
List<mapItemReply> mapitems = new List<mapItemReply>();
mapItemReply mapitem = new mapItemReply();
uint xstart = 0;
uint ystart = 0;
OpenMetaverse.Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
OpenSim.Services.Interfaces.GridRegion GR = m_scene.GridService.GetRegionByPosition(UUID.Zero, (int)xstart, (int)ystart);
#region Telehub
if (itemtype == (uint)OpenMetaverse.GridItemType.Telehub)
{
IRegionConnector GF = DataManager.DataManager.RequestPlugin<IRegionConnector>();
if (GF == null)
return;
int tc = Environment.TickCount;
Telehub telehub = GF.FindTelehub(GR.RegionID);
if (telehub != null)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(GR.RegionLocX + telehub.TelehubLocX);
mapitem.y = (uint)(GR.RegionLocY + telehub.TelehubLocY);
mapitem.id = GR.RegionID;
mapitem.name = Util.Md5Hash(GR.RegionName + tc.ToString());
mapitem.Extra = 1;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
mapitems.Clear();
}
}
#endregion
#region Land for sale
if (itemtype == (uint)OpenMetaverse.GridItemType.LandForSale)
{
if (DSC == null)
return;
DirLandReplyData[] Landdata = DSC.FindLandForSale("4294967295", int.MaxValue.ToString(), "0", 0, (uint)DirectoryManager.DirFindFlags.IncludePG);
uint locX = 0;
uint locY = 0;
foreach (DirLandReplyData landDir in Landdata)
{
LandData landdata = DSC.GetParcelInfo(landDir.parcelID);
if (landdata.Maturity != 0)
{
continue;
}
foreach (Scene scene in m_Scenes)
{
if (scene.RegionInfo.RegionID == landdata.RegionID)
{
locX = scene.RegionInfo.RegionLocX;
locY = scene.RegionInfo.RegionLocY;
}
}
if (locY == 0 && locX == 0)
continue;
mapitem = new mapItemReply();
mapitem.x = (uint)(locX + landdata.UserLocation.X);
mapitem.y = (uint)(locY + landdata.UserLocation.Y);
mapitem.id = landDir.parcelID;
mapitem.name = landDir.name;
mapitem.Extra = landDir.actualArea;
mapitem.Extra2 = landDir.salePrice;
mapitems.Add(mapitem);
}
if (mapitems.Count != 0)
{
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
mapitems.Clear();
}
}
if (itemtype == (uint)OpenMetaverse.GridItemType.AdultLandForSale)
{
if (DSC == null)
return;
DirLandReplyData[] Landdata = DSC.FindLandForSale("4294967295", int.MaxValue.ToString(), "0",0, 0);
uint locX = 0;
uint locY = 0;
foreach (DirLandReplyData landDir in Landdata)
{
LandData landdata = DSC.GetParcelInfo(landDir.parcelID);
if (landdata.Maturity == 0)
{
continue;
}
foreach (Scene scene in m_Scenes)
{
if (scene.RegionInfo.RegionID == landdata.RegionID)
{
locX = scene.RegionInfo.RegionLocX;
//.........这里部分代码省略.........
示例10: HandleMapItemRequest
public virtual void HandleMapItemRequest(IClientAPI remoteClient, uint flags,
uint EstateID, bool godlike, uint itemtype, ulong regionhandle)
{
lock (m_rootAgents)
{
if (!m_rootAgents.Contains(remoteClient.AgentId))
return;
}
uint xstart = 0;
uint ystart = 0;
OpenMetaverse.Utils.LongToUInts(m_scene.RegionInfo.RegionHandle, out xstart, out ystart);
List<mapItemReply> mapitems = new List<mapItemReply>();
int tc = Environment.TickCount;
if (itemtype == (int)OpenMetaverse.GridItemType.AgentLocations)
{
//If its local, just let it do it on its own.
if (regionhandle == 0 || regionhandle == m_scene.RegionInfo.RegionHandle)
{
//Only one person here, send a zero person response
mapItemReply mapitem = new mapItemReply();
if (m_scene.GetRootAgentCount() <= 1)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + 1);
mapitem.y = (uint)(ystart + 1);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 0;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
return;
}
m_scene.ForEachScenePresence(delegate(ScenePresence sp)
{
// Don't send a green dot for yourself
if (!sp.IsChildAgent && sp.UUID != remoteClient.AgentId)
{
mapitem = new mapItemReply();
mapitem.x = (uint)(xstart + sp.AbsolutePosition.X);
mapitem.y = (uint)(ystart + sp.AbsolutePosition.Y);
mapitem.id = UUID.Zero;
mapitem.name = Util.Md5Hash(m_scene.RegionInfo.RegionName + tc.ToString());
mapitem.Extra = 1;
mapitem.Extra2 = 0;
mapitems.Add(mapitem);
}
});
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, flags);
}
else
{
List<mapItemReply> reply;
if (!m_mapItemCache.TryGetValue(regionhandle, out reply))
{
m_itemsToRequest.Add(new MapItemRequester()
{
flags = flags,
itemtype = itemtype,
regionhandle = regionhandle,
remoteClient = remoteClient
});
if(!itemRequesterIsRunning)
threadpool.QueueEvent(GetMapItems, 3);
}
else
{
remoteClient.SendMapItemReply(mapitems.ToArray(), itemtype, 0);
}
}
}
}