diff options
Diffstat (limited to 'OpenSim')
5 files changed, 89 insertions, 0 deletions
diff --git a/OpenSim/Framework/EstateSettings.cs b/OpenSim/Framework/EstateSettings.cs index afbdd49..142b783 100644 --- a/OpenSim/Framework/EstateSettings.cs +++ b/OpenSim/Framework/EstateSettings.cs | |||
@@ -425,5 +425,11 @@ namespace OpenSim.Framework | |||
425 | AllowParcelChanges = ((regionFlags & (ulong)RegionFlags.AllowParcelChanges) == (ulong)RegionFlags.AllowParcelChanges); | 425 | AllowParcelChanges = ((regionFlags & (ulong)RegionFlags.AllowParcelChanges) == (ulong)RegionFlags.AllowParcelChanges); |
426 | AllowSetHome = ((regionFlags & (ulong)RegionFlags.AllowSetHome) == (ulong)RegionFlags.AllowSetHome); | 426 | AllowSetHome = ((regionFlags & (ulong)RegionFlags.AllowSetHome) == (ulong)RegionFlags.AllowSetHome); |
427 | } | 427 | } |
428 | |||
429 | public bool GroupAccess(UUID groupID) | ||
430 | { | ||
431 | return l_EstateGroups.Contains(groupID); | ||
432 | } | ||
433 | |||
428 | } | 434 | } |
429 | } | 435 | } |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 23e3e15..9c4bfb6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -11516,6 +11516,75 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11516 | return list; | 11516 | return list; |
11517 | } | 11517 | } |
11518 | 11518 | ||
11519 | public LSL_Integer llManageEstateAccess(int action, string avatar) | ||
11520 | { | ||
11521 | m_host.AddScriptLPS(1); | ||
11522 | EstateSettings estate = World.RegionInfo.EstateSettings; | ||
11523 | bool isAccount = false; | ||
11524 | bool isGroup = false; | ||
11525 | |||
11526 | if (!estate.IsEstateOwner(m_host.OwnerID) || !estate.IsEstateManager(m_host.OwnerID)) | ||
11527 | return 0; | ||
11528 | |||
11529 | UUID id = new UUID(); | ||
11530 | if (!UUID.TryParse(avatar, out id)) | ||
11531 | return 0; | ||
11532 | |||
11533 | UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, id); | ||
11534 | isAccount = account != null ? true : false; | ||
11535 | if (!isAccount) | ||
11536 | { | ||
11537 | IGroupsModule groups = World.RequestModuleInterface<IGroupsModule>(); | ||
11538 | if (groups != null) | ||
11539 | { | ||
11540 | GroupRecord group = groups.GetGroupRecord(id); | ||
11541 | isGroup = group != null ? true : false; | ||
11542 | if (!isGroup) | ||
11543 | return 0; | ||
11544 | } | ||
11545 | else | ||
11546 | return 0; | ||
11547 | } | ||
11548 | |||
11549 | switch (action) | ||
11550 | { | ||
11551 | case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_AGENT_ADD: | ||
11552 | if (!isAccount) return 0; | ||
11553 | if (estate.HasAccess(id)) return 1; | ||
11554 | if (estate.IsBanned(id, World.GetUserFlags(id))) | ||
11555 | estate.RemoveBan(id); | ||
11556 | estate.AddEstateUser(id); | ||
11557 | break; | ||
11558 | case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_AGENT_REMOVE: | ||
11559 | if (!isAccount || !estate.HasAccess(id)) return 0; | ||
11560 | estate.RemoveEstateUser(id); | ||
11561 | break; | ||
11562 | case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_GROUP_ADD: | ||
11563 | if (!isGroup) return 0; | ||
11564 | if (estate.GroupAccess(id)) return 1; | ||
11565 | estate.AddEstateGroup(id); | ||
11566 | break; | ||
11567 | case ScriptBaseClass.ESTATE_ACCESS_ALLOWED_GROUP_REMOVE: | ||
11568 | if (!isGroup || !estate.GroupAccess(id)) return 0; | ||
11569 | estate.RemoveEstateGroup(id); | ||
11570 | break; | ||
11571 | case ScriptBaseClass.ESTATE_ACCESS_BANNED_AGENT_ADD: | ||
11572 | if (!isAccount) return 0; | ||
11573 | if (estate.IsBanned(id, World.GetUserFlags(id))) return 1; | ||
11574 | EstateBan ban = new EstateBan(); | ||
11575 | ban.EstateID = estate.EstateID; | ||
11576 | ban.BannedUserID = id; | ||
11577 | estate.AddBan(ban); | ||
11578 | break; | ||
11579 | case ScriptBaseClass.ESTATE_ACCESS_BANNED_AGENT_REMOVE: | ||
11580 | if (!isAccount || !estate.IsBanned(id, World.GetUserFlags(id))) return 0; | ||
11581 | estate.RemoveBan(id); | ||
11582 | break; | ||
11583 | default: return 0; | ||
11584 | } | ||
11585 | return 1; | ||
11586 | } | ||
11587 | |||
11519 | #region Not Implemented | 11588 | #region Not Implemented |
11520 | // | 11589 | // |
11521 | // Listing the unimplemented lsl functions here, please move | 11590 | // Listing the unimplemented lsl functions here, please move |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index f4de93e..73131e6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs | |||
@@ -244,6 +244,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
244 | void llLoopSound(string sound, double volume); | 244 | void llLoopSound(string sound, double volume); |
245 | void llLoopSoundMaster(string sound, double volume); | 245 | void llLoopSoundMaster(string sound, double volume); |
246 | void llLoopSoundSlave(string sound, double volume); | 246 | void llLoopSoundSlave(string sound, double volume); |
247 | LSL_Integer llManageEstateAccess(int action, string avatar); | ||
247 | void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset); | 248 | void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset); |
248 | void llMakeFire(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset); | 249 | void llMakeFire(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset); |
249 | void llMakeFountain(int particles, double scale, double vel, double lifetime, double arc, int bounce, string texture, LSL_Vector offset, double bounce_offset); | 250 | void llMakeFountain(int particles, double scale, double vel, double lifetime, double arc, int bounce, string texture, LSL_Vector offset, double bounce_offset); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs index 32226f9..11a8883 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Constants.cs | |||
@@ -435,6 +435,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
435 | public const int REGION_FLAG_ALLOW_DIRECT_TELEPORT = 0x100000; // region allows direct teleports | 435 | public const int REGION_FLAG_ALLOW_DIRECT_TELEPORT = 0x100000; // region allows direct teleports |
436 | public const int REGION_FLAG_RESTRICT_PUSHOBJECT = 0x400000; // region restricts llPushObject | 436 | public const int REGION_FLAG_RESTRICT_PUSHOBJECT = 0x400000; // region restricts llPushObject |
437 | 437 | ||
438 | //llManageEstateAccess | ||
439 | public const int ESTATE_ACCESS_ALLOWED_AGENT_ADD = 0; | ||
440 | public const int ESTATE_ACCESS_ALLOWED_AGENT_REMOVE = 1; | ||
441 | public const int ESTATE_ACCESS_ALLOWED_GROUP_ADD = 2; | ||
442 | public const int ESTATE_ACCESS_ALLOWED_GROUP_REMOVE = 3; | ||
443 | public const int ESTATE_ACCESS_BANNED_AGENT_ADD = 4; | ||
444 | public const int ESTATE_ACCESS_BANNED_AGENT_REMOVE = 5; | ||
445 | |||
438 | public static readonly LSLInteger PAY_HIDE = new LSLInteger(-1); | 446 | public static readonly LSLInteger PAY_HIDE = new LSLInteger(-1); |
439 | public static readonly LSLInteger PAY_DEFAULT = new LSLInteger(-2); | 447 | public static readonly LSLInteger PAY_DEFAULT = new LSLInteger(-2); |
440 | 448 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index e0c81c7..a27899f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs | |||
@@ -1071,6 +1071,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
1071 | m_LSL_Functions.llLoopSoundSlave(sound, volume); | 1071 | m_LSL_Functions.llLoopSoundSlave(sound, volume); |
1072 | } | 1072 | } |
1073 | 1073 | ||
1074 | public LSL_Integer llManageEstateAccess(int action, string avatar) | ||
1075 | { | ||
1076 | return m_LSL_Functions.llManageEstateAccess(action, avatar); | ||
1077 | } | ||
1078 | |||
1074 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) | 1079 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) |
1075 | { | 1080 | { |
1076 | m_LSL_Functions.llMakeExplosion(particles, scale, vel, lifetime, arc, texture, offset); | 1081 | m_LSL_Functions.llMakeExplosion(particles, scale, vel, lifetime, arc, texture, offset); |