mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-17 16:10:49 +01:00
*Update to Mangos 7151.
--HG-- branch : trunk
This commit is contained in:
@@ -843,6 +843,19 @@ void ObjectMgr::LoadCreatureTemplates()
|
||||
if((cInfo->npcflag & UNIT_NPC_FLAG_TRAINER) && cInfo->trainer_type >= MAX_TRAINER_TYPE)
|
||||
sLog.outErrorDb("Creature (Entry: %u) has wrong trainer type %u",cInfo->Entry,cInfo->trainer_type);
|
||||
|
||||
if(cInfo->type && !sCreatureTypeStore.LookupEntry(cInfo->type))
|
||||
{
|
||||
sLog.outErrorDb("Creature (Entry: %u) has invalid creature type (%u) in `type`",cInfo->Entry,cInfo->type);
|
||||
const_cast<CreatureInfo*>(cInfo)->type = CREATURE_TYPE_HUMANOID;
|
||||
}
|
||||
|
||||
// must exist or used hidden but used in data horse case
|
||||
if(cInfo->family && !sCreatureFamilyStore.LookupEntry(cInfo->family) && cInfo->family != CREATURE_FAMILY_HORSE_CUSTOM )
|
||||
{
|
||||
sLog.outErrorDb("Creature (Entry: %u) has invalid creature family (%u) in `family`",cInfo->Entry,cInfo->family);
|
||||
const_cast<CreatureInfo*>(cInfo)->family = 0;
|
||||
}
|
||||
|
||||
if(cInfo->InhabitType <= 0 || cInfo->InhabitType > INHABIT_ANYWHERE)
|
||||
{
|
||||
sLog.outErrorDb("Creature (Entry: %u) has wrong value (%u) in `InhabitType`, creature will not correctly walk/swim/fly",cInfo->Entry,cInfo->InhabitType);
|
||||
@@ -1542,18 +1555,36 @@ void ObjectMgr::LoadAuctions()
|
||||
{
|
||||
QueryResult *result = CharacterDatabase.Query("SELECT COUNT(*) FROM auctionhouse");
|
||||
if( !result )
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
sLog.outString("");
|
||||
sLog.outString(">> Loaded 0 auctions. DB table `auctionhouse` is empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
Field *fields = result->Fetch();
|
||||
uint32 AuctionCount=fields[0].GetUInt32();
|
||||
delete result;
|
||||
|
||||
if(!AuctionCount)
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
sLog.outString("");
|
||||
sLog.outString(">> Loaded 0 auctions. DB table `auctionhouse` is empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
result = CharacterDatabase.Query( "SELECT id,auctioneerguid,itemguid,item_template,itemowner,buyoutprice,time,buyguid,lastbid,startbid,deposit,location FROM auctionhouse" );
|
||||
if( !result )
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
sLog.outString("");
|
||||
sLog.outString(">> Loaded 0 auctions. DB table `auctionhouse` is empty.");
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar( AuctionCount );
|
||||
|
||||
@@ -1594,7 +1625,6 @@ void ObjectMgr::LoadAuctions()
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u auctions", AuctionCount );
|
||||
sLog.outString();
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadItemLocales()
|
||||
@@ -2028,7 +2058,13 @@ void ObjectMgr::LoadAuctionItems()
|
||||
QueryResult *result = CharacterDatabase.Query( "SELECT data,itemguid,item_template FROM auctionhouse JOIN item_instance ON itemguid = guid" );
|
||||
|
||||
if( !result )
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
sLog.outString("");
|
||||
sLog.outString(">> Loaded 0 auction items");
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar( result->GetRowCount() );
|
||||
|
||||
@@ -2063,7 +2099,6 @@ void ObjectMgr::LoadAuctionItems()
|
||||
++count;
|
||||
}
|
||||
while( result->NextRow() );
|
||||
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
@@ -4448,14 +4483,20 @@ void ObjectMgr::LoadInstanceTemplate()
|
||||
else if(!entry->HasResetTime())
|
||||
continue;
|
||||
|
||||
//FIXME: now exist heroic instance, normal/heroic raid instances
|
||||
// entry->resetTimeHeroic store reset time for both heroic mode instance (raid and non-raid)
|
||||
// entry->resetTimeRaid store reset time for normal raid only
|
||||
// for current state entry->resetTimeRaid == entry->resetTimeHeroic in case raid instances with heroic mode.
|
||||
// but at some point wee need implement reset time dependen from raid insatance mode
|
||||
if(temp->reset_delay == 0)
|
||||
{
|
||||
// use defaults from the DBC
|
||||
if(entry->SupportsHeroicMode())
|
||||
if(entry->resetTimeHeroic) // for both raid and non raids, read above
|
||||
{
|
||||
temp->reset_delay = entry->resetTimeHeroic / DAY;
|
||||
}
|
||||
else if (entry->resetTimeRaid && entry->map_type == MAP_RAID)
|
||||
// for normal raid only
|
||||
{
|
||||
temp->reset_delay = entry->resetTimeRaid / DAY;
|
||||
}
|
||||
@@ -4633,14 +4674,27 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
|
||||
// 0 1 2 3 4 5 6 7 8 9
|
||||
QueryResult* result = CharacterDatabase.PQuery("SELECT id,messageType,sender,receiver,itemTextId,has_items,expire_time,cod,checked,mailTemplateId FROM mail WHERE expire_time < '" I64FMTD "'", (uint64)basetime);
|
||||
if ( !result )
|
||||
{
|
||||
barGoLink bar(1);
|
||||
bar.step();
|
||||
sLog.outString("");
|
||||
sLog.outString(">> Only expired mails (need to be return or delete) or DB table `mail` is empty.");
|
||||
return; // any mails need to be returned or deleted
|
||||
Field *fields;
|
||||
}
|
||||
|
||||
//std::ostringstream delitems, delmails; //will be here for optimization
|
||||
//bool deletemail = false, deleteitem = false;
|
||||
//delitems << "DELETE FROM item_instance WHERE guid IN ( ";
|
||||
//delmails << "DELETE FROM mail WHERE id IN ( "
|
||||
|
||||
barGoLink bar( result->GetRowCount() );
|
||||
uint32 count = 0;
|
||||
Field *fields;
|
||||
|
||||
do
|
||||
{
|
||||
bar.step();
|
||||
|
||||
fields = result->Fetch();
|
||||
Mail *m = new Mail;
|
||||
m->messageID = fields[0].GetUInt32();
|
||||
@@ -4706,8 +4760,12 @@ void ObjectMgr::ReturnOrDeleteOldMails(bool serverUp)
|
||||
//delmails << m->messageID << ", ";
|
||||
CharacterDatabase.PExecute("DELETE FROM mail WHERE id = '%u'", m->messageID);
|
||||
delete m;
|
||||
++count;
|
||||
} while (result->NextRow());
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u mails", count );
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadQuestAreaTriggers()
|
||||
@@ -4873,24 +4931,31 @@ uint32 ObjectMgr::GetNearestTaxiNode( float x, float y, float z, uint32 mapid, u
|
||||
for(uint32 i = 1; i < sTaxiNodesStore.GetNumRows(); ++i)
|
||||
{
|
||||
TaxiNodesEntry const* node = sTaxiNodesStore.LookupEntry(i);
|
||||
if(node && node->map_id == mapid && node->MountCreatureID[team == ALLIANCE ? 1 : 0])
|
||||
if(!node || node->map_id != mapid || !node->MountCreatureID[team == ALLIANCE ? 1 : 0])
|
||||
continue;
|
||||
|
||||
uint8 field = (uint8)((i - 1) / 32);
|
||||
uint32 submask = 1<<((i-1)%32);
|
||||
|
||||
// skip not taxi network nodes
|
||||
if((sTaxiNodesMask[field] & submask)==0)
|
||||
continue;
|
||||
|
||||
float dist2 = (node->x - x)*(node->x - x)+(node->y - y)*(node->y - y)+(node->z - z)*(node->z - z);
|
||||
if(found)
|
||||
{
|
||||
float dist2 = (node->x - x)*(node->x - x)+(node->y - y)*(node->y - y)+(node->z - z)*(node->z - z);
|
||||
if(found)
|
||||
if(dist2 < dist)
|
||||
{
|
||||
if(dist2 < dist)
|
||||
{
|
||||
dist = dist2;
|
||||
id = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
found = true;
|
||||
dist = dist2;
|
||||
id = i;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
found = true;
|
||||
dist = dist2;
|
||||
id = i;
|
||||
}
|
||||
}
|
||||
|
||||
return id;
|
||||
@@ -6626,11 +6691,22 @@ void ObjectMgr::LoadGameObjectForQuests()
|
||||
{
|
||||
mGameObjectForQuestSet.clear(); // need for reload case
|
||||
|
||||
if( !sGOStorage.MaxEntry )
|
||||
{
|
||||
barGoLink bar( 1 );
|
||||
bar.step();
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded 0 GameObjects for quests" );
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar( sGOStorage.MaxEntry - 1 );
|
||||
uint32 count = 0;
|
||||
|
||||
// collect GO entries for GO that must activated
|
||||
for(uint32 go_entry = 1; go_entry < sGOStorage.MaxEntry; ++go_entry)
|
||||
{
|
||||
bar.step();
|
||||
GameObjectInfo const* goInfo = sGOStorage.LookupEntry<GameObjectInfo>(go_entry);
|
||||
if(!goInfo)
|
||||
continue;
|
||||
@@ -6665,7 +6741,7 @@ void ObjectMgr::LoadGameObjectForQuests()
|
||||
}
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u GameObject for quests", count );
|
||||
sLog.outString( ">> Loaded %u GameObjects for quests", count );
|
||||
}
|
||||
|
||||
bool ObjectMgr::LoadTrinityStrings(DatabaseType& db, char const* table, int32 min_value, int32 max_value)
|
||||
@@ -7211,11 +7287,10 @@ void ObjectMgr::LoadGameTele()
|
||||
++count;
|
||||
}
|
||||
while (result->NextRow());
|
||||
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %u game tele's", count );
|
||||
sLog.outString( ">> Loaded %u GameTeleports", count );
|
||||
}
|
||||
|
||||
GameTele const* ObjectMgr::GetGameTele(const std::string& name) const
|
||||
@@ -7387,7 +7462,7 @@ void ObjectMgr::LoadTrainerSpell()
|
||||
delete result;
|
||||
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded Trainers %d", count );
|
||||
sLog.outString( ">> Loaded %d Trainers", count );
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadVendors()
|
||||
@@ -7665,16 +7740,30 @@ void ObjectMgr::LoadScriptNames()
|
||||
"SELECT DISTINCT(ScriptName) FROM areatrigger_scripts WHERE ScriptName <> '' "
|
||||
"UNION "
|
||||
"SELECT DISTINCT(script) FROM instance_template WHERE script <> ''");
|
||||
if(result)
|
||||
|
||||
if( !result )
|
||||
{
|
||||
do
|
||||
{
|
||||
m_scriptNames.push_back((*result)[0].GetString());
|
||||
} while (result->NextRow());
|
||||
delete result;
|
||||
barGoLink bar( 1 );
|
||||
bar.step();
|
||||
sLog.outString();
|
||||
sLog.outErrorDb(">> Loaded empty set of Script Names!");
|
||||
return;
|
||||
}
|
||||
|
||||
barGoLink bar( result->GetRowCount() );
|
||||
uint32 count = 0;
|
||||
|
||||
do
|
||||
{
|
||||
bar.step();
|
||||
m_scriptNames.push_back((*result)[0].GetString());
|
||||
++count;
|
||||
} while (result->NextRow());
|
||||
delete result;
|
||||
|
||||
std::sort(m_scriptNames.begin(), m_scriptNames.end());
|
||||
sLog.outString();
|
||||
sLog.outString( ">> Loaded %d Script Names", count );
|
||||
}
|
||||
|
||||
uint32 ObjectMgr::GetScriptId(const char *name)
|
||||
|
||||
Reference in New Issue
Block a user