Merge branch 'master' of /var/git/opensim/

viewer-2-initial-appearance
opensim mirror account 2010-11-16 18:00:07 -08:00
commit 36495f6992
5 changed files with 61 additions and 12 deletions

View File

@ -2298,5 +2298,21 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
}); });
return result; return result;
} }
/// <summary>
/// Convert a unix time to a llGetTimestamp() like string
/// </summary>
/// <param name="unixTime"></param>
/// <returns></returns>
public LSL_String osUnixTimeToTimestamp(long time)
{
CheckThreatLevel(ThreatLevel.VeryLow, "osUnixTimeToTimestamp");
long baseTicks = 621355968000000000;
long tickResolution = 10000000;
long epochTicks = (time * tickResolution) + baseTicks;
DateTime date = new DateTime(epochTicks);
return date.ToString("yyyy-MM-ddTHH:mm:ss.fffffffZ");
}
} }
} }

View File

@ -184,5 +184,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
LSL_List osGetAvatarList(); LSL_List osGetAvatarList();
LSL_String osUnixTimeToTimestamp(long time);
} }
} }

View File

@ -678,26 +678,32 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{ {
return m_OSSL_Functions.osGetSimulatorMemory(); return m_OSSL_Functions.osGetSimulatorMemory();
} }
public void osKickAvatar(string FirstName,string SurName,string alert) public void osKickAvatar(string FirstName,string SurName,string alert)
{ {
m_OSSL_Functions.osKickAvatar(FirstName, SurName, alert); m_OSSL_Functions.osKickAvatar(FirstName, SurName, alert);
} }
public void osSetSpeed(string UUID, float SpeedModifier) public void osSetSpeed(string UUID, float SpeedModifier)
{ {
m_OSSL_Functions.osSetSpeed(UUID, SpeedModifier); m_OSSL_Functions.osSetSpeed(UUID, SpeedModifier);
} }
public void osCauseDamage(string avatar, double damage) public void osCauseDamage(string avatar, double damage)
{ {
m_OSSL_Functions.osCauseDamage(avatar, damage); m_OSSL_Functions.osCauseDamage(avatar, damage);
} }
public void osCauseHealing(string avatar, double healing) public void osCauseHealing(string avatar, double healing)
{ {
m_OSSL_Functions.osCauseHealing(avatar, healing); m_OSSL_Functions.osCauseHealing(avatar, healing);
} }
public LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules) public LSL_List osGetPrimitiveParams(LSL_Key prim, LSL_List rules)
{ {
return m_OSSL_Functions.osGetPrimitiveParams(prim, rules); return m_OSSL_Functions.osGetPrimitiveParams(prim, rules);
} }
public void osSetPrimitiveParams(LSL_Key prim, LSL_List rules) public void osSetPrimitiveParams(LSL_Key prim, LSL_List rules)
{ {
m_OSSL_Functions.osSetPrimitiveParams(prim, rules); m_OSSL_Functions.osSetPrimitiveParams(prim, rules);
@ -717,5 +723,10 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
{ {
return m_OSSL_Functions.osGetAvatarList(); return m_OSSL_Functions.osGetAvatarList();
} }
public LSL_String osUnixTimeToTimestamp(long time)
{
return m_OSSL_Functions.osUnixTimeToTimestamp(time);
}
} }
} }

View File

@ -28,6 +28,7 @@
using System; using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Net; using System.Net;
using System.Reflection; using System.Reflection;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
@ -427,12 +428,9 @@ namespace OpenSim.Services.LLLoginService
{ {
m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region", m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region",
account.FirstName, account.LastName); account.FirstName, account.LastName);
defaults = m_GridService.GetRegionsByName(scopeID, "", 1); region = FindAlternativeRegion(scopeID);
if (defaults != null && defaults.Count > 0) if (region != null)
{
region = defaults[0];
where = "safe"; where = "safe";
}
} }
} }
@ -459,12 +457,9 @@ namespace OpenSim.Services.LLLoginService
else else
{ {
m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region"); m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region");
defaults = m_GridService.GetRegionsByName(scopeID, "", 1); region = FindAlternativeRegion(scopeID);
if (defaults != null && defaults.Count > 0) if (region != null)
{
region = defaults[0];
where = "safe"; where = "safe";
}
} }
} }
@ -564,6 +559,31 @@ namespace OpenSim.Services.LLLoginService
} }
private GridRegion FindAlternativeRegion(UUID scopeID)
{
List<GridRegion> hyperlinks = null;
List<GridRegion> regions = m_GridService.GetFallbackRegions(scopeID, 1000 * (int)Constants.RegionSize, 1000 * (int)Constants.RegionSize);
if (regions != null && regions.Count > 0)
{
hyperlinks = m_GridService.GetHyperlinks(scopeID);
IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks);
if (availableRegions.Count() > 0)
return availableRegions.ElementAt(0);
}
// No fallbacks, try to find an arbitrary region that is not a hyperlink
// maxNumber is fixed for now; maybe use some search pattern with increasing maxSize here?
regions = m_GridService.GetRegionsByName(scopeID, "", 10);
if (regions != null && regions.Count > 0)
{
if (hyperlinks == null)
hyperlinks = m_GridService.GetHyperlinks(scopeID);
IEnumerable<GridRegion> availableRegions = regions.Except(hyperlinks);
if (availableRegions.Count() > 0)
return availableRegions.ElementAt(0);
}
return null;
}
private GridRegion FindForeignRegion(string domainName, uint port, string regionName, out GridRegion gatekeeper) private GridRegion FindForeignRegion(string domainName, uint port, string regionName, out GridRegion gatekeeper)
{ {
gatekeeper = new GridRegion(); gatekeeper = new GridRegion();

View File

@ -1214,6 +1214,7 @@
<ReferencePath>../../../bin/</ReferencePath> <ReferencePath>../../../bin/</ReferencePath>
<Reference name="System"/> <Reference name="System"/>
<Reference name="System.Core"/>
<Reference name="OpenSim.Framework"/> <Reference name="OpenSim.Framework"/>
<Reference name="OpenSim.Framework.Capabilities"/> <Reference name="OpenSim.Framework.Capabilities"/>
<Reference name="OpenSim.Framework.Console"/> <Reference name="OpenSim.Framework.Console"/>