diff options
author | Teravus Ovares | 2009-05-09 05:56:10 +0000 |
---|---|---|
committer | Teravus Ovares | 2009-05-09 05:56:10 +0000 |
commit | b76405f50a5a8214830aa8d2b9078bb8d0925407 (patch) | |
tree | 9c5ee8694942873120956fc2014dd8267f3f4d5e /OpenSim | |
parent | * Break out the SampleMoneyModule to a new namespace (diff) | |
download | opensim-SC_OLD-b76405f50a5a8214830aa8d2b9078bb8d0925407.zip opensim-SC_OLD-b76405f50a5a8214830aa8d2b9078bb8d0925407.tar.gz opensim-SC_OLD-b76405f50a5a8214830aa8d2b9078bb8d0925407.tar.bz2 opensim-SC_OLD-b76405f50a5a8214830aa8d2b9078bb8d0925407.tar.xz |
* Cripples the SampleMoneyModule code.
* The OpenSimulator core developers have voted to remove all currency functionality from OpenSimulator leaving the 'IMoneyModule' interface in. This affects all systems that used the example money module. This effects All systems that used the XMLRPC External Money Module Hooks interface. If you previously used this interface, please consult with the OpenSimWi Redux folk who are keeping the old module with this interface up to date.
* A notice to the opensim-dev mailing list to come as well.. since this is likely a breaking change for some.
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Region/ReplaceableModules/MoneyModule/SampleMoneyModule.cs | 866 |
1 files changed, 48 insertions, 818 deletions
diff --git a/OpenSim/Region/ReplaceableModules/MoneyModule/SampleMoneyModule.cs b/OpenSim/Region/ReplaceableModules/MoneyModule/SampleMoneyModule.cs index 7d79102..0ea49e9 100644 --- a/OpenSim/Region/ReplaceableModules/MoneyModule/SampleMoneyModule.cs +++ b/OpenSim/Region/ReplaceableModules/MoneyModule/SampleMoneyModule.cs | |||
@@ -28,10 +28,7 @@ | |||
28 | using System; | 28 | using System; |
29 | using System.Collections; | 29 | using System.Collections; |
30 | using System.Collections.Generic; | 30 | using System.Collections.Generic; |
31 | using System.Net; | ||
32 | using System.Net.Sockets; | ||
33 | using System.Reflection; | 31 | using System.Reflection; |
34 | using System.Xml; | ||
35 | using log4net; | 32 | using log4net; |
36 | using Nini.Config; | 33 | using Nini.Config; |
37 | using Nwc.XmlRpc; | 34 | using Nwc.XmlRpc; |
@@ -45,15 +42,14 @@ using OpenSim.Region.Framework.Scenes; | |||
45 | namespace OpenSim.Region.ReplaceableModules.MoneyModule | 42 | namespace OpenSim.Region.ReplaceableModules.MoneyModule |
46 | { | 43 | { |
47 | /// <summary> | 44 | /// <summary> |
48 | /// Demo Economy/Money Module. This is not a production quality money/economy module! | 45 | /// This is only the functionality required to make the functionality associated with money work |
49 | /// This is a demo for you to use when making one that works for you. | 46 | /// (such as land transfers). There is no money code here! Use FORGE as an example for money code. |
50 | /// // To use the following you need to add: | 47 | /// Demo Economy/Money Module. This is a purposely crippled module! |
51 | /// -helperuri <ADDRESS TO HERE OR grid MONEY SERVER> | 48 | /// // To land transfer you need to add: |
49 | /// -helperuri <ADDRESS TO THIS SERVER> | ||
52 | /// to the command line parameters you use to start up your client | 50 | /// to the command line parameters you use to start up your client |
53 | /// This commonly looks like -helperuri http://127.0.0.1:9000/ | 51 | /// This commonly looks like -helperuri http://127.0.0.1:9000/ |
54 | /// | 52 | /// |
55 | /// Centralized grid structure example using OpenSimWi Redux revision 9+ | ||
56 | /// svn co https://opensimwiredux.svn.sourceforge.net/svnroot/opensimwiredux | ||
57 | /// </summary> | 53 | /// </summary> |
58 | public class SampleMoneyModule : IMoneyModule, IRegionModule | 54 | public class SampleMoneyModule : IMoneyModule, IRegionModule |
59 | { | 55 | { |
@@ -71,17 +67,11 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
71 | 67 | ||
72 | private IConfigSource m_gConfig; | 68 | private IConfigSource m_gConfig; |
73 | 69 | ||
74 | private bool m_keepMoneyAcrossLogins = true; | ||
75 | private Dictionary<UUID, int> m_KnownClientFunds = new Dictionary<UUID, int>(); | ||
76 | // private string m_LandAddress = String.Empty; | ||
77 | 70 | ||
78 | private int m_minFundsBeforeRefresh = 100; | ||
79 | private string m_MoneyAddress = String.Empty; | ||
80 | 71 | ||
81 | /// <summary> | 72 | /// <summary> |
82 | /// Region UUIDS indexed by AgentID | 73 | /// Region UUIDS indexed by AgentID |
83 | /// </summary> | 74 | /// </summary> |
84 | private Dictionary<UUID, UUID> m_rootAgents = new Dictionary<UUID, UUID>(); | ||
85 | 75 | ||
86 | /// <summary> | 76 | /// <summary> |
87 | /// Scenes by Region Handle | 77 | /// Scenes by Region Handle |
@@ -107,8 +97,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
107 | private int TeleportMinPrice = 0; | 97 | private int TeleportMinPrice = 0; |
108 | 98 | ||
109 | private float TeleportPriceExponent = 0f; | 99 | private float TeleportPriceExponent = 0f; |
110 | // private int UserLevelPaysFees = 2; | 100 | |
111 | // private Scene XMLRPCHandler; | ||
112 | 101 | ||
113 | #region IMoneyModule Members | 102 | #region IMoneyModule Members |
114 | 103 | ||
@@ -146,21 +135,13 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
146 | // to the command line parameters you use to start up your client | 135 | // to the command line parameters you use to start up your client |
147 | // This commonly looks like -helperuri http://127.0.0.1:9000/ | 136 | // This commonly looks like -helperuri http://127.0.0.1:9000/ |
148 | 137 | ||
149 | if (m_MoneyAddress.Length > 0) | 138 | |
150 | { | 139 | // Local Server.. enables functionality only. |
151 | // Centralized grid structure using OpenSimWi Redux revision 9+ | 140 | httpServer.AddXmlRPCHandler("getCurrencyQuote", quote_func); |
152 | // https://opensimwiredux.svn.sourceforge.net/svnroot/opensimwiredux | 141 | httpServer.AddXmlRPCHandler("buyCurrency", buy_func); |
153 | httpServer.AddXmlRPCHandler("balanceUpdateRequest", GridMoneyUpdate); | 142 | httpServer.AddXmlRPCHandler("preflightBuyLandPrep", preflightBuyLandPrep_func); |
154 | httpServer.AddXmlRPCHandler("userAlert", UserAlert); | 143 | httpServer.AddXmlRPCHandler("buyLandPrep", landBuy_func); |
155 | } | 144 | |
156 | else | ||
157 | { | ||
158 | // Local Server.. enables functionality only. | ||
159 | httpServer.AddXmlRPCHandler("getCurrencyQuote", quote_func); | ||
160 | httpServer.AddXmlRPCHandler("buyCurrency", buy_func); | ||
161 | httpServer.AddXmlRPCHandler("preflightBuyLandPrep", preflightBuyLandPrep_func); | ||
162 | httpServer.AddXmlRPCHandler("buyLandPrep", landBuy_func); | ||
163 | } | ||
164 | } | 145 | } |
165 | 146 | ||
166 | if (m_scenel.ContainsKey(scene.RegionInfo.RegionHandle)) | 147 | if (m_scenel.ContainsKey(scene.RegionInfo.RegionHandle)) |
@@ -205,8 +186,8 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
205 | 186 | ||
206 | bool give_result = doMoneyTransfer(fromID, toID, amount, 2, description); | 187 | bool give_result = doMoneyTransfer(fromID, toID, amount, 2, description); |
207 | 188 | ||
208 | if (m_MoneyAddress.Length == 0) | 189 | |
209 | BalanceUpdate(fromID, toID, give_result, description); | 190 | BalanceUpdate(fromID, toID, give_result, description); |
210 | 191 | ||
211 | return give_result; | 192 | return give_result; |
212 | } | 193 | } |
@@ -268,9 +249,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
268 | 249 | ||
269 | // UserLevelPaysFees = startupConfig.GetInt("UserLevelPaysFees", -1); | 250 | // UserLevelPaysFees = startupConfig.GetInt("UserLevelPaysFees", -1); |
270 | m_stipend = startupConfig.GetInt("UserStipend", 1000); | 251 | m_stipend = startupConfig.GetInt("UserStipend", 1000); |
271 | m_minFundsBeforeRefresh = startupConfig.GetInt("IssueStipendWhenClientIsBelowAmount", 10); | 252 | |
272 | m_keepMoneyAcrossLogins = startupConfig.GetBoolean("KeepMoneyAcrossLogins", true); | ||
273 | m_MoneyAddress = startupConfig.GetString("CurrencyServer", String.Empty); | ||
274 | // m_LandAddress = startupConfig.GetString("LandServer", String.Empty); | 253 | // m_LandAddress = startupConfig.GetString("LandServer", String.Empty); |
275 | } | 254 | } |
276 | 255 | ||
@@ -307,65 +286,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
307 | 286 | ||
308 | if (gridmode) | 287 | if (gridmode) |
309 | { | 288 | { |
310 | if (m_MoneyAddress.Length == 0) | 289 | CheckExistAndRefreshFunds(client.AgentId); |
311 | { | ||
312 | CheckExistAndRefreshFunds(client.AgentId); | ||
313 | } | ||
314 | else | ||
315 | { | ||
316 | bool childYN = true; | ||
317 | ScenePresence agent = null; | ||
318 | //client.SecureSessionId; | ||
319 | Scene s = LocateSceneClientIn(client.AgentId); | ||
320 | if (s != null) | ||
321 | { | ||
322 | agent = s.GetScenePresence(client.AgentId); | ||
323 | if (agent != null) | ||
324 | childYN = agent.IsChildAgent; | ||
325 | } | ||
326 | if (s != null && agent != null && childYN == false) | ||
327 | { | ||
328 | //s.RegionInfo.RegionHandle; | ||
329 | UUID agentID = UUID.Zero; | ||
330 | int funds = 0; | ||
331 | |||
332 | Hashtable hbinfo = | ||
333 | GetBalanceForUserFromMoneyServer(client.AgentId, client.SecureSessionId, s.RegionInfo.originRegionID, | ||
334 | s.RegionInfo.regionSecret); | ||
335 | if ((bool) hbinfo["success"] == true) | ||
336 | { | ||
337 | UUID.TryParse((string)hbinfo["agentId"], out agentID); | ||
338 | try | ||
339 | { | ||
340 | funds = (Int32) hbinfo["funds"]; | ||
341 | } | ||
342 | catch (ArgumentException) | ||
343 | { | ||
344 | } | ||
345 | catch (FormatException) | ||
346 | { | ||
347 | } | ||
348 | catch (OverflowException) | ||
349 | { | ||
350 | m_log.ErrorFormat("[MONEY]: While getting the Currency for user {0}, the return funds overflowed.", agentID); | ||
351 | client.SendAlertMessage("Unable to get your money balance, money operations will be unavailable"); | ||
352 | } | ||
353 | catch (InvalidCastException) | ||
354 | { | ||
355 | funds = 0; | ||
356 | } | ||
357 | |||
358 | m_KnownClientFunds[agentID] = funds; | ||
359 | } | ||
360 | else | ||
361 | { | ||
362 | m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentID, | ||
363 | (string) hbinfo["errorMessage"]); | ||
364 | client.SendAlertMessage((string) hbinfo["errorMessage"]); | ||
365 | } | ||
366 | SendMoneyBalance(client, agentID, client.SessionId, UUID.Zero); | ||
367 | } | ||
368 | } | ||
369 | } | 290 | } |
370 | else | 291 | else |
371 | { | 292 | { |
@@ -399,53 +320,8 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
399 | /// <returns></returns> | 320 | /// <returns></returns> |
400 | private bool doMoneyTransfer(UUID Sender, UUID Receiver, int amount, int transactiontype, string description) | 321 | private bool doMoneyTransfer(UUID Sender, UUID Receiver, int amount, int transactiontype, string description) |
401 | { | 322 | { |
402 | bool result = false; | 323 | bool result = true; |
403 | if (amount >= 0) | 324 | |
404 | { | ||
405 | lock (m_KnownClientFunds) | ||
406 | { | ||
407 | // If we don't know about the sender, then the sender can't | ||
408 | // actually be here and therefore this is likely fraud or outdated. | ||
409 | if (m_MoneyAddress.Length == 0) | ||
410 | { | ||
411 | if (m_KnownClientFunds.ContainsKey(Sender)) | ||
412 | { | ||
413 | // Does the sender have enough funds to give? | ||
414 | if (m_KnownClientFunds[Sender] >= amount) | ||
415 | { | ||
416 | // Subtract the funds from the senders account | ||
417 | m_KnownClientFunds[Sender] -= amount; | ||
418 | |||
419 | // do we know about the receiver? | ||
420 | if (!m_KnownClientFunds.ContainsKey(Receiver)) | ||
421 | { | ||
422 | // Make a record for them so they get the updated balance when they login | ||
423 | CheckExistAndRefreshFunds(Receiver); | ||
424 | } | ||
425 | if (m_enabled) | ||
426 | { | ||
427 | //Add the amount to the Receiver's funds | ||
428 | m_KnownClientFunds[Receiver] += amount; | ||
429 | result = true; | ||
430 | } | ||
431 | } | ||
432 | else | ||
433 | { | ||
434 | // These below are redundant to make this clearer to read | ||
435 | result = false; | ||
436 | } | ||
437 | } | ||
438 | else | ||
439 | { | ||
440 | result = false; | ||
441 | } | ||
442 | } | ||
443 | else | ||
444 | { | ||
445 | result = TransferMoneyonMoneyServer(Sender, Receiver, amount, transactiontype, description); | ||
446 | } | ||
447 | } | ||
448 | } | ||
449 | return result; | 325 | return result; |
450 | } | 326 | } |
451 | 327 | ||
@@ -480,126 +356,6 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
480 | } | 356 | } |
481 | } | 357 | } |
482 | 358 | ||
483 | /// <summary> | ||
484 | /// Gets the current balance for the user from the Grid Money Server | ||
485 | /// </summary> | ||
486 | /// <param name="agentId"></param> | ||
487 | /// <param name="secureSessionID"></param> | ||
488 | /// <param name="regionId"></param> | ||
489 | /// <param name="regionSecret"></param> | ||
490 | /// <returns></returns> | ||
491 | public Hashtable GetBalanceForUserFromMoneyServer(UUID agentId, UUID secureSessionID, UUID regionId, string regionSecret) | ||
492 | { | ||
493 | Hashtable MoneyBalanceRequestParams = new Hashtable(); | ||
494 | MoneyBalanceRequestParams["agentId"] = agentId.ToString(); | ||
495 | MoneyBalanceRequestParams["secureSessionId"] = secureSessionID.ToString(); | ||
496 | MoneyBalanceRequestParams["regionId"] = regionId.ToString(); | ||
497 | MoneyBalanceRequestParams["secret"] = regionSecret; | ||
498 | MoneyBalanceRequestParams["currencySecret"] = ""; // per - region/user currency secret gotten from the money system | ||
499 | |||
500 | Hashtable MoneyRespData = genericCurrencyXMLRPCRequest(MoneyBalanceRequestParams, "simulatorUserBalanceRequest"); | ||
501 | |||
502 | return MoneyRespData; | ||
503 | } | ||
504 | |||
505 | |||
506 | /// <summary> | ||
507 | /// Generic XMLRPC client abstraction | ||
508 | /// </summary> | ||
509 | /// <param name="ReqParams">Hashtable containing parameters to the method</param> | ||
510 | /// <param name="method">Method to invoke</param> | ||
511 | /// <returns>Hashtable with success=>bool and other values</returns> | ||
512 | public Hashtable genericCurrencyXMLRPCRequest(Hashtable ReqParams, string method) | ||
513 | { | ||
514 | ArrayList SendParams = new ArrayList(); | ||
515 | SendParams.Add(ReqParams); | ||
516 | // Send Request | ||
517 | XmlRpcResponse MoneyResp; | ||
518 | try | ||
519 | { | ||
520 | XmlRpcRequest BalanceRequestReq = new XmlRpcRequest(method, SendParams); | ||
521 | MoneyResp = BalanceRequestReq.Send(m_MoneyAddress, 30000); | ||
522 | } | ||
523 | catch (WebException ex) | ||
524 | { | ||
525 | m_log.ErrorFormat( | ||
526 | "[MONEY]: Unable to connect to Money Server {0}. Exception {1}", | ||
527 | m_MoneyAddress, ex); | ||
528 | |||
529 | Hashtable ErrorHash = new Hashtable(); | ||
530 | ErrorHash["success"] = false; | ||
531 | ErrorHash["errorMessage"] = "Unable to manage your money at this time. Purchases may be unavailable"; | ||
532 | ErrorHash["errorURI"] = ""; | ||
533 | |||
534 | return ErrorHash; | ||
535 | //throw (ex); | ||
536 | } | ||
537 | catch (SocketException ex) | ||
538 | { | ||
539 | m_log.ErrorFormat( | ||
540 | "[MONEY]: Unable to connect to Money Server {0}. Exception {1}", | ||
541 | m_MoneyAddress, ex); | ||
542 | |||
543 | Hashtable ErrorHash = new Hashtable(); | ||
544 | ErrorHash["success"] = false; | ||
545 | ErrorHash["errorMessage"] = "Unable to manage your money at this time. Purchases may be unavailable"; | ||
546 | ErrorHash["errorURI"] = ""; | ||
547 | |||
548 | return ErrorHash; | ||
549 | //throw (ex); | ||
550 | } | ||
551 | catch (XmlException ex) | ||
552 | { | ||
553 | m_log.ErrorFormat( | ||
554 | "[MONEY]: Unable to connect to Money Server {0}. Exception {1}", | ||
555 | m_MoneyAddress, ex); | ||
556 | |||
557 | Hashtable ErrorHash = new Hashtable(); | ||
558 | ErrorHash["success"] = false; | ||
559 | ErrorHash["errorMessage"] = "Unable to manage your money at this time. Purchases may be unavailable"; | ||
560 | ErrorHash["errorURI"] = ""; | ||
561 | |||
562 | return ErrorHash; | ||
563 | } | ||
564 | if (MoneyResp.IsFault) | ||
565 | { | ||
566 | Hashtable ErrorHash = new Hashtable(); | ||
567 | ErrorHash["success"] = false; | ||
568 | ErrorHash["errorMessage"] = "Unable to manage your money at this time. Purchases may be unavailable"; | ||
569 | ErrorHash["errorURI"] = ""; | ||
570 | |||
571 | return ErrorHash; | ||
572 | } | ||
573 | Hashtable MoneyRespData = (Hashtable) MoneyResp.Value; | ||
574 | |||
575 | return MoneyRespData; | ||
576 | } | ||
577 | |||
578 | /// <summary> | ||
579 | /// This informs the Money Grid Server that the avatar is in this simulator | ||
580 | /// </summary> | ||
581 | /// <param name="agentId"></param> | ||
582 | /// <param name="secureSessionID"></param> | ||
583 | /// <param name="regionId"></param> | ||
584 | /// <param name="regionSecret"></param> | ||
585 | /// <returns></returns> | ||
586 | public Hashtable claim_user(UUID agentId, UUID secureSessionID, UUID regionId, string regionSecret) | ||
587 | { | ||
588 | Hashtable MoneyBalanceRequestParams = new Hashtable(); | ||
589 | MoneyBalanceRequestParams["agentId"] = agentId.ToString(); | ||
590 | MoneyBalanceRequestParams["secureSessionId"] = secureSessionID.ToString(); | ||
591 | MoneyBalanceRequestParams["regionId"] = regionId.ToString(); | ||
592 | MoneyBalanceRequestParams["secret"] = regionSecret; | ||
593 | |||
594 | Hashtable MoneyRespData = genericCurrencyXMLRPCRequest(MoneyBalanceRequestParams, "simulatorClaimUserRequest"); | ||
595 | IClientAPI sendMoneyBal = LocateClientObject(agentId); | ||
596 | if (sendMoneyBal != null) | ||
597 | { | ||
598 | SendMoneyBalance(sendMoneyBal, agentId, sendMoneyBal.SessionId, UUID.Zero); | ||
599 | } | ||
600 | return MoneyRespData; | ||
601 | } | ||
602 | |||
603 | private SceneObjectPart findPrim(UUID objectID) | 359 | private SceneObjectPart findPrim(UUID objectID) |
604 | { | 360 | { |
605 | lock (m_scenel) | 361 | lock (m_scenel) |
@@ -666,180 +422,6 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
666 | } | 422 | } |
667 | 423 | ||
668 | /// <summary> | 424 | /// <summary> |
669 | /// Informs the Money Grid Server of a transfer. | ||
670 | /// </summary> | ||
671 | /// <param name="sourceId"></param> | ||
672 | /// <param name="destId"></param> | ||
673 | /// <param name="amount"></param> | ||
674 | /// <returns></returns> | ||
675 | public bool TransferMoneyonMoneyServer(UUID sourceId, UUID destId, int amount, int transactiontype, string description) | ||
676 | { | ||
677 | int aggregatePermInventory = 0; | ||
678 | int aggregatePermNextOwner = 0; | ||
679 | int flags = 0; | ||
680 | bool rvalue = false; | ||
681 | |||
682 | IClientAPI cli = LocateClientObject(sourceId); | ||
683 | if (cli != null) | ||
684 | { | ||
685 | Scene userScene = null; | ||
686 | lock (m_rootAgents) | ||
687 | { | ||
688 | userScene = GetSceneByUUID(m_rootAgents[sourceId]); | ||
689 | } | ||
690 | if (userScene != null) | ||
691 | { | ||
692 | Hashtable ht = new Hashtable(); | ||
693 | ht["agentId"] = sourceId.ToString(); | ||
694 | ht["secureSessionId"] = cli.SecureSessionId.ToString(); | ||
695 | ht["regionId"] = userScene.RegionInfo.originRegionID.ToString(); | ||
696 | ht["secret"] = userScene.RegionInfo.regionSecret; | ||
697 | ht["currencySecret"] = " "; | ||
698 | ht["destId"] = destId.ToString(); | ||
699 | ht["cash"] = amount; | ||
700 | ht["aggregatePermInventory"] = aggregatePermInventory; | ||
701 | ht["aggregatePermNextOwner"] = aggregatePermNextOwner; | ||
702 | ht["flags"] = flags; | ||
703 | ht["transactionType"] = transactiontype; | ||
704 | ht["description"] = description; | ||
705 | |||
706 | Hashtable hresult = genericCurrencyXMLRPCRequest(ht, "regionMoveMoney"); | ||
707 | |||
708 | if ((bool) hresult["success"] == true) | ||
709 | { | ||
710 | int funds1 = 0; | ||
711 | int funds2 = 0; | ||
712 | try | ||
713 | { | ||
714 | funds1 = (Int32) hresult["funds"]; | ||
715 | } | ||
716 | catch (InvalidCastException) | ||
717 | { | ||
718 | funds1 = 0; | ||
719 | } | ||
720 | SetLocalFundsForAgentID(sourceId, funds1); | ||
721 | if (m_KnownClientFunds.ContainsKey(destId)) | ||
722 | { | ||
723 | try | ||
724 | { | ||
725 | funds2 = (Int32) hresult["funds2"]; | ||
726 | } | ||
727 | catch (InvalidCastException) | ||
728 | { | ||
729 | funds2 = 0; | ||
730 | } | ||
731 | SetLocalFundsForAgentID(destId, funds2); | ||
732 | } | ||
733 | |||
734 | |||
735 | rvalue = true; | ||
736 | } | ||
737 | else | ||
738 | { | ||
739 | cli.SendAgentAlertMessage((string) hresult["errorMessage"], true); | ||
740 | } | ||
741 | } | ||
742 | } | ||
743 | else | ||
744 | { | ||
745 | m_log.ErrorFormat("[MONEY]: Client {0} not found", sourceId.ToString()); | ||
746 | } | ||
747 | |||
748 | return rvalue; | ||
749 | } | ||
750 | |||
751 | public int GetRemoteBalance(UUID agentId) | ||
752 | { | ||
753 | int funds = 0; | ||
754 | |||
755 | IClientAPI aClient = LocateClientObject(agentId); | ||
756 | if (aClient != null) | ||
757 | { | ||
758 | Scene s = LocateSceneClientIn(agentId); | ||
759 | if (s != null) | ||
760 | { | ||
761 | if (m_MoneyAddress.Length > 0) | ||
762 | { | ||
763 | Hashtable hbinfo = | ||
764 | GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID, | ||
765 | s.RegionInfo.regionSecret); | ||
766 | if ((bool) hbinfo["success"] == true) | ||
767 | { | ||
768 | try | ||
769 | { | ||
770 | funds = (Int32) hbinfo["funds"]; | ||
771 | } | ||
772 | catch (ArgumentException) | ||
773 | { | ||
774 | } | ||
775 | catch (FormatException) | ||
776 | { | ||
777 | } | ||
778 | catch (OverflowException) | ||
779 | { | ||
780 | m_log.ErrorFormat("[MONEY]: While getting the Currency for user {0}, the return funds overflowed.", agentId); | ||
781 | aClient.SendAlertMessage("Unable to get your money balance, money operations will be unavailable"); | ||
782 | } | ||
783 | catch (InvalidCastException) | ||
784 | { | ||
785 | funds = 0; | ||
786 | } | ||
787 | } | ||
788 | else | ||
789 | { | ||
790 | m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentId, | ||
791 | (string) hbinfo["errorMessage"]); | ||
792 | aClient.SendAlertMessage((string) hbinfo["errorMessage"]); | ||
793 | } | ||
794 | } | ||
795 | |||
796 | SetLocalFundsForAgentID(agentId, funds); | ||
797 | SendMoneyBalance(aClient, agentId, aClient.SessionId, UUID.Zero); | ||
798 | } | ||
799 | else | ||
800 | { | ||
801 | m_log.Debug("[MONEY]: Got balance request update for agent that is here, but couldn't find which scene."); | ||
802 | } | ||
803 | } | ||
804 | else | ||
805 | { | ||
806 | m_log.Debug("[MONEY]: Got balance request update for agent that isn't here."); | ||
807 | } | ||
808 | return funds; | ||
809 | } | ||
810 | |||
811 | public XmlRpcResponse GridMoneyUpdate(XmlRpcRequest request) | ||
812 | { | ||
813 | m_log.Debug("[MONEY]: Dynamic balance update called."); | ||
814 | Hashtable requestData = (Hashtable) request.Params[0]; | ||
815 | |||
816 | if (requestData.ContainsKey("agentId")) | ||
817 | { | ||
818 | UUID agentId = UUID.Zero; | ||
819 | |||
820 | UUID.TryParse((string) requestData["agentId"], out agentId); | ||
821 | if (agentId != UUID.Zero) | ||
822 | { | ||
823 | GetRemoteBalance(agentId); | ||
824 | } | ||
825 | else | ||
826 | { | ||
827 | m_log.Debug("[MONEY]: invalid agentId specified, dropping."); | ||
828 | } | ||
829 | } | ||
830 | else | ||
831 | { | ||
832 | m_log.Debug("[MONEY]: no agentId specified, dropping."); | ||
833 | } | ||
834 | XmlRpcResponse r = new XmlRpcResponse(); | ||
835 | Hashtable rparms = new Hashtable(); | ||
836 | rparms["success"] = true; | ||
837 | |||
838 | r.Value = rparms; | ||
839 | return r; | ||
840 | } | ||
841 | |||
842 | /// <summary> | ||
843 | /// XMLRPC handler to send alert message and sound to client | 425 | /// XMLRPC handler to send alert message and sound to client |
844 | /// </summary> | 426 | /// </summary> |
845 | public XmlRpcResponse UserAlert(XmlRpcRequest request) | 427 | public XmlRpcResponse UserAlert(XmlRpcRequest request) |
@@ -900,34 +482,20 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
900 | Hashtable quoteResponse = new Hashtable(); | 482 | Hashtable quoteResponse = new Hashtable(); |
901 | XmlRpcResponse returnval = new XmlRpcResponse(); | 483 | XmlRpcResponse returnval = new XmlRpcResponse(); |
902 | 484 | ||
903 | if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy")) | 485 | |
904 | { | 486 | Hashtable currencyResponse = new Hashtable(); |
905 | UUID.TryParse((string) requestData["agentId"], out agentId); | 487 | currencyResponse.Add("estimatedCost", 0); |
906 | try | 488 | currencyResponse.Add("currencyBuy", amount); |
907 | { | ||
908 | amount = (Int32) requestData["currencyBuy"]; | ||
909 | } | ||
910 | catch (InvalidCastException) | ||
911 | { | ||
912 | } | ||
913 | Hashtable currencyResponse = new Hashtable(); | ||
914 | currencyResponse.Add("estimatedCost", 0); | ||
915 | currencyResponse.Add("currencyBuy", amount); | ||
916 | |||
917 | quoteResponse.Add("success", true); | ||
918 | quoteResponse.Add("currency", currencyResponse); | ||
919 | quoteResponse.Add("confirm", "asdfad9fj39ma9fj"); | ||
920 | |||
921 | returnval.Value = quoteResponse; | ||
922 | return returnval; | ||
923 | } | ||
924 | 489 | ||
490 | quoteResponse.Add("success", true); | ||
491 | quoteResponse.Add("currency", currencyResponse); | ||
492 | quoteResponse.Add("confirm", "asdfad9fj39ma9fj"); | ||
925 | 493 | ||
926 | quoteResponse.Add("success", false); | ||
927 | quoteResponse.Add("errorMessage", "Invalid parameters passed to the quote box"); | ||
928 | quoteResponse.Add("errorURI", "http://www.opensimulator.org/wiki"); | ||
929 | returnval.Value = quoteResponse; | 494 | returnval.Value = quoteResponse; |
930 | return returnval; | 495 | return returnval; |
496 | |||
497 | |||
498 | |||
931 | } | 499 | } |
932 | 500 | ||
933 | public XmlRpcResponse buy_func(XmlRpcRequest request) | 501 | public XmlRpcResponse buy_func(XmlRpcRequest request) |
@@ -935,36 +503,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
935 | Hashtable requestData = (Hashtable) request.Params[0]; | 503 | Hashtable requestData = (Hashtable) request.Params[0]; |
936 | UUID agentId = UUID.Zero; | 504 | UUID agentId = UUID.Zero; |
937 | int amount = 0; | 505 | int amount = 0; |
938 | if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy")) | 506 | |
939 | { | ||
940 | UUID.TryParse((string) requestData["agentId"], out agentId); | ||
941 | try | ||
942 | { | ||
943 | amount = (Int32) requestData["currencyBuy"]; | ||
944 | } | ||
945 | catch (InvalidCastException) | ||
946 | { | ||
947 | } | ||
948 | if (agentId != UUID.Zero) | ||
949 | { | ||
950 | lock (m_KnownClientFunds) | ||
951 | { | ||
952 | if (m_KnownClientFunds.ContainsKey(agentId)) | ||
953 | { | ||
954 | m_KnownClientFunds[agentId] += amount; | ||
955 | } | ||
956 | else | ||
957 | { | ||
958 | m_KnownClientFunds.Add(agentId, amount); | ||
959 | } | ||
960 | } | ||
961 | IClientAPI client = LocateClientObject(agentId); | ||
962 | if (client != null) | ||
963 | { | ||
964 | SendMoneyBalance(client, agentId, client.SessionId, UUID.Zero); | ||
965 | } | ||
966 | } | ||
967 | } | ||
968 | XmlRpcResponse returnval = new XmlRpcResponse(); | 507 | XmlRpcResponse returnval = new XmlRpcResponse(); |
969 | Hashtable returnresp = new Hashtable(); | 508 | Hashtable returnresp = new Hashtable(); |
970 | returnresp.Add("success", true); | 509 | returnresp.Add("success", true); |
@@ -1015,36 +554,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1015 | 554 | ||
1016 | UUID agentId = UUID.Zero; | 555 | UUID agentId = UUID.Zero; |
1017 | int amount = 0; | 556 | int amount = 0; |
1018 | if (requestData.ContainsKey("agentId") && requestData.ContainsKey("currencyBuy")) | 557 | |
1019 | { | ||
1020 | UUID.TryParse((string) requestData["agentId"], out agentId); | ||
1021 | try | ||
1022 | { | ||
1023 | amount = (Int32) requestData["currencyBuy"]; | ||
1024 | } | ||
1025 | catch (InvalidCastException) | ||
1026 | { | ||
1027 | } | ||
1028 | if (agentId != UUID.Zero) | ||
1029 | { | ||
1030 | lock (m_KnownClientFunds) | ||
1031 | { | ||
1032 | if (m_KnownClientFunds.ContainsKey(agentId)) | ||
1033 | { | ||
1034 | m_KnownClientFunds[agentId] += amount; | ||
1035 | } | ||
1036 | else | ||
1037 | { | ||
1038 | m_KnownClientFunds.Add(agentId, amount); | ||
1039 | } | ||
1040 | } | ||
1041 | IClientAPI client = LocateClientObject(agentId); | ||
1042 | if (client != null) | ||
1043 | { | ||
1044 | SendMoneyBalance(client, agentId, client.SessionId, UUID.Zero); | ||
1045 | } | ||
1046 | } | ||
1047 | } | ||
1048 | retparam.Add("success", true); | 558 | retparam.Add("success", true); |
1049 | ret.Value = retparam; | 559 | ret.Value = retparam; |
1050 | 560 | ||
@@ -1061,20 +571,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1061 | /// <param name="agentID"></param> | 571 | /// <param name="agentID"></param> |
1062 | private void CheckExistAndRefreshFunds(UUID agentID) | 572 | private void CheckExistAndRefreshFunds(UUID agentID) |
1063 | { | 573 | { |
1064 | lock (m_KnownClientFunds) | 574 | |
1065 | { | ||
1066 | if (!m_KnownClientFunds.ContainsKey(agentID)) | ||
1067 | { | ||
1068 | m_KnownClientFunds.Add(agentID, m_stipend); | ||
1069 | } | ||
1070 | else | ||
1071 | { | ||
1072 | if (m_KnownClientFunds[agentID] <= m_minFundsBeforeRefresh) | ||
1073 | { | ||
1074 | m_KnownClientFunds[agentID] = m_stipend; | ||
1075 | } | ||
1076 | } | ||
1077 | } | ||
1078 | } | 575 | } |
1079 | 576 | ||
1080 | /// <summary> | 577 | /// <summary> |
@@ -1085,33 +582,13 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1085 | private int GetFundsForAgentID(UUID AgentID) | 582 | private int GetFundsForAgentID(UUID AgentID) |
1086 | { | 583 | { |
1087 | int returnfunds = 0; | 584 | int returnfunds = 0; |
1088 | lock (m_KnownClientFunds) | 585 | |
1089 | { | ||
1090 | if (m_KnownClientFunds.ContainsKey(AgentID)) | ||
1091 | { | ||
1092 | returnfunds = m_KnownClientFunds[AgentID]; | ||
1093 | } | ||
1094 | else | ||
1095 | { | ||
1096 | //throw new Exception("Unable to get funds."); | ||
1097 | } | ||
1098 | } | ||
1099 | return returnfunds; | 586 | return returnfunds; |
1100 | } | 587 | } |
1101 | 588 | ||
1102 | private void SetLocalFundsForAgentID(UUID AgentID, int amount) | 589 | private void SetLocalFundsForAgentID(UUID AgentID, int amount) |
1103 | { | 590 | { |
1104 | lock (m_KnownClientFunds) | 591 | |
1105 | { | ||
1106 | if (m_KnownClientFunds.ContainsKey(AgentID)) | ||
1107 | { | ||
1108 | m_KnownClientFunds[AgentID] = amount; | ||
1109 | } | ||
1110 | else | ||
1111 | { | ||
1112 | m_KnownClientFunds.Add(AgentID, amount); | ||
1113 | } | ||
1114 | } | ||
1115 | } | 592 | } |
1116 | 593 | ||
1117 | #endregion | 594 | #endregion |
@@ -1227,16 +704,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1227 | /// <param name="AgentID"></param> | 704 | /// <param name="AgentID"></param> |
1228 | public void ClientClosed(UUID AgentID) | 705 | public void ClientClosed(UUID AgentID) |
1229 | { | 706 | { |
1230 | lock (m_KnownClientFunds) | 707 | |
1231 | { | ||
1232 | if (m_keepMoneyAcrossLogins && m_MoneyAddress.Length == 0) | ||
1233 | { | ||
1234 | } | ||
1235 | else | ||
1236 | { | ||
1237 | m_KnownClientFunds.Remove(AgentID); | ||
1238 | } | ||
1239 | } | ||
1240 | } | 708 | } |
1241 | 709 | ||
1242 | /// <summary> | 710 | /// <summary> |
@@ -1258,52 +726,19 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1258 | 726 | ||
1259 | private void ValidateLandBuy(Object osender, EventManager.LandBuyArgs e) | 727 | private void ValidateLandBuy(Object osender, EventManager.LandBuyArgs e) |
1260 | { | 728 | { |
1261 | if (m_MoneyAddress.Length == 0) | 729 | |
1262 | { | 730 | |
1263 | lock (m_KnownClientFunds) | 731 | lock (e) |
1264 | { | ||
1265 | if (m_KnownClientFunds.ContainsKey(e.agentId)) | ||
1266 | { | ||
1267 | // Does the sender have enough funds to give? | ||
1268 | if (m_KnownClientFunds[e.agentId] >= e.parcelPrice) | ||
1269 | { | ||
1270 | lock (e) | ||
1271 | { | ||
1272 | e.economyValidated = true; | ||
1273 | } | ||
1274 | } | ||
1275 | } | ||
1276 | } | ||
1277 | } | ||
1278 | else | ||
1279 | { | 732 | { |
1280 | if (GetRemoteBalance(e.agentId) >= e.parcelPrice) | 733 | e.economyValidated = true; |
1281 | { | ||
1282 | lock (e) | ||
1283 | { | ||
1284 | e.economyValidated = true; | ||
1285 | } | ||
1286 | } | ||
1287 | } | 734 | } |
735 | |||
736 | |||
1288 | } | 737 | } |
1289 | 738 | ||
1290 | private void processLandBuy(Object osender, EventManager.LandBuyArgs e) | 739 | private void processLandBuy(Object osender, EventManager.LandBuyArgs e) |
1291 | { | 740 | { |
1292 | lock (e) | 741 | |
1293 | { | ||
1294 | if (e.economyValidated == true && e.transactionID == 0) | ||
1295 | { | ||
1296 | e.transactionID = Util.UnixTimeSinceEpoch(); | ||
1297 | |||
1298 | if (doMoneyTransfer(e.agentId, e.parcelOwnerID, e.parcelPrice, 0, "Land purchase")) | ||
1299 | { | ||
1300 | lock (e) | ||
1301 | { | ||
1302 | e.amountDebited = e.parcelPrice; | ||
1303 | } | ||
1304 | } | ||
1305 | } | ||
1306 | } | ||
1307 | } | 742 | } |
1308 | 743 | ||
1309 | /// <summary> | 744 | /// <summary> |
@@ -1313,76 +748,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1313 | /// <param name="e"></param> | 748 | /// <param name="e"></param> |
1314 | private void MoneyTransferAction(Object osender, EventManager.MoneyTransferArgs e) | 749 | private void MoneyTransferAction(Object osender, EventManager.MoneyTransferArgs e) |
1315 | { | 750 | { |
1316 | IClientAPI sender = null; | 751 | |
1317 | IClientAPI receiver = null; | ||
1318 | |||
1319 | if (m_MoneyAddress.Length > 0) // Handled on server | ||
1320 | e.description = String.Empty; | ||
1321 | |||
1322 | if (e.transactiontype == 5008) // Object gets paid | ||
1323 | { | ||
1324 | sender = LocateClientObject(e.sender); | ||
1325 | if (sender != null) | ||
1326 | { | ||
1327 | SceneObjectPart part = findPrim(e.receiver); | ||
1328 | if (part == null) | ||
1329 | return; | ||
1330 | |||
1331 | string name = resolveAgentName(part.OwnerID); | ||
1332 | if (name == String.Empty) | ||
1333 | name = "(hippos)"; | ||
1334 | |||
1335 | receiver = LocateClientObject(part.OwnerID); | ||
1336 | |||
1337 | string description = String.Format("Paid {0} via object {1}", name, e.description); | ||
1338 | bool transactionresult = doMoneyTransfer(e.sender, part.OwnerID, e.amount, e.transactiontype, description); | ||
1339 | |||
1340 | if (transactionresult) | ||
1341 | { | ||
1342 | ObjectPaid handlerOnObjectPaid = OnObjectPaid; | ||
1343 | if (handlerOnObjectPaid != null) | ||
1344 | { | ||
1345 | handlerOnObjectPaid(e.receiver, e.sender, e.amount); | ||
1346 | } | ||
1347 | } | ||
1348 | |||
1349 | if (e.sender != e.receiver) | ||
1350 | { | ||
1351 | sender.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(e.sender)); | ||
1352 | } | ||
1353 | if (receiver != null) | ||
1354 | { | ||
1355 | receiver.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(part.OwnerID)); | ||
1356 | } | ||
1357 | } | ||
1358 | return; | ||
1359 | } | ||
1360 | |||
1361 | sender = LocateClientObject(e.sender); | ||
1362 | if (sender != null) | ||
1363 | { | ||
1364 | receiver = LocateClientObject(e.receiver); | ||
1365 | |||
1366 | bool transactionresult = doMoneyTransfer(e.sender, e.receiver, e.amount, e.transactiontype, e.description); | ||
1367 | |||
1368 | if (e.sender != e.receiver) | ||
1369 | { | ||
1370 | if (sender != null) | ||
1371 | { | ||
1372 | sender.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(e.sender)); | ||
1373 | } | ||
1374 | } | ||
1375 | |||
1376 | if (receiver != null) | ||
1377 | { | ||
1378 | receiver.SendMoneyBalance(UUID.Random(), transactionresult, Utils.StringToBytes(e.description), GetFundsForAgentID(e.receiver)); | ||
1379 | } | ||
1380 | } | ||
1381 | else | ||
1382 | { | ||
1383 | m_log.Warn("[MONEY]: Potential Fraud Warning, got money transfer request for avatar that isn't in this simulator - Details; Sender:" + | ||
1384 | e.sender.ToString() + " Receiver: " + e.receiver.ToString() + " Amount: " + e.amount.ToString()); | ||
1385 | } | ||
1386 | } | 752 | } |
1387 | 753 | ||
1388 | /// <summary> | 754 | /// <summary> |
@@ -1391,17 +757,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1391 | /// <param name="avatar"></param> | 757 | /// <param name="avatar"></param> |
1392 | private void MakeChildAgent(ScenePresence avatar) | 758 | private void MakeChildAgent(ScenePresence avatar) |
1393 | { | 759 | { |
1394 | lock (m_rootAgents) | 760 | |
1395 | { | ||
1396 | if (m_rootAgents.ContainsKey(avatar.UUID)) | ||
1397 | { | ||
1398 | if (m_rootAgents[avatar.UUID] == avatar.Scene.RegionInfo.originRegionID) | ||
1399 | { | ||
1400 | m_rootAgents.Remove(avatar.UUID); | ||
1401 | // m_log.Debug("[MONEY]: Removing " + avatar.Firstname + " " + avatar.Lastname + " as a root agent"); | ||
1402 | } | ||
1403 | } | ||
1404 | } | ||
1405 | } | 761 | } |
1406 | 762 | ||
1407 | /// <summary> | 763 | /// <summary> |
@@ -1410,14 +766,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1410 | /// <param name="AgentId"></param> | 766 | /// <param name="AgentId"></param> |
1411 | private void ClientLoggedOut(UUID AgentId) | 767 | private void ClientLoggedOut(UUID AgentId) |
1412 | { | 768 | { |
1413 | lock (m_rootAgents) | 769 | |
1414 | { | ||
1415 | if (m_rootAgents.ContainsKey(AgentId)) | ||
1416 | { | ||
1417 | m_rootAgents.Remove(AgentId); | ||
1418 | //m_log.Info("[MONEY]: Removing " + AgentId + ". Agent logged out."); | ||
1419 | } | ||
1420 | } | ||
1421 | } | 770 | } |
1422 | 771 | ||
1423 | /// <summary> | 772 | /// <summary> |
@@ -1437,104 +786,13 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1437 | /// <param name="regionID"></param> | 786 | /// <param name="regionID"></param> |
1438 | private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) | 787 | private void AvatarEnteringParcel(ScenePresence avatar, int localLandID, UUID regionID) |
1439 | { | 788 | { |
1440 | lock (m_rootAgents) | 789 | |
1441 | { | ||
1442 | if (m_rootAgents.ContainsKey(avatar.UUID)) | ||
1443 | { | ||
1444 | if (avatar.Scene.RegionInfo.originRegionID != m_rootAgents[avatar.UUID]) | ||
1445 | { | ||
1446 | m_rootAgents[avatar.UUID] = avatar.Scene.RegionInfo.originRegionID; | ||
1447 | |||
1448 | |||
1449 | //m_log.Info("[MONEY]: Claiming " + avatar.Firstname + " " + avatar.Lastname + " in region:" + avatar.RegionHandle + "."); | ||
1450 | // Claim User! my user! Mine mine mine! | ||
1451 | if (m_MoneyAddress.Length > 0) | ||
1452 | { | ||
1453 | Scene RegionItem = GetSceneByUUID(regionID); | ||
1454 | if (RegionItem != null) | ||
1455 | { | ||
1456 | Hashtable hresult = | ||
1457 | claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret); | ||
1458 | if ((bool)hresult["success"] == true) | ||
1459 | { | ||
1460 | int funds = 0; | ||
1461 | try | ||
1462 | { | ||
1463 | funds = (Int32)hresult["funds"]; | ||
1464 | } | ||
1465 | catch (InvalidCastException) | ||
1466 | { | ||
1467 | } | ||
1468 | SetLocalFundsForAgentID(avatar.UUID, funds); | ||
1469 | } | ||
1470 | else | ||
1471 | { | ||
1472 | avatar.ControllingClient.SendAgentAlertMessage((string)hresult["errorMessage"], true); | ||
1473 | } | ||
1474 | } | ||
1475 | } | ||
1476 | } | ||
1477 | else | ||
1478 | { | ||
1479 | ILandObject obj = avatar.Scene.LandChannel.GetLandObject(avatar.AbsolutePosition.X, avatar.AbsolutePosition.Y); | ||
1480 | if ((obj.landData.Flags & (uint)Parcel.ParcelFlags.AllowDamage) != 0) | ||
1481 | { | ||
1482 | avatar.Invulnerable = false; | ||
1483 | } | ||
1484 | else | ||
1485 | { | ||
1486 | avatar.Invulnerable = true; | ||
1487 | } | ||
1488 | } | ||
1489 | } | ||
1490 | else | ||
1491 | { | ||
1492 | lock (m_rootAgents) | ||
1493 | { | ||
1494 | m_rootAgents.Add(avatar.UUID, avatar.Scene.RegionInfo.originRegionID); | ||
1495 | } | ||
1496 | if (m_MoneyAddress.Length > 0) | ||
1497 | { | ||
1498 | Scene RegionItem = GetSceneByUUID(regionID); | ||
1499 | if (RegionItem != null) | ||
1500 | { | ||
1501 | Hashtable hresult = claim_user(avatar.UUID, avatar.ControllingClient.SecureSessionId, regionID, RegionItem.RegionInfo.regionSecret); | ||
1502 | if ((bool) hresult["success"] == true) | ||
1503 | { | ||
1504 | int funds = 0; | ||
1505 | try | ||
1506 | { | ||
1507 | funds = (Int32) hresult["funds"]; | ||
1508 | } | ||
1509 | catch (InvalidCastException) | ||
1510 | { | ||
1511 | } | ||
1512 | SetLocalFundsForAgentID(avatar.UUID, funds); | ||
1513 | } | ||
1514 | else | ||
1515 | { | ||
1516 | avatar.ControllingClient.SendAgentAlertMessage((string) hresult["errorMessage"], true); | ||
1517 | } | ||
1518 | } | ||
1519 | } | ||
1520 | |||
1521 | //m_log.Info("[MONEY]: Claiming " + avatar.Firstname + " " + avatar.Lastname + " in region:" + avatar.RegionHandle + "."); | ||
1522 | } | ||
1523 | } | ||
1524 | //m_log.Info("[FRIEND]: " + avatar.Name + " status:" + (!avatar.IsChildAgent).ToString()); | 790 | //m_log.Info("[FRIEND]: " + avatar.Name + " status:" + (!avatar.IsChildAgent).ToString()); |
1525 | } | 791 | } |
1526 | 792 | ||
1527 | public int GetBalance(IClientAPI client) | 793 | public int GetBalance(IClientAPI client) |
1528 | { | 794 | { |
1529 | GetClientFunds(client); | 795 | return 0; |
1530 | |||
1531 | lock (m_KnownClientFunds) | ||
1532 | { | ||
1533 | if (!m_KnownClientFunds.ContainsKey(client.AgentId)) | ||
1534 | return 0; | ||
1535 | |||
1536 | return m_KnownClientFunds[client.AgentId]; | ||
1537 | } | ||
1538 | } | 796 | } |
1539 | 797 | ||
1540 | // Please do not refactor these to be just one method | 798 | // Please do not refactor these to be just one method |
@@ -1552,8 +810,6 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1552 | 810 | ||
1553 | public bool AmountCovered(IClientAPI client, int amount) | 811 | public bool AmountCovered(IClientAPI client, int amount) |
1554 | { | 812 | { |
1555 | if (GetBalance(client) < amount) | ||
1556 | return false; | ||
1557 | return true; | 813 | return true; |
1558 | } | 814 | } |
1559 | 815 | ||
@@ -1563,33 +819,7 @@ namespace OpenSim.Region.ReplaceableModules.MoneyModule | |||
1563 | UUID sessionID, UUID groupID, UUID categoryID, | 819 | UUID sessionID, UUID groupID, UUID categoryID, |
1564 | uint localID, byte saleType, int salePrice) | 820 | uint localID, byte saleType, int salePrice) |
1565 | { | 821 | { |
1566 | GetClientFunds(remoteClient); | 822 | |
1567 | |||
1568 | if (!m_KnownClientFunds.ContainsKey(remoteClient.AgentId)) | ||
1569 | { | ||
1570 | remoteClient.SendAgentAlertMessage("Unable to buy now. Your account balance was not found.", false); | ||
1571 | return; | ||
1572 | } | ||
1573 | |||
1574 | int funds = m_KnownClientFunds[remoteClient.AgentId]; | ||
1575 | |||
1576 | if (salePrice != 0 && funds < salePrice) | ||
1577 | { | ||
1578 | remoteClient.SendAgentAlertMessage("Unable to buy now. You don't have sufficient funds.", false); | ||
1579 | return; | ||
1580 | } | ||
1581 | |||
1582 | Scene s = LocateSceneClientIn(remoteClient.AgentId); | ||
1583 | |||
1584 | SceneObjectPart part = s.GetSceneObjectPart(localID); | ||
1585 | if (part == null) | ||
1586 | { | ||
1587 | remoteClient.SendAgentAlertMessage("Unable to buy now. The object was not found.", false); | ||
1588 | return; | ||
1589 | } | ||
1590 | |||
1591 | if (s.PerformObjectBuy(remoteClient, categoryID, localID, saleType)) | ||
1592 | doMoneyTransfer(remoteClient.AgentId, part.OwnerID, salePrice, 5000, "Object buy"); | ||
1593 | } | 823 | } |
1594 | } | 824 | } |
1595 | 825 | ||