aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs')
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs63
1 files changed, 54 insertions, 9 deletions
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index a8eb824..3dff98f 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -69,6 +69,8 @@ namespace OpenSim.Region.ScriptEngine.Common
69 69
70 private DateTime m_timer = DateTime.Now; 70 private DateTime m_timer = DateTime.Now;
71 private string m_state = "default"; 71 private string m_state = "default";
72 private bool m_waitingForScriptAnswer=false;
73
72 74
73 public string State 75 public string State
74 { 76 {
@@ -1950,11 +1952,6 @@ namespace OpenSim.Region.ScriptEngine.Common
1950 1952
1951 m_host.AddScriptLPS(1); 1953 m_host.AddScriptLPS(1);
1952 1954
1953 // Cannot combine debit with anything else since the new debit perms dialog has been introduced.
1954 if((perm & BuiltIn_Commands_BaseClass.PERMISSION_DEBIT) != 0 &&
1955 perm != BuiltIn_Commands_BaseClass.PERMISSION_DEBIT)
1956 perm &= ~BuiltIn_Commands_BaseClass.PERMISSION_DEBIT;// Silently ignore debit request
1957
1958 bool attachment=false; // Attachments not implemented yet. TODO: reflect real attachemnt state 1955 bool attachment=false; // Attachments not implemented yet. TODO: reflect real attachemnt state
1959 1956
1960 if(attachment && agent == m_host.OwnerID) 1957 if(attachment && agent == m_host.OwnerID)
@@ -1993,15 +1990,48 @@ namespace OpenSim.Region.ScriptEngine.Common
1993 } 1990 }
1994 } 1991 }
1995 1992
1996 // TODO: Implement perms dialog sending 1993 if (World.m_innerScene.ScenePresences.ContainsKey(agentID))
1994 {
1995 string ownerName=resolveName(m_host.ParentGroup.RootPart.OwnerID);
1996 if(ownerName == String.Empty)
1997 ownerName="(hippos)";
1998
1999 ScenePresence presence = World.m_innerScene.ScenePresences[agentID];
2000 if(!m_waitingForScriptAnswer)
2001 {
2002 m_host.TaskInventory[invItemID].PermsGranter=agentID;
2003 m_host.TaskInventory[invItemID].PermsMask=0;
2004 presence.ControllingClient.OnScriptAnswer+=handleScriptAnswer;
2005 m_waitingForScriptAnswer=true;
2006 }
2007
2008 presence.ControllingClient.SendScriptQuestion(m_host.UUID, m_host.ParentGroup.RootPart.Name, ownerName, invItemID, perm);
2009 return;
2010 }
1997 2011
1998 // Refuse perms for now 2012 // Requested agent is not in range, refuse perms
1999 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue( 2013 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
2000 m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {(int)0}); 2014 m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {(int)0});
2001
2002 NotImplemented("llRequestPermissions");
2003 } 2015 }
2004 2016
2017 void handleScriptAnswer(IClientAPI client, LLUUID taskID, LLUUID itemID, int answer)
2018 {
2019 if(taskID != m_host.UUID)
2020 return;
2021
2022 LLUUID invItemID=InventorySelf();
2023
2024 if(invItemID == LLUUID.Zero)
2025 return;
2026
2027 client.OnScriptAnswer-=handleScriptAnswer;
2028 m_waitingForScriptAnswer=false;
2029
2030 m_host.TaskInventory[invItemID].PermsMask=answer;
2031 m_ScriptEngine.m_EventQueueManager.AddToScriptQueue(
2032 m_localID, m_itemID, "run_time_permissions", EventQueueManager.llDetectNull, new Object[] {(int)answer});
2033 }
2034
2005 public string llGetPermissionsKey() 2035 public string llGetPermissionsKey()
2006 { 2036 {
2007 m_host.AddScriptLPS(1); 2037 m_host.AddScriptLPS(1);
@@ -3924,9 +3954,24 @@ namespace OpenSim.Region.ScriptEngine.Common
3924 LSLError("First parameter to llDialog needs to be a key"); 3954 LSLError("First parameter to llDialog needs to be a key");
3925 return; 3955 return;
3926 } 3956 }
3957 if(buttons.Length > 12)
3958 {
3959 LSLError("No more than 12 buttons can be shown");
3960 return;
3961 }
3927 string[] buts = new string[buttons.Length]; 3962 string[] buts = new string[buttons.Length];
3928 for(int i = 0; i < buttons.Length; i++) 3963 for(int i = 0; i < buttons.Length; i++)
3929 { 3964 {
3965 if(buttons.Data[i].ToString() == String.Empty)
3966 {
3967 LSLError("button label cannot be blank");
3968 return;
3969 }
3970 if(buttons.Data[i].ToString().Length > 24)
3971 {
3972 LSLError("button label cannot be longer than 24 characters");
3973 return;
3974 }
3930 buts[i] = buttons.Data[i].ToString(); 3975 buts[i] = buttons.Data[i].ToString();
3931 } 3976 }
3932 World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts); 3977 World.SendDialogToUser(av, m_host.Name, m_host.UUID, m_host.OwnerID, message, new LLUUID("00000000-0000-2222-3333-100000001000"), chat_channel, buts);