Cleanups in instance_template and map entrance DBC data.

This commit is contained in:
VladimirMangos 2010-04-17 14:55:30 +04:00
parent 43cc07fbbc
commit 48254e3879
7 changed files with 63 additions and 51 deletions

View file

@ -2036,10 +2036,6 @@ CREATE TABLE `instance_template` (
`parent` smallint(5) unsigned NOT NULL default '0',
`levelMin` tinyint(3) unsigned NOT NULL default '0',
`levelMax` tinyint(3) unsigned NOT NULL default '0',
`startLocX` float default NULL,
`startLocY` float default NULL,
`startLocZ` float default NULL,
`startLocO` float default NULL,
`script` varchar(128) NOT NULL default '',
PRIMARY KEY (`map`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

View file

@ -0,0 +1,5 @@
ALTER TABLE instance_template
DROP COLUMN startLocX,
DROP COLUMN startLocY,
DROP COLUMN startLocZ,
DROP COLUMN startLocO;

View file

@ -1108,9 +1108,9 @@ struct MapEntry
// 56 intro text flags
uint32 multimap_id; // 57 index in LoadingScreens.dbc
//float BattlefieldMapIconScale; // 58 BattlefieldMapIconScale
int32 entrance_map; // 59 map_id of entrance map
float entrance_x; // 60 entrance x coordinate (if exist single entry)
float entrance_y; // 61 entrance y coordinate (if exist single entry)
int32 ghost_entrance_map; // 59 map_id of entrance map in ghost mode (continent always and in most cases = normal entrance)
float ghost_entrance_x; // 60 entrance x coordinate in ghost mode (in most cases = normal entrance)
float ghost_entrance_y; // 61 entrance y coordinate in ghost mode (in most cases = normal entrance)
//uint32 timeOfDayOverride; // 62 time of day override
uint32 addon; // 63 expansion
// 64 some kind of time?

View file

@ -189,14 +189,11 @@ public:
struct InstanceTemplate
{
uint32 map;
uint32 parent;
uint32 map; // instance map
uint32 parent; // non-continent parent instance (for instance with entrance in another instances)
// or 0 (not related to continent 0 map id)
uint32 levelMin;
uint32 levelMax;
float startLocX;
float startLocY;
float startLocZ;
float startLocO;
uint32 script_id;
};
@ -347,17 +344,6 @@ class MANGOS_DLL_SPEC Map : public GridRefManager<NGridType>, public MaNGOS::Obj
bool IsBattleGround() const { return i_mapEntry && i_mapEntry->IsBattleGround(); }
bool IsBattleArena() const { return i_mapEntry && i_mapEntry->IsBattleArena(); }
bool IsBattleGroundOrArena() const { return i_mapEntry && i_mapEntry->IsBattleGroundOrArena(); }
bool GetEntrancePos(int32 &mapid, float &x, float &y)
{
if(!i_mapEntry)
return false;
if(i_mapEntry->entrance_map < 0)
return false;
mapid = i_mapEntry->entrance_map;
x = i_mapEntry->entrance_x;
y = i_mapEntry->entrance_y;
return true;
}
void AddObjectToRemoveList(WorldObject *obj);

View file

@ -4676,17 +4676,42 @@ void ObjectMgr::LoadInstanceTemplate()
for(uint32 i = 0; i < sInstanceTemplate.MaxEntry; i++)
{
InstanceTemplate* temp = (InstanceTemplate*)GetInstanceTemplate(i);
if(!temp)
InstanceTemplate const* temp = GetInstanceTemplate(i);
if (!temp)
continue;
if(!MapManager::IsValidMAP(temp->map))
sLog.outErrorDb("ObjectMgr::LoadInstanceTemplate: bad mapid %d for template!", temp->map);
if(!MapManager::IsValidMapCoord(temp->parent,temp->startLocX,temp->startLocY,temp->startLocZ,temp->startLocO))
MapEntry const* mapEntry = sMapStore.LookupEntry(temp->map);
if (!mapEntry)
{
sLog.outErrorDb("ObjectMgr::LoadInstanceTemplate: bad parent entrance coordinates for map id %d template!", temp->map);
temp->parent = 0; // will have wrong continent 0 parent, at least existed
sLog.outErrorDb("ObjectMgr::LoadInstanceTemplate: bad mapid %d for template!", temp->map);
sInstanceTemplate.EraseEntry(i);
continue;
}
if (mapEntry->IsContinent())
{
sLog.outErrorDb("ObjectMgr::LoadInstanceTemplate: continent mapid %d for template!", temp->map);
sInstanceTemplate.EraseEntry(i);
continue;
}
if (temp->parent > 0)
{
// check existence
MapEntry const* parentEntry = sMapStore.LookupEntry(temp->parent);
if (!parentEntry)
{
sLog.outErrorDb("ObjectMgr::LoadInstanceTemplate: bad parent map id for instance template %d template!", parentEntry,temp->map);
const_cast<InstanceTemplate*>(temp)->parent = 0;
continue;
}
if (parentEntry->IsContinent())
{
sLog.outErrorDb("ObjectMgr::LoadInstanceTemplate: parent point to continent map id %u for instance template %d template, ignored, need be set only for non-continent parents!", parentEntry->MapID,temp->map);
const_cast<InstanceTemplate*>(temp)->parent = 0;
continue;
}
}
}
@ -5349,23 +5374,23 @@ WorldSafeLocsEntry const *ObjectMgr::GetClosestGraveYard(float x, float y, float
if(data.team != 0 && team != 0 && data.team != team)
continue;
// find now nearest graveyard at other map
// find now nearest graveyard at other (continent) map
if(MapId != entry->map_id)
{
// if find graveyard at different map from where entrance placed (or no entrance data), use any first
if (!mapEntry ||
mapEntry->entrance_map < 0 ||
mapEntry->entrance_map != entry->map_id ||
(mapEntry->entrance_x == 0 && mapEntry->entrance_y == 0))
mapEntry->ghost_entrance_map < 0 ||
mapEntry->ghost_entrance_map != entry->map_id ||
(mapEntry->ghost_entrance_x == 0 && mapEntry->ghost_entrance_y == 0))
{
// not have any corrdinates for check distance anyway
// not have any coordinates for check distance anyway
entryFar = entry;
continue;
}
// at entrance map calculate distance (2D);
float dist2 = (entry->x - mapEntry->entrance_x)*(entry->x - mapEntry->entrance_x)
+(entry->y - mapEntry->entrance_y)*(entry->y - mapEntry->entrance_y);
float dist2 = (entry->x - mapEntry->ghost_entrance_x)*(entry->x - mapEntry->ghost_entrance_x)
+(entry->y - mapEntry->ghost_entrance_y)*(entry->y - mapEntry->ghost_entrance_y);
if(foundEntr)
{
if(dist2 < distEntr)
@ -5586,18 +5611,18 @@ void ObjectMgr::LoadAreaTriggerTeleports()
}
/*
* Searches for the areatrigger which teleports players out of the given map
* Searches for the areatrigger which teleports players out of the given map (only direct to continent)
*/
AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 Map) const
AreaTrigger const* ObjectMgr::GetGoBackTrigger(uint32 map_id) const
{
const MapEntry *mapEntry = sMapStore.LookupEntry(Map);
const MapEntry *mapEntry = sMapStore.LookupEntry(map_id);
if(!mapEntry) return NULL;
for (AreaTriggerMap::const_iterator itr = mAreaTriggers.begin(); itr != mAreaTriggers.end(); ++itr)
{
if(itr->second.target_mapId == mapEntry->entrance_map)
if(itr->second.target_mapId == mapEntry->ghost_entrance_map)
{
AreaTriggerEntry const* atEntry = sAreaTriggerStore.LookupEntry(itr->first);
if(atEntry && atEntry->mapid == Map)
if(atEntry && atEntry->mapid == map_id)
return &itr->second;
}
}

View file

@ -293,14 +293,14 @@ void WorldSession::HandleCorpseQueryOpcode(WorldPacket & /*recv_data*/)
// search entrance map for proper show entrance
if(MapEntry const* corpseMapEntry = sMapStore.LookupEntry(mapid))
{
if(corpseMapEntry->IsDungeon() && corpseMapEntry->entrance_map >= 0)
if(corpseMapEntry->IsDungeon() && corpseMapEntry->ghost_entrance_map >= 0)
{
// if corpse map have entrance
if(Map const* entranceMap = sMapMgr.CreateBaseMap(corpseMapEntry->entrance_map))
if(Map const* entranceMap = sMapMgr.CreateBaseMap(corpseMapEntry->ghost_entrance_map))
{
mapid = corpseMapEntry->entrance_map;
x = corpseMapEntry->entrance_x;
y = corpseMapEntry->entrance_y;
mapid = corpseMapEntry->ghost_entrance_map;
x = corpseMapEntry->ghost_entrance_x;
y = corpseMapEntry->ghost_entrance_y;
z = entranceMap->GetHeight(x, y, MAX_HEIGHT);
}
}

View file

@ -36,8 +36,8 @@ const char GameObjectInfodstfmt[]="iiissssiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii";
const char ItemPrototypesrcfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiisiiiii";
const char ItemPrototypedstfmt[]="iiiisiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiffiffiiiiiiiiiifiiifiiiiiifiiiiiifiiiiiifiiiiiifiiiisiiiiiiiiiiiiiiiiiiiiiiiiifiiiiiiiii";
const char PageTextfmt[]="isi";
const char InstanceTemplatesrcfmt[]="iiiiffffs";
const char InstanceTemplatedstfmt[]="iiiiffffi";
const char InstanceTemplatesrcfmt[]="iiiis";
const char InstanceTemplatedstfmt[]="iiiii";
SQLStorage sCreatureStorage(CreatureInfosrcfmt, CreatureInfodstfmt, "entry","creature_template");
SQLStorage sCreatureDataAddonStorage(CreatureDataAddonInfofmt,"guid","creature_addon");