rendered paste bodyIndex: 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)