diff options
author | Teravus Ovares | 2008-04-14 17:13:38 +0000 |
---|---|---|
committer | Teravus Ovares | 2008-04-14 17:13:38 +0000 |
commit | e21886eea0a4d2782a74bb1f974b2e1056fea055 (patch) | |
tree | 33512912e98ad07ab04f3370fd48d1d0ed307a66 /OpenSim | |
parent | * Get Util.GetHostFromDNS to tell us the dns address it was trying to resolve... (diff) | |
download | opensim-SC-e21886eea0a4d2782a74bb1f974b2e1056fea055.zip opensim-SC-e21886eea0a4d2782a74bb1f974b2e1056fea055.tar.gz opensim-SC-e21886eea0a4d2782a74bb1f974b2e1056fea055.tar.bz2 opensim-SC-e21886eea0a4d2782a74bb1f974b2e1056fea055.tar.xz |
* Fixed a few warnings.
* Added license info to a few files it was missing from.
* Fleshed out the landbuy interfaces
* If you add '-helperuri http://127.0.0.1:9000/' to your list of parameters you tell the client to use when you start it up you can transfer ownership of parcels now in standalone. Structured gridmode requires a lot more work, see the documentation in the example money module. The example money module is not secure especially in standalone mode.
Diffstat (limited to '')
12 files changed, 347 insertions, 10 deletions
diff --git a/OpenSim/Framework/Communications/XMPP/Stanza.cs b/OpenSim/Framework/Communications/XMPP/Stanza.cs index 4c57114..ed6ef06 100644 --- a/OpenSim/Framework/Communications/XMPP/Stanza.cs +++ b/OpenSim/Framework/Communications/XMPP/Stanza.cs | |||
@@ -11,9 +11,9 @@ namespace OpenSim.Framework.Communications.XMPP | |||
11 | public string localName = String.Empty; | 11 | public string localName = String.Empty; |
12 | public JId to; | 12 | public JId to; |
13 | public JId from; | 13 | public JId from; |
14 | string id; | 14 | public string id; |
15 | string lang; | 15 | public string lang; |
16 | string nodeName; | 16 | public string nodeName; |
17 | 17 | ||
18 | public Stanza(XmlNode node, Object defaults, bool hasID) | 18 | public Stanza(XmlNode node, Object defaults, bool hasID) |
19 | { | 19 | { |
diff --git a/OpenSim/Framework/IClientAPI.cs b/OpenSim/Framework/IClientAPI.cs index e081e05..cd59fa0 100644 --- a/OpenSim/Framework/IClientAPI.cs +++ b/OpenSim/Framework/IClientAPI.cs | |||
@@ -424,6 +424,9 @@ namespace OpenSim.Framework | |||
424 | public delegate void PacketStats(int inPackets, int outPackets, int unAckedBytes); | 424 | public delegate void PacketStats(int inPackets, int outPackets, int unAckedBytes); |
425 | 425 | ||
426 | public delegate void MoneyTransferRequest(LLUUID sourceID, LLUUID destID, int amount, int transactionType, string description); | 426 | public delegate void MoneyTransferRequest(LLUUID sourceID, LLUUID destID, int amount, int transactionType, string description); |
427 | |||
428 | public delegate void ParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned, | ||
429 | bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated); | ||
427 | 430 | ||
428 | // We keep all this information for fraud purposes in the future. | 431 | // We keep all this information for fraud purposes in the future. |
429 | public delegate void MoneyBalanceRequest(IClientAPI remoteClient, LLUUID agentID, LLUUID sessionID, LLUUID TransactionID); | 432 | public delegate void MoneyBalanceRequest(IClientAPI remoteClient, LLUUID agentID, LLUUID sessionID, LLUUID TransactionID); |
@@ -544,6 +547,7 @@ namespace OpenSim.Framework | |||
544 | 547 | ||
545 | event MoneyBalanceRequest OnMoneyBalanceRequest; | 548 | event MoneyBalanceRequest OnMoneyBalanceRequest; |
546 | event UpdateAvatarProperties OnUpdateAvatarProperties; | 549 | event UpdateAvatarProperties OnUpdateAvatarProperties; |
550 | event ParcelBuy OnParcelBuy; | ||
547 | 551 | ||
548 | 552 | ||
549 | 553 | ||
diff --git a/OpenSim/Region/ClientStack/ClientView.cs b/OpenSim/Region/ClientStack/ClientView.cs index 9fe2144..2599456 100644 --- a/OpenSim/Region/ClientStack/ClientView.cs +++ b/OpenSim/Region/ClientStack/ClientView.cs | |||
@@ -214,6 +214,7 @@ namespace OpenSim.Region.ClientStack | |||
214 | private ViewerEffectEventHandler handlerViewerEffect = null; //OnViewerEffect; | 214 | private ViewerEffectEventHandler handlerViewerEffect = null; //OnViewerEffect; |
215 | private Action<IClientAPI> handlerLogout = null; //OnLogout; | 215 | private Action<IClientAPI> handlerLogout = null; //OnLogout; |
216 | private MoneyTransferRequest handlerMoneyTransferRequest = null; //OnMoneyTransferRequest; | 216 | private MoneyTransferRequest handlerMoneyTransferRequest = null; //OnMoneyTransferRequest; |
217 | private ParcelBuy handlerParcelBuy = null; | ||
217 | private EconomyDataRequest handlerEconomoyDataRequest = null; | 218 | private EconomyDataRequest handlerEconomoyDataRequest = null; |
218 | 219 | ||
219 | private UpdateVector handlerUpdatePrimSinglePosition = null; //OnUpdatePrimSinglePosition; | 220 | private UpdateVector handlerUpdatePrimSinglePosition = null; //OnUpdatePrimSinglePosition; |
@@ -769,6 +770,7 @@ namespace OpenSim.Region.ClientStack | |||
769 | public event EconomyDataRequest OnEconomyDataRequest; | 770 | public event EconomyDataRequest OnEconomyDataRequest; |
770 | 771 | ||
771 | public event MoneyBalanceRequest OnMoneyBalanceRequest; | 772 | public event MoneyBalanceRequest OnMoneyBalanceRequest; |
773 | public event ParcelBuy OnParcelBuy; | ||
772 | 774 | ||
773 | 775 | ||
774 | #region Scene/Avatar to Client | 776 | #region Scene/Avatar to Client |
@@ -2396,6 +2398,7 @@ namespace OpenSim.Region.ClientStack | |||
2396 | AddLocalPacketHandler(PacketType.AgentCachedTexture, AgentTextureCached); | 2398 | AddLocalPacketHandler(PacketType.AgentCachedTexture, AgentTextureCached); |
2397 | AddLocalPacketHandler(PacketType.MultipleObjectUpdate, MultipleObjUpdate); | 2399 | AddLocalPacketHandler(PacketType.MultipleObjectUpdate, MultipleObjUpdate); |
2398 | AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest); | 2400 | AddLocalPacketHandler(PacketType.MoneyTransferRequest, HandleMoneyTransferRequest); |
2401 | AddLocalPacketHandler(PacketType.ParcelBuy, HandleParcelBuyRequest); | ||
2399 | } | 2402 | } |
2400 | 2403 | ||
2401 | private bool HandleMoneyTransferRequest(IClientAPI sender, Packet Pack) | 2404 | private bool HandleMoneyTransferRequest(IClientAPI sender, Packet Pack) |
@@ -2420,6 +2423,28 @@ namespace OpenSim.Region.ClientStack | |||
2420 | } | 2423 | } |
2421 | } | 2424 | } |
2422 | 2425 | ||
2426 | private bool HandleParcelBuyRequest(IClientAPI sender, Packet Pack) | ||
2427 | { | ||
2428 | ParcelBuyPacket parcel = (ParcelBuyPacket)Pack; | ||
2429 | if (parcel.AgentData.AgentID == AgentId && parcel.AgentData.SessionID == this.SessionId) | ||
2430 | { | ||
2431 | handlerParcelBuy = OnParcelBuy; | ||
2432 | if (handlerParcelBuy != null) | ||
2433 | { | ||
2434 | handlerParcelBuy(parcel.AgentData.AgentID, parcel.Data.GroupID, parcel.Data.Final, parcel.Data.IsGroupOwned, | ||
2435 | parcel.Data.RemoveContribution, parcel.Data.LocalID, parcel.ParcelData.Area, parcel.ParcelData.Price, | ||
2436 | false); | ||
2437 | } | ||
2438 | return true; | ||
2439 | |||
2440 | } | ||
2441 | else | ||
2442 | { | ||
2443 | return false; | ||
2444 | } | ||
2445 | |||
2446 | } | ||
2447 | |||
2423 | private bool HandleViewerEffect(IClientAPI sender, Packet Pack) | 2448 | private bool HandleViewerEffect(IClientAPI sender, Packet Pack) |
2424 | { | 2449 | { |
2425 | ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; | 2450 | ViewerEffectPacket viewer = (ViewerEffectPacket)Pack; |
diff --git a/OpenSim/Region/Environment/Interfaces/ILandObject.cs b/OpenSim/Region/Environment/Interfaces/ILandObject.cs index 61d8670..779db01 100644 --- a/OpenSim/Region/Environment/Interfaces/ILandObject.cs +++ b/OpenSim/Region/Environment/Interfaces/ILandObject.cs | |||
@@ -48,6 +48,7 @@ namespace OpenSim.Region.Environment.Interfaces | |||
48 | void resetLandPrimCounts(); | 48 | void resetLandPrimCounts(); |
49 | void addPrimToCount(SceneObjectGroup obj); | 49 | void addPrimToCount(SceneObjectGroup obj); |
50 | void removePrimFromCount(SceneObjectGroup obj); | 50 | void removePrimFromCount(SceneObjectGroup obj); |
51 | void updateLandSold(LLUUID avatarID, LLUUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area); | ||
51 | 52 | ||
52 | 53 | ||
53 | } | 54 | } |
diff --git a/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs b/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs index aabb2d1..d950af9 100644 --- a/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs +++ b/OpenSim/Region/Environment/Modules/BetaGridLikeMoneyModule.cs | |||
@@ -39,12 +39,20 @@ using OpenSim.Region.Environment.Scenes; | |||
39 | using Nwc.XmlRpc; | 39 | using Nwc.XmlRpc; |
40 | 40 | ||
41 | using MoneyTransferArgs = OpenSim.Region.Environment.Scenes.EventManager.MoneyTransferArgs; | 41 | using MoneyTransferArgs = OpenSim.Region.Environment.Scenes.EventManager.MoneyTransferArgs; |
42 | using LandBuyArgs = OpenSim.Region.Environment.Scenes.EventManager.LandBuyArgs; | ||
42 | 43 | ||
43 | namespace OpenSim.Region.Environment.Modules | 44 | namespace OpenSim.Region.Environment.Modules |
44 | { | 45 | { |
45 | /// <summary> | 46 | /// <summary> |
46 | /// Demo Economy/Money Module. This is not a production quality money/economy module! | 47 | /// Demo Economy/Money Module. This is not a production quality money/economy module! |
47 | /// This is a demo for you to use when making one that works for you. | 48 | /// This is a demo for you to use when making one that works for you. |
49 | /// // To use the following you need to add: | ||
50 | /// -helperuri <ADDRESS TO HERE OR grid MONEY SERVER> | ||
51 | /// to the command line parameters you use to start up your client | ||
52 | /// This commonly looks like -helperuri http://127.0.0.1:9000/ | ||
53 | /// | ||
54 | /// Centralized grid structure example using OpenSimWi Redux revision 9+ | ||
55 | /// svn co https://opensimwiredux.svn.sourceforge.net/svnroot/opensimwiredux | ||
48 | /// </summary> | 56 | /// </summary> |
49 | public class BetaGridLikeMoneyModule: IRegionModule | 57 | public class BetaGridLikeMoneyModule: IRegionModule |
50 | { | 58 | { |
@@ -134,6 +142,7 @@ namespace OpenSim.Region.Environment.Modules | |||
134 | if (m_MoneyAddress.Length > 0) | 142 | if (m_MoneyAddress.Length > 0) |
135 | { | 143 | { |
136 | // Centralized grid structure using OpenSimWi Redux revision 9+ | 144 | // Centralized grid structure using OpenSimWi Redux revision 9+ |
145 | // https://opensimwiredux.svn.sourceforge.net/svnroot/opensimwiredux | ||
137 | scene.AddXmlRPCHandler("dynamic_balance_update_request", GridMoneyUpdate); | 146 | scene.AddXmlRPCHandler("dynamic_balance_update_request", GridMoneyUpdate); |
138 | } | 147 | } |
139 | else | 148 | else |
@@ -165,6 +174,8 @@ namespace OpenSim.Region.Environment.Modules | |||
165 | scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel; | 174 | scene.EventManager.OnAvatarEnteringNewParcel += AvatarEnteringParcel; |
166 | scene.EventManager.OnMakeChildAgent += MakeChildAgent; | 175 | scene.EventManager.OnMakeChildAgent += MakeChildAgent; |
167 | scene.EventManager.OnClientClosed += ClientLoggedOut; | 176 | scene.EventManager.OnClientClosed += ClientLoggedOut; |
177 | scene.EventManager.OnLandBuy += ValidateLandBuy; | ||
178 | scene.EventManager.OnValidatedLandBuy += processLandBuy; | ||
168 | 179 | ||
169 | } | 180 | } |
170 | } | 181 | } |
@@ -329,6 +340,101 @@ namespace OpenSim.Region.Environment.Modules | |||
329 | } | 340 | } |
330 | } | 341 | } |
331 | 342 | ||
343 | private void ValidateLandBuy (Object osender, LandBuyArgs e) | ||
344 | { | ||
345 | LLUUID agentId = e.agentId; | ||
346 | int price = e.parcelPrice; | ||
347 | bool final = e.final; | ||
348 | |||
349 | int funds = 0; | ||
350 | |||
351 | if (m_MoneyAddress.Length > 0) | ||
352 | { | ||
353 | IClientAPI aClient = LocateClientObject(agentId); | ||
354 | if (aClient != null) | ||
355 | { | ||
356 | Scene s = LocateSceneClientIn(agentId); | ||
357 | if (s != null) | ||
358 | { | ||
359 | Hashtable hbinfo = GetBalanceForUserFromMoneyServer(aClient.AgentId, aClient.SecureSessionId, s.RegionInfo.originRegionID.ToString(), s.RegionInfo.regionSecret); | ||
360 | if ((bool)hbinfo["success"] == true) | ||
361 | { | ||
362 | |||
363 | Helpers.TryParse((string)hbinfo["agentId"], out agentId); | ||
364 | try | ||
365 | { | ||
366 | funds = (Int32)hbinfo["funds"]; | ||
367 | } | ||
368 | catch (ArgumentException) | ||
369 | { | ||
370 | } | ||
371 | catch (FormatException) | ||
372 | { | ||
373 | } | ||
374 | catch (OverflowException) | ||
375 | { | ||
376 | m_log.ErrorFormat("[MONEY]: While getting the Currency for user {0}, the return funds overflowed.", agentId); | ||
377 | aClient.SendAlertMessage("Unable to get your money balance, money operations will be unavailable"); | ||
378 | } | ||
379 | catch (InvalidCastException) | ||
380 | { | ||
381 | funds = 0; | ||
382 | } | ||
383 | |||
384 | SetLocalFundsForAgentID(agentId, funds); | ||
385 | |||
386 | } | ||
387 | else | ||
388 | { | ||
389 | m_log.WarnFormat("[MONEY]: Getting Money for user {0} failed with the following message:{1}", agentId, (string)hbinfo["errorMessage"]); | ||
390 | aClient.SendAlertMessage((string)hbinfo["errorMessage"]); | ||
391 | } | ||
392 | } | ||
393 | } | ||
394 | } | ||
395 | else | ||
396 | { | ||
397 | funds = GetFundsForAgentID(agentId); | ||
398 | } | ||
399 | if (funds >= e.parcelPrice) | ||
400 | { | ||
401 | lock (e) | ||
402 | { | ||
403 | e.economyValidated = true; | ||
404 | } | ||
405 | XMLRPCHandler.EventManager.TriggerValidatedLandBuy(this, e); | ||
406 | } | ||
407 | } | ||
408 | |||
409 | private void processLandBuy(Object osender, LandBuyArgs e) | ||
410 | { | ||
411 | LLUUID agentId = e.agentId; | ||
412 | int price = e.parcelPrice; | ||
413 | bool final = e.final; | ||
414 | |||
415 | int funds = 0; | ||
416 | |||
417 | // Only do this if we have not already transacted against this. | ||
418 | if (e.transactionID == 0) | ||
419 | { | ||
420 | funds = GetFundsForAgentID(e.agentId); | ||
421 | if (e.landValidated) | ||
422 | { | ||
423 | if (e.parcelPrice >= 0) | ||
424 | { | ||
425 | doMoneyTranfer(agentId, e.parcelOwnerID, e.parcelPrice); | ||
426 | lock (e) | ||
427 | { | ||
428 | e.transactionID = Util.UnixTimeSinceEpoch(); | ||
429 | e.amountDebited = e.parcelPrice; | ||
430 | } | ||
431 | } | ||
432 | // This tells the land module that we've transacted. | ||
433 | XMLRPCHandler.EventManager.TriggerValidatedLandBuy(this, e); | ||
434 | } | ||
435 | } | ||
436 | |||
437 | } | ||
332 | /// <summary> | 438 | /// <summary> |
333 | /// THis method gets called when someone pays someone else as a gift. | 439 | /// THis method gets called when someone pays someone else as a gift. |
334 | /// </summary> | 440 | /// </summary> |
diff --git a/OpenSim/Region/Environment/Modules/LandManagement/LandChannel.cs b/OpenSim/Region/Environment/Modules/LandManagement/LandChannel.cs index ba5a098..a46895e 100644 --- a/OpenSim/Region/Environment/Modules/LandManagement/LandChannel.cs +++ b/OpenSim/Region/Environment/Modules/LandManagement/LandChannel.cs | |||
@@ -1,7 +1,33 @@ | |||
1 | using System; | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
2 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
3 | using System.Text; | 30 | using System.Text; |
4 | |||
5 | using Axiom.Math; | 31 | using Axiom.Math; |
6 | using libsecondlife; | 32 | using libsecondlife; |
7 | using libsecondlife.Packets; | 33 | using libsecondlife.Packets; |
@@ -11,6 +37,8 @@ using OpenSim.Region.Environment.Scenes; | |||
11 | using OpenSim.Region.Environment.Interfaces; | 37 | using OpenSim.Region.Environment.Interfaces; |
12 | using OpenSim.Region.Physics.Manager; | 38 | using OpenSim.Region.Physics.Manager; |
13 | 39 | ||
40 | using LandBuyArgs = OpenSim.Region.Environment.Scenes.EventManager.LandBuyArgs; | ||
41 | |||
14 | namespace OpenSim.Region.Environment.Modules.LandManagement | 42 | namespace OpenSim.Region.Environment.Modules.LandManagement |
15 | { | 43 | { |
16 | public class LandChannel : ILandChannel | 44 | public class LandChannel : ILandChannel |
@@ -232,6 +260,18 @@ namespace OpenSim.Region.Environment.Modules.LandManagement | |||
232 | } | 260 | } |
233 | } | 261 | } |
234 | 262 | ||
263 | public ILandObject getLandObject(int parcelLocalID) | ||
264 | { | ||
265 | lock (landList) | ||
266 | { | ||
267 | if (landList.ContainsKey(parcelLocalID)) | ||
268 | { | ||
269 | return landList[parcelLocalID]; | ||
270 | } | ||
271 | } | ||
272 | return null; | ||
273 | } | ||
274 | |||
235 | public ILandObject getLandObject(int x, int y) | 275 | public ILandObject getLandObject(int x, int y) |
236 | { | 276 | { |
237 | if (x >= Convert.ToInt32(Constants.RegionSize) || y >= Convert.ToInt32(Constants.RegionSize) || x < 0 || y < 0) | 277 | if (x >= Convert.ToInt32(Constants.RegionSize) || y >= Convert.ToInt32(Constants.RegionSize) || x < 0 || y < 0) |
@@ -657,6 +697,7 @@ namespace OpenSim.Region.Environment.Modules.LandManagement | |||
657 | if (landList.ContainsKey(packet.ParcelData.LocalID)) | 697 | if (landList.ContainsKey(packet.ParcelData.LocalID)) |
658 | { | 698 | { |
659 | landList[packet.ParcelData.LocalID].updateLandProperties(packet, remote_client); | 699 | landList[packet.ParcelData.LocalID].updateLandProperties(packet, remote_client); |
700 | |||
660 | } | 701 | } |
661 | } | 702 | } |
662 | 703 | ||
@@ -912,5 +953,49 @@ namespace OpenSim.Region.Environment.Modules.LandManagement | |||
912 | } | 953 | } |
913 | } | 954 | } |
914 | 955 | ||
956 | public void handleLandBuyRequest(Object o, LandBuyArgs e) | ||
957 | { | ||
958 | if (e.economyValidated && e.landValidated) | ||
959 | { | ||
960 | lock (landList) | ||
961 | { | ||
962 | if (landList.ContainsKey(e.parcelLocalID)) | ||
963 | { | ||
964 | landList[e.parcelLocalID].updateLandSold(e.agentId, e.groupId, e.groupOwned, (uint)e.transactionID, e.parcelPrice, e.parcelArea); | ||
965 | return; | ||
966 | } | ||
967 | } | ||
968 | } | ||
969 | else if (e.landValidated == false) | ||
970 | { | ||
971 | ILandObject lob = null; | ||
972 | lock (landList) | ||
973 | { | ||
974 | if (landList.ContainsKey(e.parcelLocalID)) | ||
975 | { | ||
976 | lob = landList[e.parcelLocalID]; | ||
977 | } | ||
978 | } | ||
979 | if (lob != null) | ||
980 | { | ||
981 | LLUUID AuthorizedID = lob.landData.authBuyerID; | ||
982 | int saleprice = lob.landData.salePrice; | ||
983 | LLUUID pOwnerID = lob.landData.ownerID; | ||
984 | |||
985 | bool landforsale = ((lob.landData.landFlags & (uint)(libsecondlife.Parcel.ParcelFlags.ForSale | libsecondlife.Parcel.ParcelFlags.ForSaleObjects | libsecondlife.Parcel.ParcelFlags.SellParcelObjects)) != 0); | ||
986 | if ((AuthorizedID == LLUUID.Zero || AuthorizedID == e.agentId) && e.parcelPrice >= saleprice && landforsale) | ||
987 | { | ||
988 | lock (e) | ||
989 | { | ||
990 | e.parcelOwnerID = pOwnerID; | ||
991 | e.landValidated = true; | ||
992 | |||
993 | } | ||
994 | |||
995 | } | ||
996 | } | ||
997 | m_scene.EventManager.TriggerValidatedLandBuy(this, e); | ||
998 | } | ||
999 | } | ||
915 | } | 1000 | } |
916 | } | 1001 | } |
diff --git a/OpenSim/Region/Environment/Modules/LandManagement/LandManagementModule.cs b/OpenSim/Region/Environment/Modules/LandManagement/LandManagementModule.cs index 614929b..6b2de47 100644 --- a/OpenSim/Region/Environment/Modules/LandManagement/LandManagementModule.cs +++ b/OpenSim/Region/Environment/Modules/LandManagement/LandManagementModule.cs | |||
@@ -1,4 +1,31 @@ | |||
1 | using System; | 1 | /* |
2 | * Copyright (c) Contributors, http://opensimulator.org/ | ||
3 | * See CONTRIBUTORS.TXT for a full list of copyright holders. | ||
4 | * | ||
5 | * Redistribution and use in source and binary forms, with or without | ||
6 | * modification, are permitted provided that the following conditions are met: | ||
7 | * * Redistributions of source code must retain the above copyright | ||
8 | * notice, this list of conditions and the following disclaimer. | ||
9 | * * Redistributions in binary form must reproduce the above copyright | ||
10 | * notice, this list of conditions and the following disclaimer in the | ||
11 | * documentation and/or other materials provided with the distribution. | ||
12 | * * Neither the name of the OpenSim Project nor the | ||
13 | * names of its contributors may be used to endorse or promote products | ||
14 | * derived from this software without specific prior written permission. | ||
15 | * | ||
16 | * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY | ||
17 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | */ | ||
27 | |||
28 | using System; | ||
2 | using System.Collections.Generic; | 29 | using System.Collections.Generic; |
3 | using libsecondlife; | 30 | using libsecondlife; |
4 | using libsecondlife.Packets; | 31 | using libsecondlife.Packets; |
@@ -8,6 +35,8 @@ using OpenSim.Region.Environment.Scenes; | |||
8 | using OpenSim.Region.Environment.Interfaces; | 35 | using OpenSim.Region.Environment.Interfaces; |
9 | using Nini.Config; | 36 | using Nini.Config; |
10 | 37 | ||
38 | using LandBuyArgs = OpenSim.Region.Environment.Scenes.EventManager.LandBuyArgs; | ||
39 | |||
11 | namespace OpenSim.Region.Environment.Modules.LandManagement | 40 | namespace OpenSim.Region.Environment.Modules.LandManagement |
12 | { | 41 | { |
13 | public class LandManagementModule : IRegionModule | 42 | public class LandManagementModule : IRegionModule |
@@ -26,6 +55,8 @@ namespace OpenSim.Region.Environment.Modules.LandManagement | |||
26 | m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts; | 55 | m_scene.EventManager.OnParcelPrimCountUpdate += landChannel.updateLandPrimCounts; |
27 | m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(landChannel.handleAvatarChangingParcel); | 56 | m_scene.EventManager.OnAvatarEnteringNewParcel += new EventManager.AvatarEnteringNewParcel(landChannel.handleAvatarChangingParcel); |
28 | m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(landChannel.handleAnyClientMovement); | 57 | m_scene.EventManager.OnClientMovement += new EventManager.ClientMovement(landChannel.handleAnyClientMovement); |
58 | m_scene.EventManager.OnLandBuy += landChannel.handleLandBuyRequest; | ||
59 | m_scene.EventManager.OnValidatedLandBuy += landChannel.handleLandBuyRequest; | ||
29 | 60 | ||
30 | lock (m_scene) | 61 | lock (m_scene) |
31 | { | 62 | { |
diff --git a/OpenSim/Region/Environment/Modules/LandManagement/LandObject.cs b/OpenSim/Region/Environment/Modules/LandManagement/LandObject.cs index 46ddf38..161434e 100644 --- a/OpenSim/Region/Environment/Modules/LandManagement/LandObject.cs +++ b/OpenSim/Region/Environment/Modules/LandManagement/LandObject.cs | |||
@@ -256,12 +256,28 @@ namespace OpenSim.Region.Environment.Modules.LandManagement | |||
256 | newData.snapshotID = packet.ParcelData.SnapshotID; | 256 | newData.snapshotID = packet.ParcelData.SnapshotID; |
257 | newData.userLocation = packet.ParcelData.UserLocation; | 257 | newData.userLocation = packet.ParcelData.UserLocation; |
258 | newData.userLookAt = packet.ParcelData.UserLookAt; | 258 | newData.userLookAt = packet.ParcelData.UserLookAt; |
259 | 259 | ||
260 | m_scene.LandChannel.updateLandObject(landData.localID, newData); | 260 | m_scene.LandChannel.updateLandObject(landData.localID, newData); |
261 | 261 | ||
262 | sendLandUpdateToAvatarsOverMe(); | 262 | sendLandUpdateToAvatarsOverMe(); |
263 | } | 263 | } |
264 | } | 264 | } |
265 | public void updateLandSold(LLUUID avatarID, LLUUID groupID, bool groupOwned, uint AuctionID, int claimprice, int area) | ||
266 | { | ||
267 | LandData newData = landData.Copy(); | ||
268 | newData.ownerID = avatarID; | ||
269 | newData.groupID = groupID; | ||
270 | newData.isGroupOwned = groupOwned; | ||
271 | //newData.auctionID = AuctionID; | ||
272 | newData.claimDate = Util.UnixTimeSinceEpoch(); | ||
273 | newData.claimPrice = claimprice; | ||
274 | newData.salePrice = 0; | ||
275 | newData.authBuyerID = LLUUID.Zero; | ||
276 | newData.landFlags &= ~(uint)(libsecondlife.Parcel.ParcelFlags.ForSale | Parcel.ParcelFlags.ForSaleObjects | Parcel.ParcelFlags.SellParcelObjects); | ||
277 | m_scene.LandChannel.updateLandObject(landData.localID, newData); | ||
278 | |||
279 | sendLandUpdateToAvatarsOverMe(); | ||
280 | } | ||
265 | 281 | ||
266 | public bool isEitherBannedOrRestricted(LLUUID avatar) | 282 | public bool isEitherBannedOrRestricted(LLUUID avatar) |
267 | { | 283 | { |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index ebdb0a6..1c36853 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs | |||
@@ -130,6 +130,15 @@ namespace OpenSim.Region.Environment.Scenes | |||
130 | EventManager.TriggerMoneyTransfer(this, args); | 130 | EventManager.TriggerMoneyTransfer(this, args); |
131 | } | 131 | } |
132 | 132 | ||
133 | public virtual void ProcessParcelBuy(LLUUID agentId, LLUUID groupId, bool final, bool groupOwned, | ||
134 | bool removeContribution, int parcelLocalID, int parcelArea, int parcelPrice, bool authenticated) | ||
135 | { | ||
136 | EventManager.LandBuyArgs args = new EventManager.LandBuyArgs( | ||
137 | agentId, groupId, final, groupOwned, removeContribution, parcelLocalID, parcelArea, parcelPrice, authenticated); | ||
138 | |||
139 | m_eventManager.TriggerLandBuy(this, args); | ||
140 | } | ||
141 | |||
133 | public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) | 142 | public virtual void ProcessObjectGrab(uint localID, LLVector3 offsetPos, IClientAPI remoteClient) |
134 | { | 143 | { |
135 | 144 | ||
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index f15ec43..410120f 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -1001,8 +1001,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
1001 | LLVector3 RayEnd = new LLVector3(0, 0, 0); | 1001 | LLVector3 RayEnd = new LLVector3(0, 0, 0); |
1002 | LLVector3 RayStart = new LLVector3(0, 0, 0); | 1002 | LLVector3 RayStart = new LLVector3(0, 0, 0); |
1003 | LLVector3 direction = new LLVector3(0, 0, -1); | 1003 | LLVector3 direction = new LLVector3(0, 0, -1); |
1004 | Vector3 AXOrigin = new Vector3(); | 1004 | //Vector3 AXOrigin = new Vector3(); |
1005 | Vector3 AXdirection = new Vector3(); | 1005 | //Vector3 AXdirection = new Vector3(); |
1006 | Ray testRay = new Ray(); | 1006 | Ray testRay = new Ray(); |
1007 | EntityIntersection rt = new EntityIntersection(); | 1007 | EntityIntersection rt = new EntityIntersection(); |
1008 | 1008 | ||
@@ -1573,6 +1573,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
1573 | 1573 | ||
1574 | client.OnGrabObject += ProcessObjectGrab; | 1574 | client.OnGrabObject += ProcessObjectGrab; |
1575 | client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; | 1575 | client.OnMoneyTransferRequest += ProcessMoneyTransferRequest; |
1576 | client.OnParcelBuy += ProcessParcelBuy; | ||
1576 | client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; | 1577 | client.OnAvatarPickerRequest += ProcessAvatarPickerRequest; |
1577 | client.OnPacketStats += AddPacketStats; | 1578 | client.OnPacketStats += AddPacketStats; |
1578 | 1579 | ||
diff --git a/OpenSim/Region/Environment/Scenes/SceneEvents.cs b/OpenSim/Region/Environment/Scenes/SceneEvents.cs index 02c9f3f..67edf6b 100644 --- a/OpenSim/Region/Environment/Scenes/SceneEvents.cs +++ b/OpenSim/Region/Environment/Scenes/SceneEvents.cs | |||
@@ -176,10 +176,50 @@ namespace OpenSim.Region.Environment.Scenes | |||
176 | } | 176 | } |
177 | } | 177 | } |
178 | 178 | ||
179 | public class LandBuyArgs : System.EventArgs | ||
180 | { | ||
181 | public LLUUID agentId = LLUUID.Zero; | ||
182 | |||
183 | public LLUUID groupId = LLUUID.Zero; | ||
184 | |||
185 | public LLUUID parcelOwnerID = LLUUID.Zero; | ||
186 | |||
187 | public bool final = false; | ||
188 | public bool groupOwned = false; | ||
189 | public bool removeContribution = false; | ||
190 | public int parcelLocalID = 0; | ||
191 | public int parcelArea = 0; | ||
192 | public int parcelPrice = 0; | ||
193 | public bool authenticated = false; | ||
194 | public bool landValidated = false; | ||
195 | public bool economyValidated = false; | ||
196 | public int transactionID = 0; | ||
197 | public int amountDebited = 0; | ||
198 | |||
199 | |||
200 | public LandBuyArgs(LLUUID pagentId, LLUUID pgroupId, bool pfinal, bool pgroupOwned, | ||
201 | bool premoveContribution, int pparcelLocalID, int pparcelArea, int pparcelPrice, | ||
202 | bool pauthenticated) | ||
203 | { | ||
204 | agentId = pagentId; | ||
205 | groupId = pgroupId; | ||
206 | final = pfinal; | ||
207 | groupOwned = pgroupOwned; | ||
208 | removeContribution = premoveContribution; | ||
209 | parcelLocalID = pparcelLocalID; | ||
210 | parcelArea = pparcelArea; | ||
211 | parcelPrice = pparcelPrice; | ||
212 | authenticated = pauthenticated; | ||
213 | } | ||
214 | } | ||
215 | |||
179 | public delegate void MoneyTransferEvent(Object sender, MoneyTransferArgs e); | 216 | public delegate void MoneyTransferEvent(Object sender, MoneyTransferArgs e); |
180 | 217 | ||
181 | public event MoneyTransferEvent OnMoneyTransfer; | 218 | public delegate void LandBuy(Object sender, LandBuyArgs e); |
182 | 219 | ||
220 | public event MoneyTransferEvent OnMoneyTransfer; | ||
221 | public event LandBuy OnLandBuy; | ||
222 | public event LandBuy OnValidatedLandBuy; | ||
183 | 223 | ||
184 | /* Designated Event Deletage Instances */ | 224 | /* Designated Event Deletage Instances */ |
185 | 225 | ||
@@ -212,6 +252,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
212 | private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps; | 252 | private RegisterCapsEvent handlerRegisterCaps = null; // OnRegisterCaps; |
213 | private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps; | 253 | private DeregisterCapsEvent handlerDeregisterCaps = null; // OnDeregisterCaps; |
214 | private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null; | 254 | private NewInventoryItemUploadComplete handlerNewInventoryItemUpdateComplete = null; |
255 | private LandBuy handlerLandBuy = null; | ||
256 | private LandBuy handlerValidatedLandBuy = null; | ||
215 | 257 | ||
216 | public void TriggerOnScriptChangedEvent(uint localID, uint change) | 258 | public void TriggerOnScriptChangedEvent(uint localID, uint change) |
217 | { | 259 | { |
@@ -476,5 +518,21 @@ namespace OpenSim.Region.Environment.Scenes | |||
476 | handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel); | 518 | handlerNewInventoryItemUpdateComplete(agentID, AssetID, AssetName, userlevel); |
477 | } | 519 | } |
478 | } | 520 | } |
521 | public void TriggerLandBuy (Object sender, LandBuyArgs e) | ||
522 | { | ||
523 | handlerLandBuy = OnLandBuy; | ||
524 | if (handlerLandBuy != null) | ||
525 | { | ||
526 | handlerLandBuy(sender, e); | ||
527 | } | ||
528 | } | ||
529 | public void TriggerValidatedLandBuy(Object sender, LandBuyArgs e) | ||
530 | { | ||
531 | handlerValidatedLandBuy = OnValidatedLandBuy; | ||
532 | if (handlerValidatedLandBuy != null) | ||
533 | { | ||
534 | handlerValidatedLandBuy(sender, e); | ||
535 | } | ||
536 | } | ||
479 | } | 537 | } |
480 | } | 538 | } |
diff --git a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs index 9e9b52b..23b3015 100644 --- a/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs +++ b/OpenSim/Region/Examples/SimpleModule/MyNpcCharacter.cs | |||
@@ -49,6 +49,7 @@ namespace OpenSim.Region.Examples.SimpleModule | |||
49 | public event ObjectPermissions OnObjectPermissions; | 49 | public event ObjectPermissions OnObjectPermissions; |
50 | 50 | ||
51 | public event MoneyTransferRequest OnMoneyTransferRequest; | 51 | public event MoneyTransferRequest OnMoneyTransferRequest; |
52 | public event ParcelBuy OnParcelBuy; | ||
52 | public event Action<IClientAPI> OnConnectionClosed; | 53 | public event Action<IClientAPI> OnConnectionClosed; |
53 | 54 | ||
54 | public event ImprovedInstantMessage OnInstantMessage; | 55 | public event ImprovedInstantMessage OnInstantMessage; |