mirror of
https://github.com/opensim/opensim.git
synced 2026-08-04 16:22:50 +08:00
robust: add exclude by id0; pre compile some regex searchs. not that user block by id0 or mac is not very effective and may even block wrong users!
This commit is contained in:
@@ -327,7 +327,7 @@ namespace OpenSim.Groups
|
||||
{
|
||||
return m_CacheWrapper.GetAgentGroupRoles(RequestingAgentID, AgentID, GroupID, delegate
|
||||
{
|
||||
return m_GroupsService.GetAgentGroupRoles(RequestingAgentID, AgentID, GroupID); ;
|
||||
return m_GroupsService.GetAgentGroupRoles(RequestingAgentID, AgentID, GroupID);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -60,9 +60,10 @@ namespace OpenSim.Services.HypergridService
|
||||
private static IGridUserService m_GridUserService;
|
||||
private static IBansService m_BansService;
|
||||
|
||||
private static string m_AllowedClients = string.Empty;
|
||||
private static string m_DeniedClients = string.Empty;
|
||||
private static Regex m_AllowedClientsRegex = null;
|
||||
private static Regex m_DeniedClientsRegex = null;
|
||||
private static string m_DeniedMacs = string.Empty;
|
||||
private static string m_DeniedID0s = string.Empty;
|
||||
private static bool m_ForeignAgentsAllowed = true;
|
||||
private static List<string> m_ForeignsAllowedExceptions = new List<string>();
|
||||
private static List<string> m_ForeignsDisallowedExceptions = new List<string>();
|
||||
@@ -138,27 +139,52 @@ namespace OpenSim.Services.HypergridService
|
||||
m_GridService = ServerUtils.LoadPlugin<IGridService>(gridService, args);
|
||||
m_PresenceService = ServerUtils.LoadPlugin<IPresenceService>(presenceService, args);
|
||||
|
||||
if (accountService != string.Empty)
|
||||
if (!string.IsNullOrEmpty(accountService))
|
||||
m_UserAccountService = ServerUtils.LoadPlugin<IUserAccountService>(accountService, args);
|
||||
if (homeUsersService != string.Empty)
|
||||
if (!string.IsNullOrEmpty(homeUsersService))
|
||||
m_UserAgentService = ServerUtils.LoadPlugin<IUserAgentService>(homeUsersService, args);
|
||||
if (gridUserService != string.Empty)
|
||||
if (!string.IsNullOrEmpty(gridUserService))
|
||||
m_GridUserService = ServerUtils.LoadPlugin<IGridUserService>(gridUserService, args);
|
||||
if (bansService != string.Empty)
|
||||
if (!string.IsNullOrEmpty(bansService))
|
||||
m_BansService = ServerUtils.LoadPlugin<IBansService>(bansService, args);
|
||||
|
||||
if (simService != null)
|
||||
m_SimulationService = simService;
|
||||
else if (simulationService != string.Empty)
|
||||
else if (!string.IsNullOrEmpty(simulationService))
|
||||
m_SimulationService = ServerUtils.LoadPlugin<ISimulationService>(simulationService, args);
|
||||
|
||||
string[] possibleAccessControlConfigSections = new string[] { "AccessControl", "GatekeeperService" };
|
||||
m_AllowedClients = Util.GetConfigVarFromSections<string>(
|
||||
config, "AllowedClients", possibleAccessControlConfigSections, string.Empty);
|
||||
m_DeniedClients = Util.GetConfigVarFromSections<string>(
|
||||
config, "DeniedClients", possibleAccessControlConfigSections, string.Empty);
|
||||
m_DeniedMacs = Util.GetConfigVarFromSections<string>(
|
||||
config, "DeniedMacs", possibleAccessControlConfigSections, string.Empty);
|
||||
string AllowedClients = Util.GetConfigVarFromSections<string>(config, "AllowedClients", possibleAccessControlConfigSections, string.Empty);
|
||||
if (!string.IsNullOrEmpty(AllowedClients))
|
||||
{
|
||||
try
|
||||
{
|
||||
m_AllowedClientsRegex = new Regex(AllowedClients, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
}
|
||||
catch
|
||||
{
|
||||
m_AllowedClientsRegex = null;
|
||||
m_log.Error("[GATEKEEPER SERVICE]: failed to parse AllowedClients");
|
||||
}
|
||||
}
|
||||
|
||||
string DeniedClients = Util.GetConfigVarFromSections<string>(config, "DeniedClients", possibleAccessControlConfigSections, string.Empty);
|
||||
if (!string.IsNullOrEmpty(DeniedClients))
|
||||
{
|
||||
try
|
||||
{
|
||||
m_DeniedClientsRegex = new Regex(DeniedClients, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
}
|
||||
catch
|
||||
{
|
||||
m_DeniedClientsRegex = null;
|
||||
m_log.Error("[GATEKEEPER SERVICE]: failed to parse DeniedClients");
|
||||
}
|
||||
}
|
||||
|
||||
m_DeniedMacs = Util.GetConfigVarFromSections<string>(config, "DeniedMacs", possibleAccessControlConfigSections, string.Empty);
|
||||
m_DeniedID0s = Util.GetConfigVarFromSections<string>(config, "DeniedID0s", possibleAccessControlConfigSections, string.Empty);
|
||||
|
||||
m_ForeignAgentsAllowed = serverConfig.GetBoolean("ForeignAgentsAllowed", true);
|
||||
|
||||
LoadDomainExceptionsFromConfig(serverConfig, "AllowExcept", m_ForeignsAllowedExceptions);
|
||||
@@ -190,8 +216,13 @@ namespace OpenSim.Services.HypergridService
|
||||
string value = config.GetString(variable, string.Empty);
|
||||
string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
foreach (string s in parts)
|
||||
exceptions.Add(s.Trim());
|
||||
foreach (string ps in parts)
|
||||
{
|
||||
string s = ps.Trim();
|
||||
if(!s.EndsWith("/"))
|
||||
s += '/';
|
||||
exceptions.Add(s);
|
||||
}
|
||||
}
|
||||
|
||||
public bool LinkRegion(string regionName, out UUID regionID, out ulong regionHandle, out string externalName, out string imageURL, out string reason, out int sizeX, out int sizeY)
|
||||
@@ -306,35 +337,39 @@ namespace OpenSim.Services.HypergridService
|
||||
//
|
||||
// Check client
|
||||
//
|
||||
if (!String.IsNullOrWhiteSpace(m_AllowedClients))
|
||||
if (m_AllowedClientsRegex != null)
|
||||
{
|
||||
Regex arx = new Regex(m_AllowedClients);
|
||||
Match am = arx.Match(curViewer);
|
||||
|
||||
if (!am.Success)
|
||||
lock(m_AllowedClientsRegex)
|
||||
{
|
||||
reason = "Login failed: client " + curViewer + " is not allowed";
|
||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is not allowed", curViewer);
|
||||
return false;
|
||||
Match am = m_AllowedClientsRegex.Match(curViewer);
|
||||
|
||||
if (!am.Success)
|
||||
{
|
||||
reason = "Login failed: client " + curViewer + " is not allowed";
|
||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is not allowed", curViewer);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(m_DeniedClients))
|
||||
if (m_DeniedClientsRegex != null)
|
||||
{
|
||||
Regex drx = new Regex(m_DeniedClients);
|
||||
Match dm = drx.Match(curViewer);
|
||||
|
||||
if (dm.Success)
|
||||
lock(m_DeniedClientsRegex)
|
||||
{
|
||||
reason = "Login failed: client " + curViewer + " is denied";
|
||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is denied", curViewer);
|
||||
return false;
|
||||
Match dm = m_DeniedClientsRegex.Match(curViewer);
|
||||
|
||||
if (dm.Success)
|
||||
{
|
||||
reason = "Login failed: client " + curViewer + " is denied";
|
||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client {0} is denied", curViewer);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!String.IsNullOrWhiteSpace(m_DeniedMacs))
|
||||
{
|
||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Checking users Mac {0} against list of denied macs {1} ...", curMac, m_DeniedMacs);
|
||||
//m_log.InfoFormat("[GATEKEEPER SERVICE]: Checking users Mac {0} against list of denied macs {1} ...", curMac, m_DeniedMacs);
|
||||
if (m_DeniedMacs.Contains(curMac))
|
||||
{
|
||||
reason = "Login failed: client with Mac " + curMac + " is denied";
|
||||
@@ -343,6 +378,17 @@ namespace OpenSim.Services.HypergridService
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(m_DeniedID0s))
|
||||
{
|
||||
//m_log.InfoFormat("[GATEKEEPER SERVICE]: Checking users Mac {0} against list of denied macs {1} ...", curMac, m_DeniedMacs);
|
||||
if (m_DeniedID0s.Contains(aCircuit.Id0))
|
||||
{
|
||||
reason = "Login failed: client with id0 " + aCircuit.Id0 + " is denied";
|
||||
m_log.InfoFormat("[GATEKEEPER SERVICE]: Login failed, reason: client with mac {0} is denied", aCircuit.Id0);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Authenticate the user
|
||||
//
|
||||
@@ -624,24 +670,23 @@ namespace OpenSim.Services.HypergridService
|
||||
|
||||
private bool IsException(AgentCircuitData aCircuit, List<string> exceptions)
|
||||
{
|
||||
bool exception = false;
|
||||
if (exceptions.Count > 0) // we have exceptions
|
||||
{
|
||||
// Retrieve the visitor's origin
|
||||
string userURL = aCircuit.ServiceURLs["HomeURI"].ToString();
|
||||
string userURL = aCircuit.ServiceURLs["HomeURI"].ToString().Trim();
|
||||
if (string.IsNullOrEmpty(userURL))
|
||||
return false;
|
||||
|
||||
if (!userURL.EndsWith("/"))
|
||||
userURL += "/";
|
||||
|
||||
if (exceptions.Find(delegate(string s)
|
||||
foreach(string s in exceptions)
|
||||
{
|
||||
if (!s.EndsWith("/"))
|
||||
s += "/";
|
||||
return s == userURL;
|
||||
}) != null)
|
||||
exception = true;
|
||||
if(userURL.Equals(s))
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return exception;
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool SendAgentGodKillToRegion(UUID scopeID, UUID agentID , GridUserInfo guinfo)
|
||||
|
||||
@@ -195,7 +195,12 @@ namespace OpenSim.Services.HypergridService
|
||||
string[] parts = value.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
|
||||
|
||||
foreach (string s in parts)
|
||||
exceptions[level].Add(s.Trim());
|
||||
{
|
||||
string ss = s.Trim();
|
||||
if(!ss.EndsWith("/"))
|
||||
ss += '/';
|
||||
exceptions[level].Add(ss);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -682,26 +687,22 @@ namespace OpenSim.Services.HypergridService
|
||||
|
||||
private bool IsException(string dest, int level, Dictionary<int, List<string>> exceptions)
|
||||
{
|
||||
if (!exceptions.ContainsKey(level))
|
||||
if (string.IsNullOrEmpty(dest))
|
||||
return false;
|
||||
if (!exceptions.TryGetValue(level, out List<string> excep) || excep.Count == 0)
|
||||
return false;
|
||||
|
||||
bool exception = false;
|
||||
if (exceptions[level].Count > 0) // we have exceptions
|
||||
{
|
||||
string destination = dest;
|
||||
if (!destination.EndsWith("/"))
|
||||
destination += "/";
|
||||
string destination = dest;
|
||||
if (!destination.EndsWith("/"))
|
||||
destination += "/";
|
||||
|
||||
if (exceptions[level].Find(delegate(string s)
|
||||
{
|
||||
if (!s.EndsWith("/"))
|
||||
s += "/";
|
||||
return s == destination;
|
||||
}) != null)
|
||||
exception = true;
|
||||
foreach(string s in excep)
|
||||
{
|
||||
if (destination.Equals(s))
|
||||
return true;
|
||||
}
|
||||
|
||||
return exception;
|
||||
return false;
|
||||
}
|
||||
|
||||
private void StoreTravelInfo(TravelingAgentInfo travel)
|
||||
|
||||
@@ -84,9 +84,10 @@ namespace OpenSim.Services.LLLoginService
|
||||
protected int m_MaxAgentGroups = 42;
|
||||
protected string m_DestinationGuide;
|
||||
protected string m_AvatarPicker;
|
||||
protected string m_AllowedClients;
|
||||
protected string m_DeniedClients;
|
||||
protected Regex m_AllowedClientsRegex;
|
||||
protected Regex m_DeniedClientsRegex;
|
||||
protected string m_DeniedMacs;
|
||||
protected string m_DeniedID0s;
|
||||
protected string m_MessageUrl;
|
||||
protected string m_DSTZone;
|
||||
protected bool m_allowDuplicatePresences = false;
|
||||
@@ -132,13 +133,37 @@ namespace OpenSim.Services.LLLoginService
|
||||
|
||||
m_allowLoginFallbackToAnyRegion = m_LoginServerConfig.GetBoolean("AllowLoginFallbackToAnyRegion", m_allowLoginFallbackToAnyRegion);
|
||||
|
||||
string[] possibleAccessControlConfigSections = new string[] { "AccessControl", "LoginService" };
|
||||
m_AllowedClients = Util.GetConfigVarFromSections<string>(
|
||||
config, "AllowedClients", possibleAccessControlConfigSections, string.Empty);
|
||||
m_DeniedClients = Util.GetConfigVarFromSections<string>(
|
||||
config, "DeniedClients", possibleAccessControlConfigSections, string.Empty);
|
||||
m_DeniedMacs = Util.GetConfigVarFromSections<string>(
|
||||
config, "DeniedMacs", possibleAccessControlConfigSections, string.Empty);
|
||||
string[] accessControlConfigSections = new string[] { "AccessControl", "LoginService" };
|
||||
string AllowedClients = Util.GetConfigVarFromSections<string>(config, "AllowedClients", accessControlConfigSections, string.Empty);
|
||||
if (!string.IsNullOrEmpty(AllowedClients))
|
||||
{
|
||||
try
|
||||
{
|
||||
m_AllowedClientsRegex = new Regex(AllowedClients, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
}
|
||||
catch
|
||||
{
|
||||
m_AllowedClientsRegex = null;
|
||||
m_log.Error("[GATEKEEPER SERVICE]: failed to parse AllowedClients");
|
||||
}
|
||||
}
|
||||
|
||||
string DeniedClients = Util.GetConfigVarFromSections<string>(config, "DeniedClients", accessControlConfigSections, string.Empty);
|
||||
if (!string.IsNullOrEmpty(DeniedClients))
|
||||
{
|
||||
try
|
||||
{
|
||||
m_DeniedClientsRegex = new Regex(DeniedClients, RegexOptions.Compiled | RegexOptions.IgnoreCase);
|
||||
}
|
||||
catch
|
||||
{
|
||||
m_DeniedClientsRegex = null;
|
||||
m_log.Error("[GATEKEEPER SERVICE]: failed to parse DeniedClients");
|
||||
}
|
||||
}
|
||||
|
||||
m_DeniedMacs = Util.GetConfigVarFromSections<string>(config, "DeniedMacs", accessControlConfigSections, string.Empty);
|
||||
m_DeniedID0s = Util.GetConfigVarFromSections<string>(config, "DeniedID0s", accessControlConfigSections, string.Empty);
|
||||
|
||||
m_MessageUrl = m_LoginServerConfig.GetString("MessageUrl", string.Empty);
|
||||
m_DSTZone = m_LoginServerConfig.GetString("DSTZone", "America/Los_Angeles;Pacific Standard Time");
|
||||
@@ -307,37 +332,41 @@ namespace OpenSim.Services.LLLoginService
|
||||
else
|
||||
clientNameToCheck = channel + " " + clientVersion;
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(m_AllowedClients))
|
||||
if (m_AllowedClientsRegex != null)
|
||||
{
|
||||
Regex arx = new Regex(m_AllowedClients);
|
||||
Match am = arx.Match(clientNameToCheck);
|
||||
|
||||
if (!am.Success)
|
||||
lock(m_AllowedClientsRegex)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[LLOGIN SERVICE]: Login failed for {0} {1}, reason: client {2} is not allowed",
|
||||
firstName, lastName, clientNameToCheck);
|
||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||
Match am = m_AllowedClientsRegex.Match(clientNameToCheck);
|
||||
|
||||
if (!am.Success)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[LLOGIN SERVICE]: Login failed for {0} {1}, reason: client {2} is not allowed",
|
||||
firstName, lastName, clientNameToCheck);
|
||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(m_DeniedClients))
|
||||
if (m_DeniedClientsRegex != null)
|
||||
{
|
||||
Regex drx = new Regex(m_DeniedClients);
|
||||
Match dm = drx.Match(clientNameToCheck);
|
||||
|
||||
if (dm.Success)
|
||||
lock(m_DeniedClientsRegex)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[LLOGIN SERVICE]: Login failed for {0} {1}, reason: client {2} is denied",
|
||||
firstName, lastName, clientNameToCheck);
|
||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||
Match dm = m_DeniedClientsRegex.Match(clientNameToCheck);
|
||||
|
||||
if (dm.Success)
|
||||
{
|
||||
m_log.InfoFormat(
|
||||
"[LLOGIN SERVICE]: Login failed for {0} {1}, reason: client {2} is denied",
|
||||
firstName, lastName, clientNameToCheck);
|
||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(m_DeniedMacs))
|
||||
{
|
||||
m_log.InfoFormat("[LLOGIN SERVICE]: Checking users Mac {0} against list of denied macs {1} ...", curMac, m_DeniedMacs);
|
||||
//m_log.InfoFormat("[LLOGIN SERVICE]: Checking users Mac {0} against list of denied macs {1} ...", curMac, m_DeniedMacs);
|
||||
if (m_DeniedMacs.Contains(curMac))
|
||||
{
|
||||
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: client with mac {0} is denied", curMac);
|
||||
@@ -345,6 +374,16 @@ namespace OpenSim.Services.LLLoginService
|
||||
}
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(m_DeniedID0s))
|
||||
{
|
||||
//m_log.InfoFormat("[LLOGIN SERVICE]: Checking users Mac {0} against list of denied macs {1} ...", curMac, m_DeniedMacs);
|
||||
if (m_DeniedID0s.Contains(id0))
|
||||
{
|
||||
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: client with ido {0} is denied", id0);
|
||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Get the account and check that it exists
|
||||
//
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
<? llsd/notation ?>
|
||||
<? llsd/notation ?>
|
||||
{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.41,r0.41,r0.41],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r1,r0.526097,r1],'cloud_pos_density2':[r1,r0.526097,r0.125],'cloud_scale':r0.42,'cloud_scroll_rate':[r0.2,r0.0109997],'cloud_shadow':r0.27,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r1,'glow':[r5,r0.001,r-0.48],'halo_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'ice_level':r0,'legacy_haze':{'ambient':[r1.05,r1.05,r1.05],'blue_density':[r0.244758,r0.448723,r0.76],'blue_horizon':[r0.495484,r0.495484,r0.64],'density_multiplier':r0.00018,'distance_multiplier':r0.8,'haze_density':r0.7,'haze_horizon':r0.19},'max_y':r1605,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':uec4b9f0b-d008-45c6-96a4-01dd947ac621,'moon_rotation':[r0,r-0.707107,r0,r-0.707107],'moon_scale':r1,'name':'Midday','planet_radius':r6360,'rainbow_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.707107,r0,r0.707107],'sun_scale':r1,'sunlight_color':[r0.734211,r0.781579,r0.9,r0.3],'type':'sky'}
|
||||
@@ -1,2 +1,2 @@
|
||||
<? llsd/notation ?>
|
||||
<? llsd/notation ?>
|
||||
{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.226154,r0.226154,r0.226154],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r1,r0.526097,r0.88],'cloud_pos_density2':[r1,r0.526097,r0.125],'cloud_scale':r0.42,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.27,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r1,'glow':[r5,r0.001,r-0.48],'halo_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'ice_level':r0,'legacy_haze':{'ambient':[r0.20405,r0.242467,r0.33],'blue_density':[r0.45,r0.45,r0.45],'blue_horizon':[r0.24,r0.24,r0.24],'density_multiplier':r0.0003,'distance_multiplier':r0.0001,'haze_density':r4,'haze_horizon':r0},'max_y':r906.2,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':uec4b9f0b-d008-45c6-96a4-01dd947ac621,'moon_rotation':[r0,r-0.707107,r0,r0.707107],'moon_scale':r1,'name':'Midnight','planet_radius':r6360,'rainbow_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r500,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.707107,r0,r-0.707107],'sun_scale':r1,'sunlight_color':[r0.348767,r0.355742,r0.66,r0.22],'type':'sky'}
|
||||
@@ -1,2 +1,2 @@
|
||||
<? llsd/notation ?>
|
||||
<? llsd/notation ?>
|
||||
{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.226166,r0.226166,r0.226166],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r1,r0.526097,r0.88],'cloud_pos_density2':[r1,r0.526097,r0.125],'cloud_scale':r0.42,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.27,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r1,'glow':[r5.001,r0.001,r-0.480001],'halo_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'ice_level':r0,'legacy_haze':{'ambient':[r0.81,r0.462898,r0.63],'blue_density':[r0.157932,r0.434996,r0.87],'blue_horizon':[r0.206732,r0.409883,r0.48],'density_multiplier':r0.00062,'distance_multiplier':r2.69993,'haze_density':r0.54,'haze_horizon':r0.16},'max_y':r563,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':uec4b9f0b-d008-45c6-96a4-01dd947ac621,'moon_rotation':[r0,r0.99889,r-9.23811e-007,r0.0471065],'moon_scale':r1,'name':'Sunrise','planet_radius':r6360,'rainbow_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.0471064,r0,r0.99889],'sun_scale':r1,'sunlight_color':[r2.37,r2.37,r2.37,r0.79],'type':'sky'}
|
||||
@@ -1,2 +1,2 @@
|
||||
<? llsd/notation ?>
|
||||
<? llsd/notation ?>
|
||||
{'absorption_config':[{'constant_term':r0,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r25000},{'constant_term':r1,'exp_scale':r0,'exp_term':r0,'linear_term':r0,'width':r0}],'bloom_id':u3c59f7fe-9dc8-47f9-8aaf-a9dd1fbc3bef,'cloud_color':[r0.226154,r0.226154,r0.226154],'cloud_id':u1dc1368f-e8fe-f02d-a08d-9d9f11c1af6b,'cloud_pos_density1':[r1,r0.526097,r0.88],'cloud_pos_density2':[r1,r0.526097,r0.125],'cloud_scale':r0.42,'cloud_scroll_rate':[r0.4994,r0.0109997],'cloud_shadow':r0.27,'cloud_variance':r0,'dome_offset':r0.96,'dome_radius':r15000,'droplet_radius':r800,'gamma':r1,'glow':[r5,r0.001,r-0.48],'halo_id':u12149143-f599-91a7-77ac-b52a3c0f59cd,'ice_level':r0,'legacy_haze':{'ambient':[r1.02,r0.81,r0.81],'blue_density':[r0.145225,r0.399997,r0.800002],'blue_horizon':[r0.107676,r0.213487,r0.25],'density_multiplier':r0.00046,'distance_multiplier':r1,'haze_density':r0.7,'haze_horizon':r0.16},'max_y':r562.5,'mie_config':[{'anisotropy':r0.8,'constant_term':r0,'exp_scale':r-0.000833333,'exp_term':r1,'linear_term':r0,'width':r0}],'moisture_level':r0,'moon_brightness':r0.5,'moon_id':uec4b9f0b-d008-45c6-96a4-01dd947ac621,'moon_rotation':[r0,r0.0376899,r4.36181e-008,r0.99929],'moon_scale':r1,'name':'Sunset','planet_radius':r6360,'rainbow_id':u11b4c57c-56b3-04ed-1f82-2004363882e4,'rayleigh_config':[{'constant_term':r0,'exp_scale':r-0.000125,'exp_term':r1,'linear_term':r0,'width':r0}],'sky_bottom_radius':r6360,'sky_top_radius':r6420,'star_brightness':r0,'sun_arc_radians':r0.00045,'sun_id':u00000000-0000-0000-0000-000000000000,'sun_rotation':[r0,r-0.99929,r0,r0.03769],'sun_scale':r1,'sunlight_color':[r2.83857,r2.83857,r2.83857,r1],'type':'sky'}
|
||||
Reference in New Issue
Block a user