All pastes #1072709 Raw Edit

HiTmAn

public cpp v1 · immutable
#1072709 ·published 2008-07-15 20:18 UTC
rendered paste body
Index: src/game/LootMgr.cpp===================================================================--- src/game/LootMgr.cpp	(revision 6294)+++ src/game/LootMgr.cpp	(working copy)@@ -84,8 +84,8 @@      sLog.outString( "%s :", GetName()); -    //                                                 0      1     2                    3        4              5         6              7                 8-    QueryResult *result = WorldDatabase.PQuery("SELECT entry, item, ChanceOrQuestChance, groupid, mincountOrRef, maxcount, lootcondition, condition_value1, condition_value2 FROM %s",GetName());+    //                                                 0      1     2                    3        4              5         6              7                 8                 9+    QueryResult *result = WorldDatabase.PQuery("SELECT entry, item, ChanceOrQuestChance, groupid, mincountOrRef, maxcount, lootcondition, condition_value1, condition_value2, instance_mode FROM %s",GetName());      if (result)     {@@ -105,6 +105,7 @@             ConditionType condition    = (ConditionType)fields[6].GetUInt8();             uint32 cond_value1         = fields[7].GetUInt32();             uint32 cond_value2         = fields[8].GetUInt32();+            uint8 instance_mode        = fields[9].GetUInt8();              if(!PlayerCondition::IsValid(condition,cond_value1, cond_value2))             {@@ -115,7 +116,7 @@             // (condition + cond_value1/2) are converted into single conditionId             uint16 conditionId = objmgr.GetConditionId(condition, cond_value1, cond_value2); -            LootStoreItem storeitem = LootStoreItem(item, chanceOrQuestChance, group, conditionId, mincountOrRef, maxcount);+            LootStoreItem storeitem = LootStoreItem(item, chanceOrQuestChance, group, conditionId, mincountOrRef, maxcount, instance_mode);              if (!storeitem.IsValid(*this,entry))            // Validity checks                 continue;@@ -217,6 +218,12 @@ // Checks correctness of values bool LootStoreItem::IsValid(LootStore const& store, uint32 entry) const {+    if(instance_mode > 1)+	{+		sLog.outErrorDb("Table '%s' entry %d item %d: wrong instance_mode (%d) - skipped", store.GetName(), entry, itemid, instance_mode);+		return false;+	}+     if (mincountOrRef == 0)     {         sLog.outErrorDb("Table '%s' entry %d item %d: wrong mincountOrRef (%d) - skipped", store.GetName(), entry, itemid, mincountOrRef);@@ -279,6 +286,7 @@     is_blocked = 0;     is_underthreshold = 0;     is_counted = 0;+    instance_mode = li.instance_mode; }  // Basic checks for player/item compatibility - if false no chance to see the item in the loot@@ -288,6 +296,9 @@     if ( !objmgr.IsPlayerMeetToCondition(player,conditionId) )         return false; +    if(player->GetMap()->GetSpawnMode() < instance_mode)+        return false;+     if ( needs_quest )     {         // Checking quests for quest-only drop (check only quests requirements in this case)Index: src/game/LootMgr.h===================================================================--- src/game/LootMgr.h	(revision 6294)+++ src/game/LootMgr.h	(working copy)@@ -67,13 +67,14 @@     uint8   maxcount    :8;                                 // max drop count for the item (mincountOrRef positive) or Ref multiplicator (mincountOrRef negative)     uint16  conditionId :16;                                // additional loot condition Id     bool    needs_quest :1;                                 // quest drop (negative ChanceOrQuestChance in DB)+    uint8 instance_mode :8;      // 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),+    LootStoreItem(uint32 _itemid, float _chanceOrQuestChance, int8 _group, uint8 _conditionId, int32 _mincountOrRef, uint8 _maxcount, uint8 _instance_mode)+        : itemid(_itemid), chance(fabs(_chanceOrQuestChance)), mincountOrRef(_mincountOrRef),          group(_group), maxcount(_maxcount), conditionId(_conditionId),-        needs_quest(_chanceOrQuestChance < 0) {}+        needs_quest(_chanceOrQuestChance < 0), instance_mode(_instance_mode) {}      bool Roll() const;                                      // Checks if the entry takes it's chance (at loot generation)     bool IsValid(LootStore const& store, uint32 entry) const;@@ -93,6 +94,7 @@     bool    is_underthreshold : 1;     bool    is_counted        : 1;     bool    needs_quest       : 1;                          // quest drop+    uint8  instance_mode      : 8;                          // dropmode (heroic / non-heroic)      // Constructor, copies most fields from LootStoreItem, generates random count and random suffixes/properties     // Should be called for non-reference LootStoreItem entries only (mincountOrRef > 0)