diff options
author | maximius <none@none> | 2009-10-17 15:35:07 -0700 |
---|---|---|
committer | maximius <none@none> | 2009-10-17 15:35:07 -0700 |
commit | 26b5e033ffde3d161382fc9addbfa99738379641 (patch) | |
tree | a344f369ca32945f787a02dee35c3dbe342bed7e /src/game/LootMgr.h | |
parent | f21f47005dcb6b76e1abc9f35fbcd03eed191bff (diff) |
*Massive cleanup (\n\n -> \n, *\n -> \n, cleanup for(...) to for (...), and some other cleanups by hand)
*Fix a possible crash in Spell::DoAllEffectOnTarget
--HG--
branch : trunk
Diffstat (limited to 'src/game/LootMgr.h')
-rw-r--r-- | src/game/LootMgr.h | 64 |
1 files changed, 0 insertions, 64 deletions
diff --git a/src/game/LootMgr.h b/src/game/LootMgr.h index c629977ea67..e7fb4daed36 100644 --- a/src/game/LootMgr.h +++ b/src/game/LootMgr.h @@ -17,29 +17,23 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ - #ifndef TRINITY_LOOTMGR_H #define TRINITY_LOOTMGR_H - #include "ItemEnchantmentMgr.h" #include "ByteBuffer.h" #include "Utilities/LinkedReference/RefManager.h" - #include <map> #include <vector> - enum RollType { ROLL_PASS = 0, ROLL_NEED = 1, ROLL_GREED = 2 }; - #define MAX_NR_LOOT_ITEMS 16 // note: the client cannot show more than 16 items total #define MAX_NR_QUEST_ITEMS 32 // unrelated to the number of quest items shown, just for reserve - enum LootMethod { FREE_FOR_ALL = 0, @@ -48,7 +42,6 @@ enum LootMethod GROUP_LOOT = 3, NEED_BEFORE_GREED = 4 }; - enum PermissionTypes { ALL_PERMISSION = 0, @@ -56,7 +49,6 @@ enum PermissionTypes MASTER_PERMISSION = 2, NONE_PERMISSION = 3 }; - enum LootType { LOOT_CORPSE = 1, @@ -67,14 +59,11 @@ enum LootType LOOT_SKINNING = 6, LOOT_PROSPECTING = 7, LOOT_MILLING = 8, - LOOT_FISHINGHOLE = 20, // unsupported by client, sending LOOT_FISHING instead LOOT_INSIGNIA = 21 // unsupported by client, sending LOOT_CORPSE instead }; - class Player; class LootStore; - struct LootStoreItem { uint32 itemid; // id of the item @@ -84,19 +73,16 @@ struct LootStoreItem bool needs_quest :1; // quest drop (negative ChanceOrQuestChance in DB) uint8 maxcount :8; // max drop count for the item (mincountOrRef positive) or Ref multiplicator (mincountOrRef negative) uint16 conditionId :16; // additional loot condition Id - // Constructor, converting ChanceOrQuestChance -> (chance, needs_quest) // displayid is filled in IsValid() which must be called after LootStoreItem(uint32 _itemid, float _chanceOrQuestChance, int8 _group, uint8 _conditionId, int32 _mincountOrRef, uint8 _maxcount) : itemid(_itemid), chance(fabs(_chanceOrQuestChance)), mincountOrRef(_mincountOrRef), group(_group), needs_quest(_chanceOrQuestChance < 0), maxcount(_maxcount), conditionId(_conditionId) {} - bool Roll(bool rate) const; // Checks if the entry takes it's chance (at loot generation) bool IsValid(LootStore const& store, uint32 entry) const; // Checks correctness of values }; - struct LootItem { uint32 itemid; @@ -110,57 +96,43 @@ struct LootItem bool is_underthreshold : 1; bool is_counted : 1; bool needs_quest : 1; // quest drop - // Constructor, copies most fields from LootStoreItem, generates random count and random suffixes/properties // Should be called for non-reference LootStoreItem entries only (mincountOrRef > 0) explicit LootItem(LootStoreItem const& li); - // Basic checks for player/item compatibility - if false no chance to see the item in the loot bool AllowedForPlayer(Player const * player) const; }; - struct QuestItem { uint8 index; // position in quest_items; bool is_looted; - QuestItem() : index(0), is_looted(false) {} - QuestItem(uint8 _index, bool _islooted = false) : index(_index), is_looted(_islooted) {} }; - struct Loot; class LootTemplate; - typedef std::vector<QuestItem> QuestItemList; typedef std::map<uint32, QuestItemList *> QuestItemMap; typedef std::vector<LootStoreItem> LootStoreItemList; typedef UNORDERED_MAP<uint32, LootTemplate*> LootTemplateMap; - typedef std::set<uint32> LootIdSet; - class LootStore { public: explicit LootStore(char const* name, char const* entryName, bool ratesAllowed) : m_name(name), m_entryName(entryName), m_ratesAllowed(ratesAllowed) {} virtual ~LootStore() { Clear(); } - void Verify() const; - void LoadAndCollectLootIds(LootIdSet& ids_set); void CheckLootRefs(LootIdSet* ref_set = NULL) const;// check existence reference and remove it from ref_set void ReportUnusedIds(LootIdSet const& ids_set) const; void ReportNotExistedId(uint32 id) const; - bool HaveLootFor(uint32 loot_id) const { return m_LootTemplates.find(loot_id) != m_LootTemplates.end(); } bool HaveQuestLootFor(uint32 loot_id) const; bool HaveQuestLootForPlayer(uint32 loot_id,Player* player) const; - LootTemplate const* GetLootFor(uint32 loot_id) const; - char const* GetName() const { return m_name; } char const* GetEntryName() const { return m_entryName; } bool IsRatesAllowed() const { return m_ratesAllowed; } @@ -173,23 +145,19 @@ class LootStore char const* m_entryName; bool m_ratesAllowed; }; - class LootTemplate { class LootGroup; // A set of loot definitions for items (refs are not allowed inside) typedef std::vector<LootGroup> LootGroups; - public: // Adds an entry to the group (at loading stage) void AddEntry(LootStoreItem& item); // Rolls for every item in the template and adds the rolled items the the loot void Process(Loot& loot, LootStore const& store, bool rate, uint8 GroupId = 0) const; - // True if template includes at least 1 quest drop entry bool HasQuestDrop(LootTemplateMap const& store, uint8 GroupId = 0) const; // True if template includes at least 1 quest drop for an active quest of the player bool HasQuestDropForPlayer(LootTemplateMap const& store, Player const * player, uint8 GroupId = 0) const; - // Checks integrity of the template void Verify(LootStore const& store, uint32 Id) const; void CheckLootRefs(LootTemplateMap const& store, LootIdSet* ref_set) const; @@ -197,9 +165,7 @@ class LootTemplate LootStoreItemList Entries; // not grouped only LootGroups Groups; // groups have own (optimised) processing, grouped entries go there }; - //===================================================== - class LootValidatorRef : public Reference<Loot, LootValidatorRef> { public: @@ -207,66 +173,51 @@ class LootValidatorRef : public Reference<Loot, LootValidatorRef> void targetObjectDestroyLink() {} void sourceObjectDestroyLink() {} }; - //===================================================== - class LootValidatorRefManager : public RefManager<Loot, LootValidatorRef> { public: typedef LinkedListHead::Iterator< LootValidatorRef > iterator; - LootValidatorRef* getFirst() { return (LootValidatorRef*)RefManager<Loot, LootValidatorRef>::getFirst(); } LootValidatorRef* getLast() { return (LootValidatorRef*)RefManager<Loot, LootValidatorRef>::getLast(); } - iterator begin() { return iterator(getFirst()); } iterator end() { return iterator(NULL); } iterator rbegin() { return iterator(getLast()); } iterator rend() { return iterator(NULL); } }; - //===================================================== struct LootView; - ByteBuffer& operator<<(ByteBuffer& b, LootItem const& li); ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv); - struct Loot { friend ByteBuffer& operator<<(ByteBuffer& b, LootView const& lv); - QuestItemMap const& GetPlayerQuestItems() const { return PlayerQuestItems; } QuestItemMap const& GetPlayerFFAItems() const { return PlayerFFAItems; } QuestItemMap const& GetPlayerNonQuestNonFFAConditionalItems() const { return PlayerNonQuestNonFFAConditionalItems; } - std::vector<LootItem> items; uint32 gold; uint8 unlootedCount; LootType loot_type; // required for achievement system - Loot(uint32 _gold = 0) : gold(_gold), unlootedCount(0), loot_type(LOOT_CORPSE) {} ~Loot() { clear(); } - // if loot becomes invalid this reference is used to inform the listener void addLootValidatorRef(LootValidatorRef* pLootValidatorRef) { i_LootValidatorRefManager.insertFirst(pLootValidatorRef); } - // void clear(); void clear() { for (QuestItemMap::const_iterator itr = PlayerQuestItems.begin(); itr != PlayerQuestItems.end(); ++itr) delete itr->second; PlayerQuestItems.clear(); - for (QuestItemMap::const_iterator itr = PlayerFFAItems.begin(); itr != PlayerFFAItems.end(); ++itr) delete itr->second; PlayerFFAItems.clear(); - for (QuestItemMap::const_iterator itr = PlayerNonQuestNonFFAConditionalItems.begin(); itr != PlayerNonQuestNonFFAConditionalItems.end(); ++itr) delete itr->second; PlayerNonQuestNonFFAConditionalItems.clear(); - PlayersLooting.clear(); items.clear(); quest_items.clear(); @@ -274,41 +225,32 @@ struct Loot unlootedCount = 0; i_LootValidatorRefManager.clearReferences(); } - bool empty() const { return items.empty() && gold == 0; } bool isLooted() const { return gold == 0 && unlootedCount == 0; } - void NotifyItemRemoved(uint8 lootIndex); void NotifyQuestItemRemoved(uint8 questIndex); void NotifyMoneyRemoved(); void AddLooter(uint64 GUID) { PlayersLooting.insert(GUID); } void RemoveLooter(uint64 GUID) { PlayersLooting.erase(GUID); } - void generateMoneyLoot(uint32 minAmount, uint32 maxAmount); void FillLoot(uint32 loot_id, LootStore const& store, Player* loot_owner, bool personal); - // Inserts the item into the loot (called by LootTemplate processors) void AddItem(LootStoreItem const & item); - LootItem* LootItemInSlot(uint32 lootslot, Player* player, QuestItem** qitem = NULL, QuestItem** ffaitem = NULL, QuestItem** conditem = NULL); uint32 GetMaxSlotInLootFor(Player* player) const; - private: void FillNotNormalLootFor(Player* player); QuestItemList* FillFFALoot(Player* player); QuestItemList* FillQuestLoot(Player* player); QuestItemList* FillNonQuestNonFFAConditionalLoot(Player* player); - std::vector<LootItem> quest_items; std::set<uint64> PlayersLooting; QuestItemMap PlayerQuestItems; QuestItemMap PlayerFFAItems; QuestItemMap PlayerNonQuestNonFFAConditionalItems; - // All rolls are registered here. They need to know, when the loot is not valid anymore LootValidatorRefManager i_LootValidatorRefManager; }; - struct LootView { Loot &loot; @@ -317,7 +259,6 @@ struct LootView LootView(Loot &_loot, Player *_viewer,PermissionTypes _permission = ALL_PERMISSION) : loot(_loot), viewer(_viewer), permission(_permission) {} }; - extern LootStore LootTemplates_Creature; extern LootStore LootTemplates_Fishing; extern LootStore LootTemplates_Gameobject; @@ -329,7 +270,6 @@ extern LootStore LootTemplates_Disenchant; extern LootStore LootTemplates_Prospecting; extern LootStore LootTemplates_QuestMail; extern LootStore LootTemplates_Spell; - void LoadLootTemplates_Creature(); void LoadLootTemplates_Fishing(); void LoadLootTemplates_Gameobject(); @@ -340,10 +280,8 @@ void LoadLootTemplates_Skinning(); void LoadLootTemplates_Disenchant(); void LoadLootTemplates_Prospecting(); void LoadLootTemplates_QuestMail(); - void LoadLootTemplates_Spell(); void LoadLootTemplates_Reference(); - inline void LoadLootTables() { LoadLootTemplates_Creature(); @@ -357,9 +295,7 @@ inline void LoadLootTables() LoadLootTemplates_Prospecting(); LoadLootTemplates_QuestMail(); LoadLootTemplates_Spell(); - LoadLootTemplates_Reference(); } - #endif |