llparcel.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:25k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llparcel.h
  3.  *
  4.  * $LicenseInfo:firstyear=2002&license=viewergpl$
  5.  * 
  6.  * Copyright (c) 2002-2010, Linden Research, Inc.
  7.  * 
  8.  * Second Life Viewer Source Code
  9.  * The source code in this file ("Source Code") is provided by Linden Lab
  10.  * to you under the terms of the GNU General Public License, version 2.0
  11.  * ("GPL"), unless you have obtained a separate licensing agreement
  12.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  13.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  14.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  15.  * 
  16.  * There are special exceptions to the terms and conditions of the GPL as
  17.  * it is applied to this Source Code. View the full text of the exception
  18.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  19.  * online at
  20.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  21.  * 
  22.  * By copying, modifying or distributing this software, you acknowledge
  23.  * that you have read and understood your obligations described above,
  24.  * and agree to abide by those obligations.
  25.  * 
  26.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  27.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  28.  * COMPLETENESS OR PERFORMANCE.
  29.  * $/LicenseInfo$
  30.  */
  31. #ifndef LL_LLPARCEL_H
  32. #define LL_LLPARCEL_H
  33. #include <time.h>
  34. #include <iostream>
  35. #include "lluuid.h"
  36. #include "llparcelflags.h"
  37. #include "llpermissions.h"
  38. #include "lltimer.h"
  39. #include "v3math.h"
  40. // Grid out of which parcels taken is stepped every 4 meters.
  41. const F32 PARCEL_GRID_STEP_METERS = 4.f;
  42. // Area of one "square" of parcel
  43. const S32 PARCEL_UNIT_AREA = 16;
  44. // Height _above_ground_ that parcel boundary ends
  45. const F32 PARCEL_HEIGHT = 50.f;
  46. //Height above ground which parcel boundries exist for explicitly banned avatars
  47. const F32 BAN_HEIGHT = 768.f;
  48. // Maximum number of entries in an access list
  49. const S32 PARCEL_MAX_ACCESS_LIST = 300;
  50. //Maximum number of entires in an update packet
  51. //for access/ban lists.
  52. const F32 PARCEL_MAX_ENTRIES_PER_PACKET = 48.f;
  53. // Weekly charge for listing a parcel in the directory
  54. const S32 PARCEL_DIRECTORY_FEE = 30;
  55. const S32 PARCEL_PASS_PRICE_DEFAULT = 10;
  56. const F32 PARCEL_PASS_HOURS_DEFAULT = 1.f;
  57. // Number of "chunks" in which parcel overlay data is sent
  58. // Chunk 0 = southern rows, entire width
  59. const S32 PARCEL_OVERLAY_CHUNKS = 4;
  60. // Bottom three bits are a color index for the land overlay
  61. const U8 PARCEL_COLOR_MASK = 0x07;
  62. const U8 PARCEL_PUBLIC = 0x00;
  63. const U8 PARCEL_OWNED = 0x01;
  64. const U8 PARCEL_GROUP = 0x02;
  65. const U8 PARCEL_SELF = 0x03;
  66. const U8 PARCEL_FOR_SALE = 0x04;
  67. const U8 PARCEL_AUCTION = 0x05;
  68. // unused 0x06
  69. // unused 0x07
  70. // flag, unused 0x08
  71. // flag, unused 0x10
  72. const U8 PARCEL_SOUND_LOCAL = 0x20;
  73. const U8 PARCEL_WEST_LINE = 0x40; // flag, property line on west edge
  74. const U8 PARCEL_SOUTH_LINE = 0x80; // flag, property line on south edge
  75. // Transmission results for parcel properties
  76. const S32 PARCEL_RESULT_NO_DATA = -1;
  77. const S32 PARCEL_RESULT_SUCCESS = 0; // got exactly one parcel
  78. const S32 PARCEL_RESULT_MULTIPLE = 1; // got multiple parcels
  79. const S32 SELECTED_PARCEL_SEQ_ID = -10000;
  80. const S32 COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID =  -20000;
  81. const S32 COLLISION_BANNED_PARCEL_SEQ_ID = -30000;
  82. const S32 COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID =  -40000;
  83. const S32 HOVERED_PARCEL_SEQ_ID =  -50000;
  84. const U32 RT_NONE = 0x1 << 0;
  85. const U32 RT_OWNER = 0x1 << 1;
  86. const U32 RT_GROUP = 0x1 << 2;
  87. const U32 RT_OTHER = 0x1 << 3;
  88. const U32 RT_LIST = 0x1 << 4;
  89. const U32 RT_SELL = 0x1 << 5;
  90. // Timeouts for parcels
  91. // default is 21 days * 24h/d * 60m/h * 60s/m *1000000 usec/s = 1814400000000
  92. const U64 DEFAULT_USEC_CONVERSION_TIMEOUT = U64L(1814400000000);
  93. // ***** TESTING is 10 minutes
  94. //const U64 DEFAULT_USEC_CONVERSION_TIMEOUT = U64L(600000000);
  95. // group is 60 days * 24h/d * 60m/h * 60s/m *1000000 usec/s = 5184000000000
  96. const U64 GROUP_USEC_CONVERSION_TIMEOUT = U64L(5184000000000);
  97. // ***** TESTING is 10 minutes
  98. //const U64 GROUP_USEC_CONVERSION_TIMEOUT = U64L(600000000);
  99. // default sale timeout is 2 days -> 172800000000
  100. const U64 DEFAULT_USEC_SALE_TIMEOUT = U64L(172800000000);
  101. // ***** TESTING is 10 minutes
  102. //const U64 DEFAULT_USEC_SALE_TIMEOUT = U64L(600000000);
  103. // more grace period extensions.
  104. const U64 SEVEN_DAYS_IN_USEC = U64L(604800000000);
  105. // if more than 100,000s before sale revert, and no extra extension
  106. // has been given, go ahead and extend it more. That's about 1.2 days.
  107. const S32 EXTEND_GRACE_IF_MORE_THAN_SEC = 100000;
  108. class LLMessageSystem;
  109. class LLSD;
  110. class LLAccessEntry
  111. {
  112. public:
  113. LLUUID mID; // Agent ID
  114. S32 mTime; // Time (unix seconds) when entry expires
  115. U32 mFlags; // Not used - currently should always be zero
  116. };
  117. typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator;
  118. typedef std::map<LLUUID,LLAccessEntry>::const_iterator access_map_const_iterator;
  119. class LLParcel
  120. {
  121. public:
  122. enum EOwnershipStatus
  123. {
  124. OS_LEASED = 0,
  125. OS_LEASE_PENDING = 1,
  126. OS_ABANDONED = 2,
  127. OS_COUNT = 3,
  128. OS_NONE = -1
  129. };
  130. enum ECategory
  131. {
  132. C_NONE = 0,
  133. C_LINDEN,
  134. C_ADULT,
  135. C_ARTS, // "arts & culture"
  136. C_BUSINESS, // was "store"
  137. C_EDUCATIONAL,
  138. C_GAMING, // was "game"
  139. C_HANGOUT, // was "gathering place"
  140. C_NEWCOMER,
  141. C_PARK, // "parks & nature"
  142. C_RESIDENTIAL, // was "homestead"
  143. C_SHOPPING,
  144. C_STAGE,
  145. C_OTHER,
  146. C_COUNT,
  147. C_ANY = -1 // only useful in queries
  148. };
  149. enum EAction
  150. {
  151. A_CREATE = 0,
  152. A_RELEASE = 1,
  153. A_ABSORB = 2,
  154. A_ABSORBED = 3,
  155. A_DIVIDE = 4,
  156. A_DIVISION = 5,
  157. A_ACQUIRE = 6,
  158. A_RELINQUISH = 7,
  159. A_CONFIRM = 8,
  160. A_COUNT = 9,
  161. A_UNKNOWN = -1
  162. };
  163. enum ELandingType
  164. {
  165. L_NONE = 0,
  166. L_LANDING_POINT = 1,
  167. L_DIRECT = 2
  168. };
  169. // CREATORS
  170. LLParcel();
  171. LLParcel(
  172. const LLUUID &owner_id,
  173. BOOL modify,
  174. BOOL terraform,
  175. BOOL damage,
  176. time_t claim_date,
  177. S32 claim_price,
  178. S32 rent_price,
  179. S32 area,
  180. S32 sim_object_limit,
  181. F32 parcel_object_bonus,
  182. BOOL is_group_owned = FALSE);
  183. virtual ~LLParcel();
  184. void init(
  185. const LLUUID &owner_id,
  186. BOOL modify,
  187. BOOL terraform,
  188. BOOL damage,
  189. time_t claim_date,
  190. S32 claim_price,
  191. S32 rent_price,
  192. S32 area,
  193. S32 sim_object_limit,
  194. F32 parcel_object_bonus,
  195. BOOL is_group_owned = FALSE);
  196. // TODO: make an actual copy constructor for this
  197. void overrideParcelFlags(U32 flags);
  198. // if you specify an agent id here, the group id will be zeroed
  199. void overrideOwner(
  200. const LLUUID& owner_id,
  201. BOOL is_group_owned = FALSE);
  202. void overrideSaleTimerExpires(F32 secs_left) { mSaleTimerExpires.setTimerExpirySec(secs_left); }
  203. // MANIPULATORS
  204. void generateNewID() { mID.generate(); }
  205. void setName(const std::string& name);
  206. void setDesc(const std::string& desc);
  207. void setMusicURL(const std::string& url);
  208. void setMediaURL(const std::string& url);
  209. void setMediaType(const std::string& type);
  210. void setMediaDesc(const std::string& desc);
  211. void setMediaID(const LLUUID& id) { mMediaID = id; }
  212. void setMediaAutoScale ( U8 flagIn ) { mMediaAutoScale = flagIn; }
  213. void    setMediaLoop (U8 loop) { mMediaLoop = loop; }
  214. void setObscureMedia( U8 flagIn ) { mObscureMedia = flagIn; }
  215. void setObscureMusic( U8 flagIn ) { mObscureMusic = flagIn; }
  216. void setMediaWidth(S32 width);
  217. void setMediaHeight(S32 height);
  218. void setMediaCurrentURL(const std::string& url);
  219. void setMediaURLFilterEnable(U8 enable) { mMediaURLFilterEnable = enable; }
  220. void setMediaURLFilterList(LLSD list);
  221. void setMediaAllowNavigate(U8 enable) { mMediaAllowNavigate = enable; }
  222. void setMediaURLTimeout(F32 timeout) { mMediaURLTimeout = timeout; }
  223. void setMediaPreventCameraZoom(U8 enable) { mMediaPreventCameraZoom = enable; }
  224. void setMediaURLResetTimer(F32 time);
  225. virtual void setLocalID(S32 local_id);
  226. // blow away all the extra crap lurking in parcels, including urls, access lists, etc
  227. void clearParcel();
  228. // This value is not persisted out to the parcel file, it is only
  229. // a per-process blocker for attempts to purchase.
  230. void setInEscrow(bool in_escrow) { mInEscrow = in_escrow; }
  231. void setAuthorizedBuyerID(const LLUUID& id) { mAuthBuyerID = id; }
  232. //void overrideBuyerID(const LLUUID& id) { mBuyerID = id; }
  233. void setCategory(ECategory category) { mCategory = category; }
  234. void setSnapshotID(const LLUUID& id) { mSnapshotID = id; }
  235. void setUserLocation(const LLVector3& pos) { mUserLocation = pos; }
  236. void setUserLookAt(const LLVector3& rot) { mUserLookAt = rot; }
  237. void setLandingType(const ELandingType type) { mLandingType = type; }
  238. void setAuctionID(U32 auction_id) { mAuctionID = auction_id;}
  239. void setAllParcelFlags(U32 flags);
  240. void setParcelFlag(U32 flag, BOOL b);
  241. virtual void setArea(S32 area, S32 sim_object_limit);
  242. void setDiscountRate(F32 rate);
  243. void setAllowModify(BOOL b) { setParcelFlag(PF_CREATE_OBJECTS, b); }
  244. void setAllowGroupModify(BOOL b) { setParcelFlag(PF_CREATE_GROUP_OBJECTS, b); }
  245. void setAllowAllObjectEntry(BOOL b) { setParcelFlag(PF_ALLOW_ALL_OBJECT_ENTRY, b); }
  246. void setAllowGroupObjectEntry(BOOL b) { setParcelFlag(PF_ALLOW_GROUP_OBJECT_ENTRY, b); }
  247. void setAllowTerraform(BOOL b){setParcelFlag(PF_ALLOW_TERRAFORM, b); }
  248. void setAllowDamage(BOOL b) { setParcelFlag(PF_ALLOW_DAMAGE, b); }
  249. void setAllowFly(BOOL b) { setParcelFlag(PF_ALLOW_FLY, b); }
  250. void setAllowLandmark(BOOL b){ setParcelFlag(PF_ALLOW_LANDMARK, b); }
  251. void setAllowGroupScripts(BOOL b) { setParcelFlag(PF_ALLOW_GROUP_SCRIPTS, b); }
  252. void setAllowOtherScripts(BOOL b) { setParcelFlag(PF_ALLOW_OTHER_SCRIPTS, b); }
  253. void setAllowDeedToGroup(BOOL b) { setParcelFlag(PF_ALLOW_DEED_TO_GROUP, b); }
  254. void    setContributeWithDeed(BOOL b) { setParcelFlag(PF_CONTRIBUTE_WITH_DEED, b); }
  255. void setForSale(BOOL b) { setParcelFlag(PF_FOR_SALE, b); }
  256. void setSoundOnly(BOOL b) { setParcelFlag(PF_SOUND_LOCAL, b); }
  257. void setDenyAnonymous(BOOL b) { setParcelFlag(PF_DENY_ANONYMOUS, b); }
  258. void setDenyAgeUnverified(BOOL b) { setParcelFlag(PF_DENY_AGEUNVERIFIED, b); }
  259. void setRestrictPushObject(BOOL b) { setParcelFlag(PF_RESTRICT_PUSHOBJECT, b); }
  260. void setDrawDistance(F32 dist) { mDrawDistance = dist; }
  261. void setSalePrice(S32 price) { mSalePrice = price; }
  262. void setGroupID(const LLUUID& id) { mGroupID = id; }
  263. //void setGroupName(const std::string& s) { mGroupName.assign(s); }
  264. void setPassPrice(S32 price) { mPassPrice = price; }
  265. void setPassHours(F32 hours) { mPassHours = hours; }
  266. // BOOL importStream(std::istream& input_stream);
  267. BOOL importAccessEntry(std::istream& input_stream, LLAccessEntry* entry);
  268. BOOL    importMediaURLFilter(std::istream& input_stream, std::string& url);
  269. // BOOL exportStream(std::ostream& output_stream);
  270. void packMessage(LLMessageSystem* msg);
  271. void packMessage(LLSD& msg);
  272. void unpackMessage(LLMessageSystem* msg);
  273. void packAccessEntries(LLMessageSystem* msg,
  274. const std::map<LLUUID,LLAccessEntry>& list);
  275. void unpackAccessEntries(LLMessageSystem* msg,
  276. std::map<LLUUID,LLAccessEntry>* list);
  277. void setAABBMin(const LLVector3& min) { mAABBMin = min; }
  278. void setAABBMax(const LLVector3& max) { mAABBMax = max; }
  279. // Extend AABB to include rectangle from min to max.
  280. void extendAABB(const LLVector3& box_min, const LLVector3& box_max);
  281. void dump();
  282. // Scans the pass list and removes any items with an expiration
  283. // time earlier than "now".
  284. void expirePasses(S32 now);
  285. // Add to list, suppressing duplicates.  Returns TRUE if added.
  286. BOOL addToAccessList(const LLUUID& agent_id, S32 time);
  287. BOOL addToBanList(const LLUUID& agent_id, S32 time);
  288. BOOL removeFromAccessList(const LLUUID& agent_id);
  289. BOOL removeFromBanList(const LLUUID& agent_id);
  290. // ACCESSORS
  291. const LLUUID& getID() const { return mID; }
  292. const std::string& getName() const { return mName; }
  293. const std::string& getDesc() const { return mDesc; }
  294. const std::string& getMusicURL() const { return mMusicURL; }
  295. const std::string& getMediaURL() const { return mMediaURL; }
  296. const std::string& getMediaDesc() const { return mMediaDesc; }
  297. const std::string& getMediaType() const { return mMediaType; }
  298. const LLUUID& getMediaID() const { return mMediaID; }
  299. S32 getMediaWidth() const { return mMediaWidth; }
  300. S32 getMediaHeight() const { return mMediaHeight; }
  301. U8 getMediaAutoScale() const { return mMediaAutoScale; }
  302. U8              getMediaLoop() const        { return mMediaLoop; }
  303. const std::string&  getMediaCurrentURL() const { return mMediaCurrentURL; }
  304. U8 getObscureMedia() const { return mObscureMedia; }
  305. U8 getObscureMusic() const { return mObscureMusic; }
  306. U8              getMediaURLFilterEnable() const   { return mMediaURLFilterEnable; }
  307. LLSD            getMediaURLFilterList() const     { return mMediaURLFilterList; }
  308. U8              getMediaAllowNavigate() const { return mMediaAllowNavigate; }
  309. F32 getMediaURLTimeout() const { return mMediaURLTimeout; }
  310. U8              getMediaPreventCameraZoom() const { return mMediaPreventCameraZoom; }
  311. S32 getLocalID() const { return mLocalID; }
  312. const LLUUID& getOwnerID() const { return mOwnerID; }
  313. const LLUUID& getGroupID() const { return mGroupID; }
  314. S32 getPassPrice() const { return mPassPrice; }
  315. F32 getPassHours() const { return mPassHours; }
  316. BOOL getIsGroupOwned() const { return mGroupOwned; }
  317. U32 getAuctionID() const { return mAuctionID; }
  318. bool isInEscrow() const { return mInEscrow; }
  319. BOOL isPublic() const;
  320. // Region-local user-specified position
  321. const LLVector3& getUserLocation() const { return mUserLocation; }
  322. const LLVector3& getUserLookAt() const { return mUserLookAt; }
  323. ELandingType getLandingType() const { return mLandingType; }
  324. // User-specified snapshot
  325. const LLUUID& getSnapshotID() const { return mSnapshotID; }
  326. // the authorized buyer id is the person who is the only
  327. // agent/group that has authority to purchase. (ie, ui specified a
  328. // particular agent could buy the plot).
  329. const LLUUID& getAuthorizedBuyerID() const { return mAuthBuyerID; }
  330. // helper function
  331. BOOL isBuyerAuthorized(const LLUUID& buyer_id) const;
  332. // The buyer of a plot is set when someone indicates they want to
  333. // buy the plot, and the system is simply waiting for tier-up
  334. // approval
  335. //const LLUUID& getBuyerID() const { return mBuyerID; }
  336. // functions to deal with ownership status.
  337. EOwnershipStatus getOwnershipStatus() const { return mStatus; }
  338. static const std::string& getOwnershipStatusString(EOwnershipStatus status);
  339. void setOwnershipStatus(EOwnershipStatus status) { mStatus = status; }
  340. // dealing with parcel category information
  341. ECategory getCategory() const {return mCategory; }
  342. static const std::string& getCategoryString(ECategory category);
  343. static const std::string& getCategoryUIString(ECategory category);
  344. static ECategory getCategoryFromString(const std::string& string);
  345. static ECategory getCategoryFromUIString(const std::string& string);
  346. // functions for parcel action (used for logging)
  347. static const std::string& getActionString(EAction action);
  348. // dealing with sales and parcel conversion.
  349. //
  350. // the isSaleTimerExpired will trivially return FALSE if there is
  351. // no sale going on. Pass in the current time in usec which will
  352. // be used for comparison.
  353. BOOL isSaleTimerExpired(const U64& time);
  354. F32 getSaleTimerExpires() { return mSaleTimerExpires.getRemainingTimeF32(); }
  355. // should the parcel join on complete?
  356. //U32 getJoinNeighbors() const { return mJoinNeighbors; }
  357. // need to record a few things with the parcel when a sale
  358. // starts.
  359. void startSale(const LLUUID& buyer_id, BOOL is_buyer_group);
  360. // do the expiration logic, which needs to return values usable in
  361. // a L$ transaction.
  362. void expireSale(U32& type, U8& flags, LLUUID& from_id, LLUUID& to_id);
  363. void completeSale(U32& type, U8& flags, LLUUID& to_id);
  364. void clearSale();
  365. BOOL isMediaResetTimerExpired(const U64& time);
  366. // more accessors
  367. U32 getParcelFlags() const { return mParcelFlags; }
  368. BOOL getParcelFlag(U32 flag) const
  369. { return (mParcelFlags & flag) ? TRUE : FALSE; }
  370. // objects can be added or modified by anyone (only parcel owner if disabled)
  371. BOOL getAllowModify() const
  372. { return (mParcelFlags & PF_CREATE_OBJECTS) ? TRUE : FALSE; }
  373. // objects can be added or modified by group members
  374. BOOL getAllowGroupModify() const
  375. { return (mParcelFlags & PF_CREATE_GROUP_OBJECTS) ? TRUE : FALSE; }
  376. // the parcel can be deeded to the group
  377. BOOL getAllowDeedToGroup() const
  378. { return (mParcelFlags & PF_ALLOW_DEED_TO_GROUP) ? TRUE : FALSE; }
  379. // Does the owner want to make a contribution along with the deed.
  380. BOOL getContributeWithDeed() const
  381. { return (mParcelFlags & PF_CONTRIBUTE_WITH_DEED) ? TRUE : FALSE; }
  382. // heightfield can be modified
  383. BOOL getAllowTerraform() const
  384. { return (mParcelFlags & PF_ALLOW_TERRAFORM) ? TRUE : FALSE; }
  385. // avatars can be hurt here
  386. BOOL getAllowDamage() const
  387. { return (mParcelFlags & PF_ALLOW_DAMAGE) ? TRUE : FALSE; }
  388. BOOL getAllowFly() const
  389. { return (mParcelFlags & PF_ALLOW_FLY) ? TRUE : FALSE; }
  390. // Remove permission restrictions for creating landmarks.
  391. // We should eventually remove this flag completely.
  392. BOOL getAllowLandmark() const
  393. { return TRUE; }
  394. BOOL getAllowGroupScripts() const
  395. { return (mParcelFlags & PF_ALLOW_GROUP_SCRIPTS) ? TRUE : FALSE; }
  396. BOOL getAllowOtherScripts() const
  397. { return (mParcelFlags & PF_ALLOW_OTHER_SCRIPTS) ? TRUE : FALSE; }
  398. BOOL getAllowAllObjectEntry() const
  399. { return (mParcelFlags & PF_ALLOW_ALL_OBJECT_ENTRY) ? TRUE : FALSE; }
  400. BOOL getAllowGroupObjectEntry() const
  401. { return (mParcelFlags & PF_ALLOW_GROUP_OBJECT_ENTRY) ? TRUE : FALSE; }
  402. BOOL getForSale() const
  403. { return (mParcelFlags & PF_FOR_SALE) ? TRUE : FALSE; }
  404. BOOL getSoundLocal() const
  405. { return (mParcelFlags & PF_SOUND_LOCAL) ? TRUE : FALSE; }
  406. BOOL getParcelFlagAllowVoice() const
  407. { return (mParcelFlags & PF_ALLOW_VOICE_CHAT) ? TRUE : FALSE; }
  408. BOOL getParcelFlagUseEstateVoiceChannel() const
  409. { return (mParcelFlags & PF_USE_ESTATE_VOICE_CHAN) ? TRUE : FALSE; }
  410. BOOL getAllowPublish() const
  411. { return (mParcelFlags & PF_ALLOW_PUBLISH) ? TRUE : FALSE; }
  412. BOOL getMaturePublish() const
  413. { return (mParcelFlags & PF_MATURE_PUBLISH) ? TRUE : FALSE; }
  414. BOOL getRestrictPushObject() const
  415. { return (mParcelFlags & PF_RESTRICT_PUSHOBJECT) ? TRUE : FALSE; }
  416. BOOL getRegionPushOverride() const
  417. { return mRegionPushOverride; }
  418. BOOL getRegionDenyAnonymousOverride() const
  419. { return mRegionDenyAnonymousOverride; }
  420. BOOL getRegionDenyAgeUnverifiedOverride() const
  421. { return mRegionDenyAgeUnverifiedOverride; }
  422. F32 getDrawDistance() const { return mDrawDistance; }
  423. S32 getSalePrice() const { return mSalePrice; }
  424. time_t getClaimDate() const { return mClaimDate; }
  425. S32 getClaimPricePerMeter() const { return mClaimPricePerMeter; }
  426. S32 getRentPricePerMeter() const { return mRentPricePerMeter; }
  427. // Area is NOT automatically calculated.  You must calculate it
  428. // and store it with setArea.
  429. S32 getArea() const { return mArea; }
  430. // deprecated 12/11/2003
  431. //F32 getDiscountRate() const { return mDiscountRate; }
  432. S32 getClaimPrice() const { return mClaimPricePerMeter * mArea; }
  433. // Can this agent create objects here?
  434. BOOL allowModifyBy(const LLUUID &agent_id, const LLUUID &group_id) const;
  435. // Can this agent change the shape of the land?
  436. BOOL allowTerraformBy(const LLUUID &agent_id) const;
  437. // Returns 0 if access is OK, otherwise a BA_ return code above.
  438. S32  blockAccess(const LLUUID& agent_id, 
  439. const LLUUID& group_id, 
  440. const BOOL is_agent_identified, 
  441. const BOOL is_agent_transacted,
  442. const BOOL is_agent_ageverified) const;
  443. // Only checks if the agent is explicitly banned from this parcel
  444. BOOL isAgentBanned(const LLUUID& agent_id) const;
  445. static bool isAgentBlockedFromParcel(LLParcel* parcelp, 
  446. const LLUUID& agent_id,
  447. const std::vector<LLUUID>& group_ids,
  448. const BOOL is_agent_identified,
  449. const BOOL is_agent_transacted,
  450. const BOOL is_agent_ageverified);
  451. bool operator==(const LLParcel &rhs) const;
  452. // Calculate rent - area * rent * discount rate
  453. S32 getTotalRent() const;
  454. F32 getAdjustedRentPerMeter() const;
  455. const LLVector3& getAABBMin() const { return mAABBMin; }
  456. const LLVector3& getAABBMax() const { return mAABBMax; }
  457. LLVector3 getCenterpoint() const;
  458. // simwide
  459. S32 getSimWideMaxPrimCapacity() const { return mSimWideMaxPrimCapacity; }
  460. S32 getSimWidePrimCount() const { return mSimWidePrimCount; }
  461. // this parcel only (not simwide)
  462. S32 getMaxPrimCapacity() const { return mMaxPrimCapacity; } // Does not include prim bonus
  463. S32 getPrimCount() const { return mOwnerPrimCount + mGroupPrimCount + mOtherPrimCount + mSelectedPrimCount; }
  464. S32 getOwnerPrimCount() const { return mOwnerPrimCount; }
  465. S32 getGroupPrimCount() const { return mGroupPrimCount; }
  466. S32 getOtherPrimCount() const { return mOtherPrimCount; }
  467. S32 getSelectedPrimCount() const{ return mSelectedPrimCount; }
  468. S32 getTempPrimCount() const { return mTempPrimCount; }
  469. F32 getParcelPrimBonus() const { return mParcelPrimBonus; }
  470. S32 getCleanOtherTime() const { return mCleanOtherTime; }
  471. void setMaxPrimCapacity(S32 max) { mMaxPrimCapacity = max; } // Does not include prim bonus
  472. // simwide
  473. void setSimWideMaxPrimCapacity(S32 current) { mSimWideMaxPrimCapacity = current; }
  474. void setSimWidePrimCount(S32 current) { mSimWidePrimCount = current; }
  475. // this parcel only (not simwide)
  476. void setOwnerPrimCount(S32 current) { mOwnerPrimCount = current; }
  477. void setGroupPrimCount(S32 current) { mGroupPrimCount = current; }
  478. void setOtherPrimCount(S32 current) { mOtherPrimCount = current; }
  479. void setSelectedPrimCount(S32 current) { mSelectedPrimCount = current; }
  480. void setTempPrimCount(S32 current) { mTempPrimCount = current; }
  481. void setParcelPrimBonus(F32 bonus)  { mParcelPrimBonus = bonus; }
  482. void setCleanOtherTime(S32 time) { mCleanOtherTime = time; }
  483. void setRegionPushOverride(BOOL override) {mRegionPushOverride = override; }
  484. void setRegionDenyAnonymousOverride(BOOL override) { mRegionDenyAnonymousOverride = override; }
  485. void setRegionDenyAgeUnverifiedOverride(BOOL override) { mRegionDenyAgeUnverifiedOverride = override; }
  486. // Accessors for parcel sellWithObjects
  487. void setPreviousOwnerID(LLUUID prev_owner) { mPreviousOwnerID = prev_owner; }
  488. void setPreviouslyGroupOwned(BOOL b) { mPreviouslyGroupOwned = b; }
  489. void setSellWithObjects(BOOL b) { setParcelFlag(PF_SELL_PARCEL_OBJECTS, b); }
  490. LLUUID getPreviousOwnerID() const { return mPreviousOwnerID; }
  491. BOOL getPreviouslyGroupOwned() const { return mPreviouslyGroupOwned; }
  492. BOOL getSellWithObjects() const { return (mParcelFlags & PF_SELL_PARCEL_OBJECTS) ? TRUE : FALSE; }
  493. protected:
  494. LLUUID mID;
  495. LLUUID mOwnerID;
  496. LLUUID mGroupID;
  497. BOOL mGroupOwned; // TRUE if mOwnerID is a group_id
  498. LLUUID mPreviousOwnerID;
  499. BOOL mPreviouslyGroupOwned;
  500. EOwnershipStatus mStatus;
  501. ECategory mCategory;
  502. LLUUID mAuthBuyerID;
  503. LLUUID mSnapshotID;
  504. LLVector3 mUserLocation;
  505. LLVector3 mUserLookAt;
  506. ELandingType mLandingType;
  507. LLTimer mSaleTimerExpires;
  508. LLTimer mMediaResetTimer;
  509. S32 mGraceExtension;
  510. // This value is non-zero if there is an auction associated with
  511. // the parcel.
  512. U32 mAuctionID;
  513. // value used to temporarily lock attempts to purchase the parcel.
  514. bool mInEscrow;
  515. time_t mClaimDate; // UTC Unix-format time
  516. S32 mClaimPricePerMeter; // meter squared
  517. S32 mRentPricePerMeter; // meter squared
  518. S32 mArea; // meter squared
  519. F32 mDiscountRate; // 0.0-1.0
  520. F32 mDrawDistance;
  521. U32 mParcelFlags;
  522. S32 mSalePrice; // linden dollars
  523. std::string mName;
  524. std::string mDesc;
  525. std::string mMusicURL;
  526. std::string mMediaURL;
  527. std::string mMediaDesc;
  528. std::string  mMediaType;
  529. S32 mMediaWidth;
  530. S32 mMediaHeight;
  531. U8 mMediaAutoScale;
  532. U8                  mMediaLoop;
  533. std::string         mMediaCurrentURL;
  534. U8 mObscureMedia;
  535. U8 mObscureMusic;
  536. LLUUID mMediaID;
  537. U8                  mMediaURLFilterEnable;
  538. LLSD                mMediaURLFilterList;
  539. U8                  mMediaAllowNavigate;
  540. U8 mMediaPreventCameraZoom;
  541. F32 mMediaURLTimeout;
  542. S32 mPassPrice;
  543. F32 mPassHours;
  544. LLVector3 mAABBMin;
  545. LLVector3 mAABBMax;
  546. S32 mMaxPrimCapacity; // Prims allowed on parcel, does not include prim bonus
  547. S32 mSimWidePrimCount;
  548. S32 mSimWideMaxPrimCapacity;
  549. //S32 mSimWidePrimCorrection;
  550. S32 mOwnerPrimCount;
  551. S32 mGroupPrimCount;
  552. S32 mOtherPrimCount;
  553. S32 mSelectedPrimCount;
  554. S32 mTempPrimCount;
  555. F32 mParcelPrimBonus;
  556. S32 mCleanOtherTime;
  557. BOOL mRegionPushOverride;
  558. BOOL mRegionDenyAnonymousOverride;
  559. BOOL mRegionDenyAgeUnverifiedOverride;
  560. public:
  561. // HACK, make private
  562. S32 mLocalID;
  563. LLUUID     mBanListTransactionID;
  564. LLUUID     mAccessListTransactionID;
  565. std::map<LLUUID,LLAccessEntry> mAccessList;
  566. std::map<LLUUID,LLAccessEntry> mBanList;
  567. std::map<LLUUID,LLAccessEntry> mTempBanList;
  568. std::map<LLUUID,LLAccessEntry> mTempAccessList;
  569. };
  570. const std::string& ownership_status_to_string(LLParcel::EOwnershipStatus status);
  571. LLParcel::EOwnershipStatus ownership_string_to_status(const std::string& s);
  572. LLParcel::ECategory category_string_to_category(const std::string& s);
  573. const std::string& category_to_string(LLParcel::ECategory category);
  574. #endif