llparcel.h

Go to the documentation of this file.
00001 
00031 #ifndef LL_LLPARCEL_H
00032 #define LL_LLPARCEL_H
00033 
00034 #include <time.h>
00035 #include <iostream>
00036 
00037 #include "lluuid.h"
00038 #include "llparcelflags.h"
00039 #include "llpermissions.h"
00040 #include "v3math.h"
00041 
00042 
00043 // Grid out of which parcels taken is stepped every 4 meters.
00044 const F32 PARCEL_GRID_STEP_METERS       = 4.f;
00045 
00046 // Area of one "square" of parcel
00047 const S32 PARCEL_UNIT_AREA                      = 16;
00048 
00049 // Height _above_ground_ that parcel boundary ends
00050 const F32 PARCEL_HEIGHT = 50.f;
00051 
00052 //Height above ground which parcel boundries exist for explicitly banned avatars
00053 const F32 BAN_HEIGHT = 768.f;
00054 
00055 // Maximum number of entries in an access list
00056 const S32 PARCEL_MAX_ACCESS_LIST = 300;
00057 //Maximum number of entires in an update packet
00058 //for access/ban lists.
00059 const F32 PARCEL_MAX_ENTRIES_PER_PACKET = 48.f;
00060 
00061 // Weekly charge for listing a parcel in the directory
00062 const S32 PARCEL_DIRECTORY_FEE = 30;
00063 
00064 const S32 PARCEL_PASS_PRICE_DEFAULT = 10;
00065 const F32 PARCEL_PASS_HOURS_DEFAULT = 1.f;
00066 
00067 // Number of "chunks" in which parcel overlay data is sent
00068 // Chunk 0 = southern rows, entire width
00069 const S32 PARCEL_OVERLAY_CHUNKS = 4;
00070 
00071 // Bottom three bits are a color index for the land overlay
00072 const U8 PARCEL_COLOR_MASK      = 0x07;
00073 const U8 PARCEL_PUBLIC          = 0x00;
00074 const U8 PARCEL_OWNED           = 0x01;
00075 const U8 PARCEL_GROUP           = 0x02;
00076 const U8 PARCEL_SELF            = 0x03;
00077 const U8 PARCEL_FOR_SALE        = 0x04;
00078 const U8 PARCEL_AUCTION         = 0x05;
00079 // unused 0x06
00080 // unused 0x07
00081 // flag, unused 0x08
00082 // flag, unused 0x10
00083 const U8 PARCEL_SOUND_LOCAL = 0x20;
00084 const U8 PARCEL_WEST_LINE       = 0x40; // flag, property line on west edge
00085 const U8 PARCEL_SOUTH_LINE      = 0x80; // flag, property line on south edge
00086 
00087 // Transmission results for parcel properties
00088 const S32 PARCEL_RESULT_NO_DATA = -1;
00089 const S32 PARCEL_RESULT_SUCCESS = 0;    // got exactly one parcel
00090 const S32 PARCEL_RESULT_MULTIPLE = 1;   // got multiple parcels
00091 
00092 const S32 SELECTED_PARCEL_SEQ_ID = -10000;
00093 const S32 COLLISION_NOT_IN_GROUP_PARCEL_SEQ_ID =  -20000;
00094 const S32 COLLISION_BANNED_PARCEL_SEQ_ID = -30000;
00095 const S32 COLLISION_NOT_ON_LIST_PARCEL_SEQ_ID =  -40000;
00096 const S32 HOVERED_PARCEL_SEQ_ID =  -50000;
00097 
00098 const U32 RT_NONE       = 0x1 << 0;
00099 const U32 RT_OWNER      = 0x1 << 1;
00100 const U32 RT_GROUP      = 0x1 << 2;
00101 const U32 RT_OTHER      = 0x1 << 3;
00102 const U32 RT_LIST       = 0x1 << 4;
00103 const U32 RT_SELL       = 0x1 << 5;
00104 
00105 class LLMessageSystem;
00106 class LLSD;
00107 
00108 class LLAccessEntry
00109 {
00110 public:
00111         LLUUID          mID;
00112         S32                     mTime;
00113         U32                     mFlags;
00114 };
00115 
00116 typedef std::map<LLUUID,LLAccessEntry>::iterator access_map_iterator;
00117 typedef std::map<LLUUID,LLAccessEntry>::const_iterator access_map_const_iterator;
00118 
00119 class LLParcel
00120 {
00121 public:
00122         enum EOwnershipStatus
00123         {
00124                 OS_LEASED = 0,
00125                 OS_LEASE_PENDING = 1,
00126                 OS_ABANDONED = 2,
00127                 OS_COUNT = 3,
00128                 OS_NONE = -1
00129         };
00130         enum ECategory
00131         {
00132                 C_NONE = 0,
00133                 C_LINDEN,
00134                 C_ADULT,
00135                 C_ARTS,                 // "arts & culture"
00136                 C_BUSINESS,             // was "store"
00137                 C_EDUCATIONAL,
00138                 C_GAMING,               // was "game"
00139                 C_HANGOUT,              // was "gathering place"
00140                 C_NEWCOMER,
00141                 C_PARK,                 // "parks & nature"
00142                 C_RESIDENTIAL,  // was "homestead"
00143                 C_SHOPPING,
00144                 C_STAGE,
00145                 C_OTHER,
00146                 C_COUNT,
00147                 C_ANY = -1              // only useful in queries
00148         };
00149         enum EAction
00150         {
00151                 A_CREATE = 0,
00152                 A_RELEASE = 1,
00153                 A_ABSORB = 2,
00154                 A_ABSORBED = 3,
00155                 A_DIVIDE = 4,
00156                 A_DIVISION = 5,
00157                 A_ACQUIRE = 6,
00158                 A_RELINQUISH = 7,
00159                 A_CONFIRM = 8,
00160                 A_COUNT = 9,
00161                 A_UNKNOWN = -1
00162         };
00163 
00164         enum ELandingType
00165         {
00166                 L_NONE = 0,
00167                 L_LANDING_POINT = 1,
00168                 L_DIRECT = 2
00169         };
00170 
00171         // CREATORS
00172         LLParcel();
00173         LLParcel(
00174                 const LLUUID &owner_id,
00175                 BOOL modify,
00176                 BOOL terraform,
00177                 BOOL damage,
00178                 time_t claim_date,
00179                 S32 claim_price,
00180                 S32 rent_price,
00181                 S32 area,
00182                 S32 sim_object_limit,
00183                 F32 parcel_object_bonus,
00184                 BOOL is_group_owned = FALSE);
00185         virtual ~LLParcel();
00186 
00187         void init(
00188                 const LLUUID &owner_id,
00189                 BOOL modify,
00190                 BOOL terraform,
00191                 BOOL damage,
00192                 time_t claim_date,
00193                 S32 claim_price,
00194                 S32 rent_price,
00195                 S32 area,
00196                 S32 sim_object_limit,
00197                 F32 parcel_object_bonus,
00198                 BOOL is_group_owned = FALSE);
00199 
00200         // TODO: make an actual copy constructor for this
00201         void overrideParcelFlags(U32 flags);
00202         // if you specify an agent id here, the group id will be zeroed
00203         void overrideOwner(
00204                 const LLUUID& owner_id,
00205                 BOOL is_group_owned = FALSE);
00206         void overrideSaleTimerExpires(F32 secs_left) { mSaleTimerExpires.setTimerExpirySec(secs_left); }
00207 
00208         // MANIPULATORS
00209         void generateNewID() { mID.generate(); }
00210         void setName(const LLString& name);
00211         void setDesc(const LLString& desc);
00212         void setMusicURL(const LLString& url);
00213         void setMediaURL(const LLString& url);
00214         void setMediaType(const char* type);
00215         void setMediaDesc(const char* desc);
00216         void    setMediaID(const LLUUID& id) { mMediaID = id; }
00217         void    setMediaAutoScale ( U8 flagIn ) { mMediaAutoScale = flagIn; }
00218         void    setMediaLoop (U8 loop) { mMediaLoop = loop; }
00219         void    setObscureMedia( U8 flagIn ) { mObscureMedia = flagIn; }
00220         void    setObscureMusic( U8 flagIn ) { mObscureMusic = flagIn; }
00221         void setMediaWidth(S32 width);
00222         void setMediaHeight(S32 height);
00223         virtual void    setLocalID(S32 local_id);
00224 
00225         // blow away all the extra crap lurking in parcels, including urls, access lists, etc
00226         void clearParcel();
00227 
00228         // This value is not persisted out to the parcel file, it is only
00229         // a per-process blocker for attempts to purchase.
00230         void setInEscrow(bool in_escrow) { mInEscrow = in_escrow; }
00231 
00232         void setAuthorizedBuyerID(const LLUUID& id) { mAuthBuyerID = id; }
00233         //void overrideBuyerID(const LLUUID& id) { mBuyerID = id; }
00234         void setCategory(ECategory category) { mCategory = category; }
00235         void setSnapshotID(const LLUUID& id) { mSnapshotID = id; }
00236         void setUserLocation(const LLVector3& pos)      { mUserLocation = pos; }
00237         void setUserLookAt(const LLVector3& rot)        { mUserLookAt = rot; }
00238         void setLandingType(const ELandingType type) { mLandingType = type; }
00239 
00240         void setAuctionID(U32 auction_id) { mAuctionID = auction_id;}
00241 
00242         void    setAllParcelFlags(U32 flags);
00243         void    setParcelFlag(U32 flag, BOOL b);
00244 
00245         void    setArea(S32 area, S32 sim_object_limit);
00246         void    setDiscountRate(F32 rate);
00247 
00248         void    setAllowModify(BOOL b)  { setParcelFlag(PF_CREATE_OBJECTS, b); }
00249         void    setAllowGroupModify(BOOL b)     { setParcelFlag(PF_CREATE_GROUP_OBJECTS, b); }
00250         void    setAllowAllObjectEntry(BOOL b)  { setParcelFlag(PF_ALLOW_ALL_OBJECT_ENTRY, b); }
00251         void    setAllowGroupObjectEntry(BOOL b)        { setParcelFlag(PF_ALLOW_GROUP_OBJECT_ENTRY, b); }
00252         void    setAllowTerraform(BOOL b){setParcelFlag(PF_ALLOW_TERRAFORM, b); }
00253         void    setAllowDamage(BOOL b)  { setParcelFlag(PF_ALLOW_DAMAGE, b); }
00254         void    setAllowFly(BOOL b)             { setParcelFlag(PF_ALLOW_FLY, b); }
00255         void    setAllowLandmark(BOOL b){ setParcelFlag(PF_ALLOW_LANDMARK, b); }
00256         void    setAllowGroupScripts(BOOL b)    { setParcelFlag(PF_ALLOW_GROUP_SCRIPTS, b); }
00257         void    setAllowOtherScripts(BOOL b)    { setParcelFlag(PF_ALLOW_OTHER_SCRIPTS, b); }
00258         void    setAllowDeedToGroup(BOOL b) { setParcelFlag(PF_ALLOW_DEED_TO_GROUP, b); }
00259         void    setContributeWithDeed(BOOL b) { setParcelFlag(PF_CONTRIBUTE_WITH_DEED, b); }
00260         void    setForSale(BOOL b)              { setParcelFlag(PF_FOR_SALE, b); }
00261         void    setSoundOnly(BOOL b)    { setParcelFlag(PF_SOUND_LOCAL, b); }
00262         void    setDenyAnonymous(BOOL b) { setParcelFlag(PF_DENY_ANONYMOUS, b); }
00263         void    setDenyAgeUnverified(BOOL b) { setParcelFlag(PF_DENY_AGEUNVERIFIED, b); }
00264         void    setRestrictPushObject(BOOL b) { setParcelFlag(PF_RESTRICT_PUSHOBJECT, b); }
00265 
00266         void    setDrawDistance(F32 dist)       { mDrawDistance = dist; }
00267         void    setSalePrice(S32 price)         { mSalePrice = price; }
00268         void    setGroupID(const LLUUID& id)    { mGroupID = id; }
00269         //void  setGroupName(const LLString& s) { mGroupName.assign(s); }
00270         void    setPassPrice(S32 price)                         { mPassPrice = price; }
00271         void    setPassHours(F32 hours)                         { mPassHours = hours; }
00272 
00273         BOOL    importStream(std::istream& input_stream);
00274         BOOL    importAccessEntry(std::istream& input_stream, LLAccessEntry* entry);
00275         BOOL    exportStream(std::ostream& output_stream);
00276 
00277         void    packMessage(LLMessageSystem* msg);
00278         void    packMessage(LLSD& msg);
00279         void    unpackMessage(LLMessageSystem* msg);
00280 
00281         void    packAccessEntries(LLMessageSystem* msg,
00282                                                                 const std::map<LLUUID,LLAccessEntry>& list);
00283         void    unpackAccessEntries(LLMessageSystem* msg,
00284                                                                 std::map<LLUUID,LLAccessEntry>* list);
00285 
00286         void    setAABBMin(const LLVector3& min)        { mAABBMin = min; }
00287         void    setAABBMax(const LLVector3& max)        { mAABBMax = max; }
00288 
00289         // Extend AABB to include rectangle from min to max.
00290         void extendAABB(const LLVector3& box_min, const LLVector3& box_max);
00291 
00292         void dump();
00293 
00294         // Scans the pass list and removes any items with an expiration
00295         // time earlier than "now".
00296         void expirePasses(S32 now);
00297 
00298         // Add to list, suppressing duplicates.  Returns TRUE if added.
00299         BOOL addToAccessList(const LLUUID& agent_id, S32 time);
00300         BOOL addToBanList(const LLUUID& agent_id, S32 time);
00301         BOOL removeFromAccessList(const LLUUID& agent_id);
00302         BOOL removeFromBanList(const LLUUID& agent_id);
00303 
00304         // ACCESSORS
00305         const LLUUID&   getID() const                           { return mID; }
00306         const LLString& getName() const                 { return mName; }
00307         const LLString& getDesc() const                 { return mDesc; }
00308         const LLString& getMusicURL() const             { return mMusicURL; }
00309         const LLString& getMediaURL() const             { return mMediaURL; }
00310         const char*             getMediaDesc() const            { return mMediaDesc.c_str(); }
00311         const char*             getMediaType() const            { return mMediaType.c_str(); }
00312         const LLUUID&   getMediaID() const                      { return mMediaID; }
00313         S32                             getMediaWidth() const           { return mMediaWidth; }
00314         S32                             getMediaHeight() const          { return mMediaHeight; }
00315         U8                              getMediaAutoScale() const       { return mMediaAutoScale; }
00316         U8              getMediaLoop() const        { return mMediaLoop; }
00317         U8                              getObscureMedia() const         { return mObscureMedia; }
00318         U8                              getObscureMusic() const         { return mObscureMusic; }
00319         S32                             getLocalID() const                      { return mLocalID; }
00320         const LLUUID&   getOwnerID() const                      { return mOwnerID; }
00321         const LLUUID&   getGroupID() const                      { return mGroupID; }
00322         S32                             getPassPrice() const            { return mPassPrice; }
00323         F32                             getPassHours() const            { return mPassHours; }
00324         BOOL                    getIsGroupOwned() const         { return mGroupOwned; }
00325 
00326         U32 getAuctionID() const        { return mAuctionID; }
00327         bool isInEscrow() const         { return mInEscrow; }
00328 
00329         BOOL isPublic() const;
00330 
00331         // Region-local user-specified position
00332         const LLVector3& getUserLocation() const        { return mUserLocation; }
00333         const LLVector3& getUserLookAt() const  { return mUserLookAt; }
00334         ELandingType getLandingType() const     { return mLandingType; }
00335 
00336         // User-specified snapshot
00337         const LLUUID&   getSnapshotID() const           { return mSnapshotID; }
00338 
00339         // the authorized buyer id is the person who is the only
00340         // agent/group that has authority to purchase. (ie, ui specified a
00341         // particular agent could buy the plot).
00342         const LLUUID& getAuthorizedBuyerID() const { return mAuthBuyerID; }
00343 
00344         // helper function
00345         BOOL isBuyerAuthorized(const LLUUID& buyer_id) const;
00346 
00347         // The buyer of a plot is set when someone indicates they want to
00348         // buy the plot, and the system is simply waiting for tier-up
00349         // approval
00350         //const LLUUID& getBuyerID() const { return mBuyerID; }
00351 
00352         // functions to deal with ownership status.
00353         EOwnershipStatus getOwnershipStatus() const { return mStatus; }
00354         static const char* getOwnershipStatusString(EOwnershipStatus status);
00355         void setOwnershipStatus(EOwnershipStatus status) { mStatus = status; }
00356 
00357         // dealing with parcel category information
00358         ECategory getCategory() const {return mCategory; }
00359         static const char* getCategoryString(ECategory category);
00360         static const char* getCategoryUIString(ECategory category);
00361         static ECategory getCategoryFromString(const char* string);
00362         static ECategory getCategoryFromUIString(const char* string);
00363 
00364         // functions for parcel action (used for logging)
00365         static const char* getActionString(EAction action);
00366 
00367         // dealing with sales and parcel conversion.
00368         //
00369         // the isSaleTimerExpired will trivially return FALSE if there is
00370         // no sale going on. Pass in the current time in usec which will
00371         // be used for comparison.
00372         BOOL isSaleTimerExpired(const U64& time);
00373 
00374         F32 getSaleTimerExpires() { return mSaleTimerExpires.getRemainingTimeF32(); }
00375 
00376         // should the parcel join on complete?
00377         //U32 getJoinNeighbors() const { return mJoinNeighbors; }
00378 
00379         // need to record a few things with the parcel when a sale
00380         // starts.
00381         void startSale(const LLUUID& buyer_id, BOOL is_buyer_group);
00382 
00383         // do the expiration logic, which needs to return values usable in
00384         // a L$ transaction.
00385         void expireSale(U32& type, U8& flags, LLUUID& from_id, LLUUID& to_id);
00386         void completeSale(U32& type, U8& flags, LLUUID& to_id);
00387         void clearSale();
00388 
00389         // this function returns TRUE if the parcel needs conversion to a
00390         // lease from a non-owned-status state.
00391         BOOL getRecordTransaction() const { return mRecordTransaction; }
00392         void setRecordTransaction(BOOL record) { mRecordTransaction = record; }
00393 
00394 
00395         // more accessors
00396         U32             getParcelFlags() const                  { return mParcelFlags; }
00397 
00398         BOOL    getParcelFlag(U32 flag) const
00399                                         { return (mParcelFlags & flag) ? TRUE : FALSE; }
00400 
00401         // objects can be added or modified by anyone (only parcel owner if disabled)
00402         BOOL    getAllowModify() const
00403                                         { return (mParcelFlags & PF_CREATE_OBJECTS) ? TRUE : FALSE; }
00404 
00405         // objects can be added or modified by group members
00406         BOOL    getAllowGroupModify() const
00407                                         { return (mParcelFlags & PF_CREATE_GROUP_OBJECTS) ? TRUE : FALSE; }
00408 
00409         // the parcel can be deeded to the group
00410         BOOL    getAllowDeedToGroup() const
00411                                         { return (mParcelFlags & PF_ALLOW_DEED_TO_GROUP) ? TRUE : FALSE; }
00412 
00413         // Does the owner want to make a contribution along with the deed.
00414         BOOL getContributeWithDeed() const
00415         { return (mParcelFlags & PF_CONTRIBUTE_WITH_DEED) ? TRUE : FALSE; }
00416 
00417         // heightfield can be modified
00418         BOOL    getAllowTerraform() const
00419                                         { return (mParcelFlags & PF_ALLOW_TERRAFORM) ? TRUE : FALSE; }
00420 
00421         // avatars can be hurt here
00422         BOOL    getAllowDamage() const
00423                                         { return (mParcelFlags & PF_ALLOW_DAMAGE) ? TRUE : FALSE; }
00424 
00425         BOOL    getAllowFly() const
00426                                         { return (mParcelFlags & PF_ALLOW_FLY) ? TRUE : FALSE; }
00427 
00428         BOOL    getAllowLandmark() const
00429                                         { return (mParcelFlags & PF_ALLOW_LANDMARK) ? TRUE : FALSE; }
00430 
00431         BOOL    getAllowGroupScripts() const
00432                                         { return (mParcelFlags & PF_ALLOW_GROUP_SCRIPTS) ? TRUE : FALSE; }
00433 
00434         BOOL    getAllowOtherScripts() const
00435                                         { return (mParcelFlags & PF_ALLOW_OTHER_SCRIPTS) ? TRUE : FALSE; }
00436 
00437         BOOL    getAllowAllObjectEntry() const
00438                                         { return (mParcelFlags & PF_ALLOW_ALL_OBJECT_ENTRY) ? TRUE : FALSE; }
00439 
00440         BOOL    getAllowGroupObjectEntry() const
00441                                         { return (mParcelFlags & PF_ALLOW_GROUP_OBJECT_ENTRY) ? TRUE : FALSE; }
00442 
00443         BOOL    getForSale() const
00444                                         { return (mParcelFlags & PF_FOR_SALE) ? TRUE : FALSE; }
00445         BOOL    getSoundLocal() const
00446                                         { return (mParcelFlags & PF_SOUND_LOCAL) ? TRUE : FALSE; }
00447         BOOL    getVoiceEnabled() const
00448                                         { return (mParcelFlags & PF_ALLOW_VOICE_CHAT) ? TRUE : FALSE; }
00449         BOOL    getVoiceUseEstateChannel() const
00450                                         { return (mParcelFlags & PF_USE_ESTATE_VOICE_CHAN) ? TRUE : FALSE; }
00451         BOOL    getAllowPublish() const
00452                                         { return (mParcelFlags & PF_ALLOW_PUBLISH) ? TRUE : FALSE; }
00453         BOOL    getMaturePublish() const
00454                                         { return (mParcelFlags & PF_MATURE_PUBLISH) ? TRUE : FALSE; }
00455         BOOL    getRestrictPushObject() const
00456                                         { return (mParcelFlags & PF_RESTRICT_PUSHOBJECT) ? TRUE : FALSE; }
00457         BOOL    getRegionPushOverride() const
00458                                         { return mRegionPushOverride; }
00459         BOOL    getRegionDenyAnonymousOverride() const
00460                                         { return mRegionDenyAnonymousOverride; }
00461         BOOL    getRegionDenyAgeUnverifiedOverride() const
00462                                         { return mRegionDenyAgeUnverifiedOverride; }
00463 
00464         F32             getDrawDistance() const                 { return mDrawDistance; }
00465         S32             getSalePrice() const                    { return mSalePrice; }
00466         time_t  getClaimDate() const                    { return mClaimDate; }
00467         S32             getClaimPricePerMeter() const   { return mClaimPricePerMeter; }
00468         S32             getRentPricePerMeter() const    { return mRentPricePerMeter; }
00469 
00470         // Area is NOT automatically calculated.  You must calculate it
00471         // and store it with setArea.
00472         S32             getArea() const                                 { return mArea; }
00473 
00474         // deprecated 12/11/2003
00475         //F32           getDiscountRate() const                 { return mDiscountRate; }
00476 
00477         S32             getClaimPrice() const                   { return mClaimPricePerMeter * mArea; }
00478 
00479         // Can this agent create objects here?
00480         BOOL    allowModifyBy(const LLUUID &agent_id, const LLUUID &group_id) const;
00481 
00482         // Can this agent change the shape of the land?
00483         BOOL    allowTerraformBy(const LLUUID &agent_id) const;
00484 
00485         // Returns 0 if access is OK, otherwise a BA_ return code above.
00486         S32      blockAccess(const LLUUID& agent_id, 
00487                         const LLUUID& group_id, 
00488                         const BOOL is_agent_identified, 
00489                         const BOOL is_agent_transacted,
00490                         const BOOL is_agent_ageverified) const;
00491 
00492         // Only checks if the agent is explicitly banned from this parcel
00493         BOOL isAgentBanned(const LLUUID& agent_id) const;
00494 
00495         static bool isAgentBlockedFromParcel(LLParcel* parcelp, 
00496                                                                         const LLUUID& agent_id,
00497                                                                         const std::vector<LLUUID>& group_ids,
00498                                                                         const BOOL is_agent_identified,
00499                                                                         const BOOL is_agent_transacted,
00500                                                                         const BOOL is_agent_ageverified);
00501 
00502         bool    operator==(const LLParcel &rhs) const;
00503 
00504         // Calculate rent - area * rent * discount rate
00505         S32             getTotalRent() const;
00506         F32             getAdjustedRentPerMeter() const;
00507 
00508         const LLVector3&        getAABBMin() const              { return mAABBMin; }
00509         const LLVector3&        getAABBMax() const              { return mAABBMax; }
00510         LLVector3 getCenterpoint() const;
00511 
00512         // simwide
00513         S32             getSimWideMaxPrimCapacity() const { return mSimWideMaxPrimCapacity; }
00514         S32 getSimWidePrimCount() const { return mSimWidePrimCount; }
00515 
00516         // this parcel only (not simwide)
00517         S32             getMaxPrimCapacity() const      { return mMaxPrimCapacity; }
00518         S32             getPrimCount() const            { return mOwnerPrimCount + mGroupPrimCount + mOtherPrimCount + mSelectedPrimCount; }
00519         S32             getOwnerPrimCount() const       { return mOwnerPrimCount; }
00520         S32             getGroupPrimCount() const       { return mGroupPrimCount; }
00521         S32             getOtherPrimCount() const       { return mOtherPrimCount; }
00522         S32             getSelectedPrimCount() const{ return mSelectedPrimCount; }
00523         S32             getTempPrimCount() const        { return mTempPrimCount; }
00524         F32             getParcelPrimBonus() const      { return mParcelPrimBonus; }
00525 
00526         S32             getCleanOtherTime() const                       { return mCleanOtherTime; }
00527 
00528         void    setMaxPrimCapacity(S32 max) { mMaxPrimCapacity = max; }
00529         // simwide
00530         void    setSimWideMaxPrimCapacity(S32 current)  { mSimWideMaxPrimCapacity = current; }
00531         void setSimWidePrimCount(S32 current) { mSimWidePrimCount = current; }
00532 
00533         // this parcel only (not simwide)
00534         void    setOwnerPrimCount(S32 current)  { mOwnerPrimCount = current; }
00535         void    setGroupPrimCount(S32 current)  { mGroupPrimCount = current; }
00536         void    setOtherPrimCount(S32 current)  { mOtherPrimCount = current; }
00537         void    setSelectedPrimCount(S32 current)       { mSelectedPrimCount = current; }
00538         void    setTempPrimCount(S32 current)   { mTempPrimCount = current; }
00539         void    setParcelPrimBonus(F32 bonus)   { mParcelPrimBonus = bonus; }
00540 
00541         void    setCleanOtherTime(S32 time)                                     { mCleanOtherTime = time; }
00542         void    setRegionPushOverride(BOOL override) {mRegionPushOverride = override; }
00543         void    setRegionDenyAnonymousOverride(BOOL override)   { mRegionDenyAnonymousOverride = override; }
00544         void    setRegionDenyAgeUnverifiedOverride(BOOL override)       { mRegionDenyAgeUnverifiedOverride = override; }
00545 
00546         // Accessors for parcel sellWithObjects
00547         void    setPreviousOwnerID(LLUUID prev_owner)   { mPreviousOwnerID = prev_owner; }
00548         void    setPreviouslyGroupOwned(BOOL b)                 { mPreviouslyGroupOwned = b; }
00549         void    setSellWithObjects(BOOL b)                              { setParcelFlag(PF_SELL_PARCEL_OBJECTS, b); }
00550 
00551         LLUUID  getPreviousOwnerID() const              { return mPreviousOwnerID; }
00552         BOOL    getPreviouslyGroupOwned() const { return mPreviouslyGroupOwned; }
00553         BOOL    getSellWithObjects() const              { return (mParcelFlags & PF_SELL_PARCEL_OBJECTS) ? TRUE : FALSE; }
00554 
00555 protected:
00556         LLUUID mID;
00557         LLUUID                          mOwnerID;
00558         LLUUID                          mGroupID;
00559         BOOL                            mGroupOwned; // TRUE if mOwnerID is a group_id
00560         LLUUID                          mPreviousOwnerID;
00561         BOOL                            mPreviouslyGroupOwned;
00562 
00563         EOwnershipStatus mStatus;
00564         ECategory mCategory;
00565         LLUUID mAuthBuyerID;
00566         LLUUID mSnapshotID;
00567         LLVector3 mUserLocation;
00568         LLVector3 mUserLookAt;
00569         ELandingType mLandingType;
00570         LLTimer mSaleTimerExpires;
00571         S32 mGraceExtension;
00572         BOOL mRecordTransaction;
00573         
00574 
00575         // This value is non-zero if there is an auction associated with
00576         // the parcel.
00577         U32 mAuctionID;
00578 
00579         // value used to temporarily lock attempts to purchase the parcel.
00580         bool mInEscrow;
00581 
00582         time_t                          mClaimDate;                             // UTC Unix-format time
00583         S32                                     mClaimPricePerMeter;    // meter squared
00584         S32                                     mRentPricePerMeter;             // meter squared
00585         S32                                     mArea;                                  // meter squared
00586         F32                                     mDiscountRate;                  // 0.0-1.0
00587         F32                                     mDrawDistance;
00588         U32                                     mParcelFlags;
00589         S32                                     mSalePrice;                             // linden dollars
00590         LLString                        mName;
00591         LLString                        mDesc;
00592         LLString                        mMusicURL;
00593         LLString                        mMediaURL;
00594         std::string mMediaDesc;
00595         std::string mMediaType;
00596         S32                                     mMediaWidth;
00597         S32                                     mMediaHeight;
00598         U8                                      mMediaAutoScale;
00599         U8                  mMediaLoop;
00600         U8                                      mObscureMedia;
00601         U8                                      mObscureMusic;
00602         LLUUID                          mMediaID;
00603         S32                                     mPassPrice;
00604         F32                                     mPassHours;
00605         LLVector3                       mAABBMin;
00606         LLVector3                       mAABBMax;
00607         S32                                     mMaxPrimCapacity;
00608         S32                                     mSimWidePrimCount;
00609         S32                                     mSimWideMaxPrimCapacity;
00610         //S32                                   mSimWidePrimCorrection;
00611         S32                                     mOwnerPrimCount;
00612         S32                                     mGroupPrimCount;
00613         S32                                     mOtherPrimCount;
00614         S32                                     mSelectedPrimCount;
00615         S32                                     mTempPrimCount;
00616         F32                                     mParcelPrimBonus;
00617         S32                                     mCleanOtherTime;
00618         BOOL                            mRegionPushOverride;
00619         BOOL                            mRegionDenyAnonymousOverride;
00620         BOOL                            mRegionDenyAgeUnverifiedOverride;
00621 
00622 
00623 public:
00624         // HACK, make private
00625         S32                                     mLocalID;
00626         LLUUID                      mBanListTransactionID;
00627         LLUUID                      mAccessListTransactionID;
00628         std::map<LLUUID,LLAccessEntry>  mAccessList;
00629         std::map<LLUUID,LLAccessEntry>  mBanList;
00630         std::map<LLUUID,LLAccessEntry>  mTempBanList;
00631         std::map<LLUUID,LLAccessEntry>  mTempAccessList;
00632 };
00633 
00634 
00635 #endif

Generated on Fri May 16 08:32:13 2008 for SecondLife by  doxygen 1.5.5