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 /OpenSim | |
parent | Merge branch 'master' of /home/opensim/var/repo/opensim (diff) | |
download | opensim-SC-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.zip opensim-SC-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.tar.gz opensim-SC-6a2b673fca6fcff4e358cf4ef6bd773f8a0488ba.tar.bz2 opensim-SC-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.
Diffstat (limited to 'OpenSim')
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) |