diff options
author | Melanie | 2013-01-23 18:58:29 +0100 |
---|---|---|
committer | Melanie | 2013-01-23 19:45:36 +0000 |
commit | 6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba (patch) | |
tree | 2ca64915b5af8719a7247b4fc966c51fa5d07a0e | |
parent | Merge branch 'master' of /home/opensim/var/repo/opensim (diff) | |
download | opensim-SC_OLD-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.zip opensim-SC_OLD-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.tar.gz opensim-SC_OLD-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.tar.bz2 opensim-SC_OLD-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.tar.xz |
Remove the return value from llGiveMoney and add llTransferLindenDollars. Also
make llGiveMoney async so the script thread is not held up waiting for comms
to an external server.
3 files changed, 114 insertions, 33 deletions
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs index 507c399..632b73f 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs | |||
@@ -2738,42 +2738,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
2738 | return src.ToLower(); | 2738 | return src.ToLower(); |
2739 | } | 2739 | } |
2740 | 2740 | ||
2741 | public LSL_Integer llGiveMoney(string destination, int amount) | 2741 | public void llGiveMoney(string destination, int amount) |
2742 | { | 2742 | { |
2743 | m_host.AddScriptLPS(1); | 2743 | Util.FireAndForget(x => |
2744 | |||
2745 | if (m_item.PermsGranter == UUID.Zero) | ||
2746 | return 0; | ||
2747 | |||
2748 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) | ||
2749 | { | 2744 | { |
2750 | LSLError("No permissions to give money"); | 2745 | m_host.AddScriptLPS(1); |
2751 | return 0; | ||
2752 | } | ||
2753 | 2746 | ||
2754 | UUID toID = new UUID(); | 2747 | if (m_item.PermsGranter == UUID.Zero) |
2748 | return; | ||
2755 | 2749 | ||
2756 | if (!UUID.TryParse(destination, out toID)) | 2750 | if ((m_item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) |
2757 | { | 2751 | { |
2758 | LSLError("Bad key in llGiveMoney"); | 2752 | LSLError("No permissions to give money"); |
2759 | return 0; | 2753 | return; |
2760 | } | 2754 | } |
2761 | 2755 | ||
2762 | IMoneyModule money = World.RequestModuleInterface<IMoneyModule>(); | 2756 | UUID toID = new UUID(); |
2763 | 2757 | ||
2764 | if (money == null) | 2758 | if (!UUID.TryParse(destination, out toID)) |
2765 | { | 2759 | { |
2766 | NotImplemented("llGiveMoney"); | 2760 | LSLError("Bad key in llGiveMoney"); |
2767 | return 0; | 2761 | return; |
2768 | } | 2762 | } |
2769 | 2763 | ||
2770 | bool result = money.ObjectGiveMoney( | 2764 | IMoneyModule money = World.RequestModuleInterface<IMoneyModule>(); |
2771 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); | ||
2772 | 2765 | ||
2773 | if (result) | 2766 | if (money == null) |
2774 | return 1; | 2767 | { |
2768 | NotImplemented("llGiveMoney"); | ||
2769 | return; | ||
2770 | } | ||
2775 | 2771 | ||
2776 | return 0; | 2772 | money.ObjectGiveMoney( |
2773 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); | ||
2774 | }); | ||
2777 | } | 2775 | } |
2778 | 2776 | ||
2779 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) | 2777 | public void llMakeExplosion(int particles, double scale, double vel, double lifetime, double arc, string texture, LSL_Vector offset) |
@@ -6839,7 +6837,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6839 | { | 6837 | { |
6840 | m_host.AddScriptLPS(1); | 6838 | m_host.AddScriptLPS(1); |
6841 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); | 6839 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); |
6842 | if (xmlrpcMod.IsEnabled()) | 6840 | if (xmlrpcMod != null && xmlrpcMod.IsEnabled()) |
6843 | { | 6841 | { |
6844 | UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_host.LocalId, m_item.ItemID, UUID.Zero); | 6842 | UUID channelID = xmlrpcMod.OpenXMLRPCChannel(m_host.LocalId, m_item.ItemID, UUID.Zero); |
6845 | IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface<IXmlRpcRouter>(); | 6843 | IXmlRpcRouter xmlRpcRouter = m_ScriptEngine.World.RequestModuleInterface<IXmlRpcRouter>(); |
@@ -6871,6 +6869,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6871 | m_host.AddScriptLPS(1); | 6869 | m_host.AddScriptLPS(1); |
6872 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); | 6870 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); |
6873 | ScriptSleep(3000); | 6871 | ScriptSleep(3000); |
6872 | if (xmlrpcMod == null) | ||
6873 | return ""; | ||
6874 | return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString(); | 6874 | return (xmlrpcMod.SendRemoteData(m_host.LocalId, m_item.ItemID, channel, dest, idata, sdata)).ToString(); |
6875 | } | 6875 | } |
6876 | 6876 | ||
@@ -6878,7 +6878,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6878 | { | 6878 | { |
6879 | m_host.AddScriptLPS(1); | 6879 | m_host.AddScriptLPS(1); |
6880 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); | 6880 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); |
6881 | xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); | 6881 | if (xmlrpcMod != null) |
6882 | xmlrpcMod.RemoteDataReply(channel, message_id, sdata, idata); | ||
6882 | ScriptSleep(3000); | 6883 | ScriptSleep(3000); |
6883 | } | 6884 | } |
6884 | 6885 | ||
@@ -6893,7 +6894,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
6893 | } | 6894 | } |
6894 | 6895 | ||
6895 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); | 6896 | IXMLRPC xmlrpcMod = m_ScriptEngine.World.RequestModuleInterface<IXMLRPC>(); |
6896 | xmlrpcMod.CloseXMLRPCChannel((UUID)channel); | 6897 | if (xmlrpcMod != null) |
6898 | xmlrpcMod.CloseXMLRPCChannel((UUID)channel); | ||
6897 | ScriptSleep(1000); | 6899 | ScriptSleep(1000); |
6898 | } | 6900 | } |
6899 | 6901 | ||
@@ -11554,6 +11556,79 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api | |||
11554 | NotImplemented("llGodLikeRezObject"); | 11556 | NotImplemented("llGodLikeRezObject"); |
11555 | } | 11557 | } |
11556 | 11558 | ||
11559 | public LSL_String llTransferLindenDollars(string destination, int amount) | ||
11560 | { | ||
11561 | UUID txn = UUID.Random(); | ||
11562 | |||
11563 | Util.FireAndForget(delegate(object x) | ||
11564 | { | ||
11565 | int replycode = 0; | ||
11566 | string replydata = destination + "," + amount.ToString(); | ||
11567 | |||
11568 | try | ||
11569 | { | ||
11570 | TaskInventoryItem item = m_item; | ||
11571 | if (item == null) | ||
11572 | { | ||
11573 | replydata = "SERVICE_ERROR"; | ||
11574 | return; | ||
11575 | } | ||
11576 | |||
11577 | m_host.AddScriptLPS(1); | ||
11578 | |||
11579 | if (item.PermsGranter == UUID.Zero) | ||
11580 | { | ||
11581 | replydata = "MISSING_PERMISSION_DEBIT"; | ||
11582 | return; | ||
11583 | } | ||
11584 | |||
11585 | if ((item.PermsMask & ScriptBaseClass.PERMISSION_DEBIT) == 0) | ||
11586 | { | ||
11587 | replydata = "MISSING_PERMISSION_DEBIT"; | ||
11588 | return; | ||
11589 | } | ||
11590 | |||
11591 | UUID toID = new UUID(); | ||
11592 | |||
11593 | if (!UUID.TryParse(destination, out toID)) | ||
11594 | { | ||
11595 | replydata = "INVALID_AGENT"; | ||
11596 | return; | ||
11597 | } | ||
11598 | |||
11599 | IMoneyModule money = World.RequestModuleInterface<IMoneyModule>(); | ||
11600 | |||
11601 | if (money == null) | ||
11602 | { | ||
11603 | replydata = "TRANSFERS_DISABLED"; | ||
11604 | return; | ||
11605 | } | ||
11606 | |||
11607 | bool result = money.ObjectGiveMoney( | ||
11608 | m_host.ParentGroup.RootPart.UUID, m_host.ParentGroup.RootPart.OwnerID, toID, amount); | ||
11609 | |||
11610 | if (result) | ||
11611 | { | ||
11612 | replycode = 1; | ||
11613 | return; | ||
11614 | } | ||
11615 | |||
11616 | replydata = "LINDENDOLLAR_INSUFFICIENTFUNDS"; | ||
11617 | } | ||
11618 | finally | ||
11619 | { | ||
11620 | m_ScriptEngine.PostScriptEvent(m_item.ItemID, new EventParams( | ||
11621 | "transaction_result", new Object[] { | ||
11622 | new LSL_String(txn.ToString()), | ||
11623 | new LSL_Integer(replycode), | ||
11624 | new LSL_String(replydata) }, | ||
11625 | new DetectParams[0])); | ||
11626 | } | ||
11627 | }); | ||
11628 | |||
11629 | return txn.ToString(); | ||
11630 | } | ||
11631 | |||
11557 | #endregion | 11632 | #endregion |
11558 | } | 11633 | } |
11559 | 11634 | ||
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs index 98f8be7..4ac179a 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Interface/ILSL_Api.cs | |||
@@ -207,7 +207,8 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces | |||
207 | LSL_Float llGetWallclock(); | 207 | LSL_Float llGetWallclock(); |
208 | void llGiveInventory(string destination, string inventory); | 208 | void llGiveInventory(string destination, string inventory); |
209 | void llGiveInventoryList(string destination, string category, LSL_List inventory); | 209 | void llGiveInventoryList(string destination, string category, LSL_List inventory); |
210 | LSL_Integer llGiveMoney(string destination, int amount); | 210 | void llGiveMoney(string destination, int amount); |
211 | LSL_String llTransferLindenDollars(string destination, int amount); | ||
211 | void llGodLikeRezObject(string inventory, LSL_Vector pos); | 212 | void llGodLikeRezObject(string inventory, LSL_Vector pos); |
212 | LSL_Float llGround(LSL_Vector offset); | 213 | LSL_Float llGround(LSL_Vector offset); |
213 | LSL_Vector llGroundContour(LSL_Vector offset); | 214 | LSL_Vector llGroundContour(LSL_Vector offset); |
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs index 36803a4..c7a7cf6 100644 --- a/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs +++ b/OpenSim/Region/ScriptEngine/Shared/Api/Runtime/LSL_Stub.cs | |||
@@ -869,9 +869,14 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase | |||
869 | m_LSL_Functions.llGiveInventoryList(destination, category, inventory); | 869 | m_LSL_Functions.llGiveInventoryList(destination, category, inventory); |
870 | } | 870 | } |
871 | 871 | ||
872 | public LSL_Integer llGiveMoney(string destination, int amount) | 872 | public void llGiveMoney(string destination, int amount) |
873 | { | 873 | { |
874 | return m_LSL_Functions.llGiveMoney(destination, amount); | 874 | m_LSL_Functions.llGiveMoney(destination, amount); |
875 | } | ||
876 | |||
877 | public LSL_String llTransferLindenDollars(string destination, int amount) | ||
878 | { | ||
879 | return m_LSL_Functions.llTransferLindenDollars(destination, amount); | ||
875 | } | 880 | } |
876 | 881 | ||
877 | public void llGodLikeRezObject(string inventory, LSL_Vector pos) | 882 | public void llGodLikeRezObject(string inventory, LSL_Vector pos) |