Disables: DISABLE_TYPE_ITEM_DROP=10. Also fixed memory leak

This commit is contained in:
Olion 2015-10-01 01:33:38 +03:00 committed by Antz
parent 71ba7d9374
commit 983ea0c038
3 changed files with 24 additions and 14 deletions

View File

@ -31,6 +31,7 @@
#include "SharedDefines.h"
#include "DBCStores.h"
#include "SQLStorages.h"
#include "DisableMgr.h"
static eConfigFloatValues const qualityToRate[MAX_ITEM_QUALITY] =
{
@ -1003,7 +1004,7 @@ bool LootTemplate::LootGroup::HasStartingQuestDropForPlayer(Player const* player
void LootTemplate::LootGroup::Process(Loot& loot) const
{
LootStoreItem const* item = Roll();
if (item != NULL)
if (item != NULL && !DisableMgr::IsDisabledFor(DISABLE_TYPE_ITEM_DROP, item->itemid))
{ loot.AddItem(*item); }
}
@ -1101,7 +1102,7 @@ void LootTemplate::Process(Loot& loot, LootStore const& store, bool rate, uint8
// Rolling non-grouped items
for (LootStoreItemList::const_iterator i = Entries.begin() ; i != Entries.end() ; ++i)
{
if (!i->Roll(rate))
if (DisableMgr::IsDisabledFor(DISABLE_TYPE_ITEM_DROP, i->itemid) || !i->Roll(rate))
{ continue; } // Bad luck for the entry
if (i->mincountOrRef < 0) // References processing

View File

@ -44,6 +44,8 @@ namespace
DisableMap m_DisableMap;
}
#define CONTINUE if (newData) delete data; continue
void LoadDisables()
{
// reload case
@ -79,10 +81,14 @@ void LoadDisables()
uint32 data0 = fields[3].GetUInt32();
DisableData* data;
bool newData = false;
if (m_DisableMap[type].find(entry) != m_DisableMap[type].end())
data = &m_DisableMap[type][entry];
else
{
data = new DisableData();
newData = true;
}
data->flags = flags;
@ -92,13 +98,13 @@ void LoadDisables()
if (!(sSpellStore.LookupEntry(entry) || flags & SPELL_DISABLE_DEPRECATED_SPELL))
{
ERROR_DB_STRICT_LOG("Spell entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
CONTINUE;
}
if (!flags || flags > MAX_SPELL_DISABLE_TYPE)
{
ERROR_DB_STRICT_LOG("Disable flags for spell %u are invalid, skipped.", entry);
continue;
CONTINUE;
}
if (flags & SPELL_DISABLE_MAP)
@ -117,7 +123,7 @@ void LoadDisables()
if (!mapEntry)
{
ERROR_DB_STRICT_LOG("Map entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
CONTINUE;
}
bool isFlagInvalid = false;
switch (mapEntry->map_type)
@ -131,12 +137,12 @@ void LoadDisables()
case MAP_BATTLEGROUND:
//case MAP_ARENA: [-ZERO]
ERROR_DB_STRICT_LOG("Battleground map %u specified to be disabled in map case, skipped.", entry);
continue;
CONTINUE;
}
if (isFlagInvalid)
{
ERROR_DB_STRICT_LOG("Disable flags for map %u are invalid, skipped.", entry);
continue;
CONTINUE;
}
break;
}
@ -144,7 +150,7 @@ void LoadDisables()
if (!sBattleGroundMgr.GetBattleGroundTemplate(BattleGroundTypeId(entry)))
{
ERROR_DB_STRICT_LOG("Battleground entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
CONTINUE;
}
if (flags)
ERROR_DB_STRICT_LOG("Disable flags specified for battleground %u, useless data.", entry);
@ -153,7 +159,7 @@ void LoadDisables()
if (entry > MAX_OPVP_ID)
{
ERROR_DB_STRICT_LOG("OutdoorPvPTypes value %u from `disables` is invalid, skipped.", entry);
continue;
CONTINUE;
}
if (flags)
ERROR_DB_STRICT_LOG("Disable flags specified for outdoor PvP %u, useless data.", entry);
@ -173,7 +179,7 @@ void LoadDisables()
if (!mapEntry)
{
ERROR_DB_STRICT_LOG("Map entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
CONTINUE;
}
switch (mapEntry->map_type)
{
@ -213,7 +219,7 @@ void LoadDisables()
if (!mapEntry)
{
ERROR_DB_STRICT_LOG("Map entry %u from `disables` doesn't exist in dbc, skipped.", entry);
continue;
CONTINUE;
}
switch (mapEntry->map_type)
{
@ -244,11 +250,12 @@ void LoadDisables()
else
{
ERROR_DB_STRICT_LOG("Disables type %u: required GUID is missing for entry %u, ignoring disable entry.", type, entry);
delete data;
continue;
CONTINUE;
}
}
break;
case DISABLE_TYPE_ITEM_DROP:
break;
default:
break;
}
@ -377,6 +384,7 @@ bool IsDisabledFor(DisableType type, uint32 entry, Unit const* unit, uint8 flags
case DISABLE_TYPE_OUTDOORPVP:
case DISABLE_TYPE_ACHIEVEMENT_CRITERIA:
case DISABLE_TYPE_MMAP:
case DISABLE_TYPE_ITEM_DROP:
return true;
case DISABLE_TYPE_VMAP:
return (flags & itr->second.flags) != 0;

View File

@ -36,7 +36,8 @@ enum DisableType
DISABLE_TYPE_MMAP = 7,
DISABLE_TYPE_CREATURE_SPAWN = 8,
DISABLE_TYPE_GAMEOBJECT_SPAWN = 9,
MAX_DISABLE_TYPES = 10
DISABLE_TYPE_ITEM_DROP = 10,
MAX_DISABLE_TYPES = 11
};
enum SpellDisableTypes