mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[7147] Check creature template type/family at server startup.
This commit is contained in:
parent
11ed0e99a8
commit
100801b713
11 changed files with 39 additions and 5 deletions
|
|
@ -22,7 +22,7 @@
|
||||||
DROP TABLE IF EXISTS `db_version`;
|
DROP TABLE IF EXISTS `db_version`;
|
||||||
CREATE TABLE `db_version` (
|
CREATE TABLE `db_version` (
|
||||||
`version` varchar(120) default NULL,
|
`version` varchar(120) default NULL,
|
||||||
`required_7141_01_mangos_instance_template` bit(1) default NULL
|
`required_7147_01_mangos_creature_template` bit(1) default NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes';
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
@ -819,7 +819,7 @@ CREATE TABLE `creature_template` (
|
||||||
LOCK TABLES `creature_template` WRITE;
|
LOCK TABLES `creature_template` WRITE;
|
||||||
/*!40000 ALTER TABLE `creature_template` DISABLE KEYS */;
|
/*!40000 ALTER TABLE `creature_template` DISABLE KEYS */;
|
||||||
INSERT INTO `creature_template` VALUES
|
INSERT INTO `creature_template` VALUES
|
||||||
(1,1,10045,0,10045,0,'Waypoint(Only GM can see it)','Visual',NULL,1,1,64,64,0,0,0,35,35,0,0.91,1,0,14,15,0,100,2000,2200,4096,0,8,0,0,0,0,1.76,2.42,100,8,5242886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,3,0,1,0,0,0x82,'');
|
(1,1,10045,0,10045,0,'Waypoint(Only GM can see it)','Visual',NULL,1,1,64,64,0,0,0,35,35,0,0.91,1,0,14,15,0,100,2000,2200,4096,0,0,0,0,0,0,1.76,2.42,100,8,5242886,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,'',0,3,0,1,0,0,0x82,'');
|
||||||
/*!40000 ALTER TABLE `creature_template` ENABLE KEYS */;
|
/*!40000 ALTER TABLE `creature_template` ENABLE KEYS */;
|
||||||
UNLOCK TABLES;
|
UNLOCK TABLES;
|
||||||
|
|
||||||
|
|
|
||||||
4
sql/updates/7147_01_mangos_creature_template.sql
Normal file
4
sql/updates/7147_01_mangos_creature_template.sql
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
ALTER TABLE db_version CHANGE COLUMN required_7141_01_mangos_instance_template required_7147_01_mangos_creature_template bit;
|
||||||
|
|
||||||
|
UPDATE creature_template
|
||||||
|
SET family = 0 WHERE entry = 1;
|
||||||
|
|
@ -146,6 +146,7 @@ pkgdata_DATA = \
|
||||||
7133_01_mangos_skill_discovery_template.sql \
|
7133_01_mangos_skill_discovery_template.sql \
|
||||||
7133_02_mangos_spell_loot_template.sql \
|
7133_02_mangos_spell_loot_template.sql \
|
||||||
7141_01_mangos_instance_template.sql \
|
7141_01_mangos_instance_template.sql \
|
||||||
|
7147_01_mangos_creature_template.sql \
|
||||||
README
|
README
|
||||||
|
|
||||||
## Additional files to include when running 'make dist'
|
## Additional files to include when running 'make dist'
|
||||||
|
|
@ -272,4 +273,5 @@ EXTRA_DIST = \
|
||||||
7133_01_mangos_skill_discovery_template.sql \
|
7133_01_mangos_skill_discovery_template.sql \
|
||||||
7133_02_mangos_spell_loot_template.sql \
|
7133_02_mangos_spell_loot_template.sql \
|
||||||
7141_01_mangos_instance_template.sql \
|
7141_01_mangos_instance_template.sql \
|
||||||
|
7147_01_mangos_creature_template.sql \
|
||||||
README
|
README
|
||||||
|
|
|
||||||
|
|
@ -169,7 +169,7 @@ struct CreatureInfo
|
||||||
uint32 rangeattacktime;
|
uint32 rangeattacktime;
|
||||||
uint32 unit_flags; // enum UnitFlags mask values
|
uint32 unit_flags; // enum UnitFlags mask values
|
||||||
uint32 dynamicflags;
|
uint32 dynamicflags;
|
||||||
uint32 family; // enum CreatureFamily values for type==CREATURE_TYPE_BEAST, or 0 in another cases
|
uint32 family; // enum CreatureFamily values (optional)
|
||||||
uint32 trainer_type;
|
uint32 trainer_type;
|
||||||
uint32 trainer_spell;
|
uint32 trainer_spell;
|
||||||
uint32 classNum;
|
uint32 classNum;
|
||||||
|
|
|
||||||
|
|
@ -766,6 +766,19 @@ void ObjectMgr::LoadCreatureTemplates()
|
||||||
if((cInfo->npcflag & UNIT_NPC_FLAG_TRAINER) && cInfo->trainer_type >= MAX_TRAINER_TYPE)
|
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);
|
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)
|
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);
|
sLog.outErrorDb("Creature (Entry: %u) has wrong value (%u) in `InhabitType`, creature will not correctly walk/swim/fly",cInfo->Entry,cInfo->InhabitType);
|
||||||
|
|
|
||||||
|
|
@ -1506,6 +1506,7 @@ enum TrainerType // this is important
|
||||||
|
|
||||||
#define MAX_TRAINER_TYPE 4
|
#define MAX_TRAINER_TYPE 4
|
||||||
|
|
||||||
|
// CreatureType.dbc
|
||||||
enum CreatureType
|
enum CreatureType
|
||||||
{
|
{
|
||||||
CREATURE_TYPE_BEAST = 1,
|
CREATURE_TYPE_BEAST = 1,
|
||||||
|
|
@ -1525,6 +1526,7 @@ enum CreatureType
|
||||||
|
|
||||||
uint32 const CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD = (1 << (CREATURE_TYPE_HUMANOID-1)) | (1 << (CREATURE_TYPE_UNDEAD-1));
|
uint32 const CREATURE_TYPEMASK_HUMANOID_OR_UNDEAD = (1 << (CREATURE_TYPE_HUMANOID-1)) | (1 << (CREATURE_TYPE_UNDEAD-1));
|
||||||
|
|
||||||
|
// CreatureFamily.dbc
|
||||||
enum CreatureFamily
|
enum CreatureFamily
|
||||||
{
|
{
|
||||||
CREATURE_FAMILY_WOLF = 1,
|
CREATURE_FAMILY_WOLF = 1,
|
||||||
|
|
@ -1536,6 +1538,7 @@ enum CreatureFamily
|
||||||
CREATURE_FAMILY_CARRION_BIRD = 7,
|
CREATURE_FAMILY_CARRION_BIRD = 7,
|
||||||
CREATURE_FAMILY_CRAB = 8,
|
CREATURE_FAMILY_CRAB = 8,
|
||||||
CREATURE_FAMILY_GORILLA = 9,
|
CREATURE_FAMILY_GORILLA = 9,
|
||||||
|
CREATURE_FAMILY_HORSE_CUSTOM = 10, // not exist in DBC but used for horse like beasts in DB
|
||||||
CREATURE_FAMILY_RAPTOR = 11,
|
CREATURE_FAMILY_RAPTOR = 11,
|
||||||
CREATURE_FAMILY_TALLSTRIDER = 12,
|
CREATURE_FAMILY_TALLSTRIDER = 12,
|
||||||
CREATURE_FAMILY_FELHUNTER = 15,
|
CREATURE_FAMILY_FELHUNTER = 15,
|
||||||
|
|
|
||||||
|
|
@ -48,6 +48,7 @@ DBCStorage <ChrRacesEntry> sChrRacesStore(ChrRacesEntryfmt);
|
||||||
DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt);
|
DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore(CreatureDisplayInfofmt);
|
||||||
DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt);
|
DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore(CreatureFamilyfmt);
|
||||||
DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt);
|
DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore(CreatureSpellDatafmt);
|
||||||
|
DBCStorage <CreatureTypeEntry> sCreatureTypeStore(CreatureTypefmt);
|
||||||
|
|
||||||
DBCStorage <DurabilityQualityEntry> sDurabilityQualityStore(DurabilityQualityfmt);
|
DBCStorage <DurabilityQualityEntry> sDurabilityQualityStore(DurabilityQualityfmt);
|
||||||
DBCStorage <DurabilityCostsEntry> sDurabilityCostsStore(DurabilityCostsfmt);
|
DBCStorage <DurabilityCostsEntry> sDurabilityCostsStore(DurabilityCostsfmt);
|
||||||
|
|
@ -190,7 +191,7 @@ void LoadDBCStores(const std::string& dataPath)
|
||||||
{
|
{
|
||||||
std::string dbcPath = dataPath+"dbc/";
|
std::string dbcPath = dataPath+"dbc/";
|
||||||
|
|
||||||
const uint32 DBCFilesCount = 69;
|
const uint32 DBCFilesCount = 70;
|
||||||
|
|
||||||
barGoLink bar( DBCFilesCount );
|
barGoLink bar( DBCFilesCount );
|
||||||
|
|
||||||
|
|
@ -229,6 +230,7 @@ void LoadDBCStores(const std::string& dataPath)
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureDisplayInfoStore, dbcPath,"CreatureDisplayInfo.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureDisplayInfoStore, dbcPath,"CreatureDisplayInfo.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureFamilyStore, dbcPath,"CreatureFamily.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureFamilyStore, dbcPath,"CreatureFamily.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureSpellDataStore, dbcPath,"CreatureSpellData.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureSpellDataStore, dbcPath,"CreatureSpellData.dbc");
|
||||||
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sCreatureTypeStore, dbcPath,"CreatureType.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sDurabilityCostsStore, dbcPath,"DurabilityCosts.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sDurabilityCostsStore, dbcPath,"DurabilityCosts.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sDurabilityQualityStore, dbcPath,"DurabilityQuality.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sDurabilityQualityStore, dbcPath,"DurabilityQuality.dbc");
|
||||||
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sEmotesTextStore, dbcPath,"EmotesText.dbc");
|
LoadDBC(availableDbcLocales,bar,bad_dbc_files,sEmotesTextStore, dbcPath,"EmotesText.dbc");
|
||||||
|
|
|
||||||
|
|
@ -146,6 +146,7 @@ extern DBCStorage <ChrRacesEntry> sChrRacesStore;
|
||||||
extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore;
|
extern DBCStorage <CreatureDisplayInfoEntry> sCreatureDisplayInfoStore;
|
||||||
extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore;
|
extern DBCStorage <CreatureFamilyEntry> sCreatureFamilyStore;
|
||||||
extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore;
|
extern DBCStorage <CreatureSpellDataEntry> sCreatureSpellDataStore;
|
||||||
|
extern DBCStorage <CreatureTypeEntry> sCreatureTypeStore;
|
||||||
extern DBCStorage <DurabilityCostsEntry> sDurabilityCostsStore;
|
extern DBCStorage <DurabilityCostsEntry> sDurabilityCostsStore;
|
||||||
extern DBCStorage <DurabilityQualityEntry> sDurabilityQualityStore;
|
extern DBCStorage <DurabilityQualityEntry> sDurabilityQualityStore;
|
||||||
extern DBCStorage <EmotesTextEntry> sEmotesTextStore;
|
extern DBCStorage <EmotesTextEntry> sEmotesTextStore;
|
||||||
|
|
|
||||||
|
|
@ -664,6 +664,14 @@ struct CreatureSpellDataEntry
|
||||||
//uint32 availability[4]; // 4-7 m_availability[4]
|
//uint32 availability[4]; // 4-7 m_availability[4]
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct CreatureTypeEntry
|
||||||
|
{
|
||||||
|
uint32 ID; // 0 m_ID
|
||||||
|
//char* Name[16]; // 1-16 name
|
||||||
|
// 17 string flags
|
||||||
|
//uint32 no_expirience; // 18 no exp? critters, non-combat pets, gas cloud.
|
||||||
|
};
|
||||||
|
|
||||||
struct DurabilityCostsEntry
|
struct DurabilityCostsEntry
|
||||||
{
|
{
|
||||||
uint32 Itemlvl; // 0
|
uint32 Itemlvl; // 0
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ const char ChrRacesEntryfmt[]="nxixiixxixxxxissssssssssssssssxxxxxxxxxxxxxxxxxxx
|
||||||
const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx";
|
const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx";
|
||||||
const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx";
|
const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx";
|
||||||
const char CreatureSpellDatafmt[]="nxxxxxxxx";
|
const char CreatureSpellDatafmt[]="nxxxxxxxx";
|
||||||
|
const char CreatureTypefmt[]="nxxxxxxxxxxxxxxxxxx";
|
||||||
const char DurabilityCostsfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
const char DurabilityCostsfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiii";
|
||||||
const char DurabilityQualityfmt[]="nf";
|
const char DurabilityQualityfmt[]="nf";
|
||||||
const char EmoteEntryfmt[]="nxixxxxxxxxxxxxxxxx";
|
const char EmoteEntryfmt[]="nxixxxxxxxxxxxxxxxx";
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "7146"
|
#define REVISION_NR "7147"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue