diff --git a/sql/mangos.sql b/sql/mangos.sql index 86aea0681..0e6241769 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -22,7 +22,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `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'; -- @@ -819,7 +819,7 @@ CREATE TABLE `creature_template` ( LOCK TABLES `creature_template` WRITE; /*!40000 ALTER TABLE `creature_template` DISABLE KEYS */; 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 */; UNLOCK TABLES; diff --git a/sql/updates/7147_01_mangos_creature_template.sql b/sql/updates/7147_01_mangos_creature_template.sql new file mode 100644 index 000000000..286718b8e --- /dev/null +++ b/sql/updates/7147_01_mangos_creature_template.sql @@ -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; diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index b9f3f5f4f..2d96d98f6 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -146,6 +146,7 @@ pkgdata_DATA = \ 7133_01_mangos_skill_discovery_template.sql \ 7133_02_mangos_spell_loot_template.sql \ 7141_01_mangos_instance_template.sql \ + 7147_01_mangos_creature_template.sql \ README ## Additional files to include when running 'make dist' @@ -272,4 +273,5 @@ EXTRA_DIST = \ 7133_01_mangos_skill_discovery_template.sql \ 7133_02_mangos_spell_loot_template.sql \ 7141_01_mangos_instance_template.sql \ + 7147_01_mangos_creature_template.sql \ README diff --git a/src/game/Creature.h b/src/game/Creature.h index cb444205e..681b028e9 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -169,7 +169,7 @@ struct CreatureInfo uint32 rangeattacktime; uint32 unit_flags; // enum UnitFlags mask values 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_spell; uint32 classNum; diff --git a/src/game/ObjectMgr.cpp b/src/game/ObjectMgr.cpp index 22bf7155c..dc2d85188 100644 --- a/src/game/ObjectMgr.cpp +++ b/src/game/ObjectMgr.cpp @@ -766,6 +766,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(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(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); diff --git a/src/game/SharedDefines.h b/src/game/SharedDefines.h index 452d95686..a1ccd0ace 100644 --- a/src/game/SharedDefines.h +++ b/src/game/SharedDefines.h @@ -1506,6 +1506,7 @@ enum TrainerType // this is important #define MAX_TRAINER_TYPE 4 +// CreatureType.dbc enum CreatureType { 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)); +// CreatureFamily.dbc enum CreatureFamily { CREATURE_FAMILY_WOLF = 1, @@ -1536,6 +1538,7 @@ enum CreatureFamily CREATURE_FAMILY_CARRION_BIRD = 7, CREATURE_FAMILY_CRAB = 8, 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_TALLSTRIDER = 12, CREATURE_FAMILY_FELHUNTER = 15, diff --git a/src/shared/Database/DBCStores.cpp b/src/shared/Database/DBCStores.cpp index 02db49af9..c44140fe0 100644 --- a/src/shared/Database/DBCStores.cpp +++ b/src/shared/Database/DBCStores.cpp @@ -48,6 +48,7 @@ DBCStorage sChrRacesStore(ChrRacesEntryfmt); DBCStorage sCreatureDisplayInfoStore(CreatureDisplayInfofmt); DBCStorage sCreatureFamilyStore(CreatureFamilyfmt); DBCStorage sCreatureSpellDataStore(CreatureSpellDatafmt); +DBCStorage sCreatureTypeStore(CreatureTypefmt); DBCStorage sDurabilityQualityStore(DurabilityQualityfmt); DBCStorage sDurabilityCostsStore(DurabilityCostsfmt); @@ -190,7 +191,7 @@ void LoadDBCStores(const std::string& dataPath) { std::string dbcPath = dataPath+"dbc/"; - const uint32 DBCFilesCount = 69; + const uint32 DBCFilesCount = 70; 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,sCreatureFamilyStore, dbcPath,"CreatureFamily.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,sDurabilityQualityStore, dbcPath,"DurabilityQuality.dbc"); LoadDBC(availableDbcLocales,bar,bad_dbc_files,sEmotesTextStore, dbcPath,"EmotesText.dbc"); diff --git a/src/shared/Database/DBCStores.h b/src/shared/Database/DBCStores.h index b7ba96b61..b3d778fac 100644 --- a/src/shared/Database/DBCStores.h +++ b/src/shared/Database/DBCStores.h @@ -146,6 +146,7 @@ extern DBCStorage sChrRacesStore; extern DBCStorage sCreatureDisplayInfoStore; extern DBCStorage sCreatureFamilyStore; extern DBCStorage sCreatureSpellDataStore; +extern DBCStorage sCreatureTypeStore; extern DBCStorage sDurabilityCostsStore; extern DBCStorage sDurabilityQualityStore; extern DBCStorage sEmotesTextStore; diff --git a/src/shared/Database/DBCStructure.h b/src/shared/Database/DBCStructure.h index b8a9fbb4b..88fec2a35 100644 --- a/src/shared/Database/DBCStructure.h +++ b/src/shared/Database/DBCStructure.h @@ -664,6 +664,14 @@ struct CreatureSpellDataEntry //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 { uint32 Itemlvl; // 0 diff --git a/src/shared/Database/DBCfmt.cpp b/src/shared/Database/DBCfmt.cpp index 92f725ac0..1fcac5b9c 100644 --- a/src/shared/Database/DBCfmt.cpp +++ b/src/shared/Database/DBCfmt.cpp @@ -33,6 +33,7 @@ const char ChrRacesEntryfmt[]="nxixiixxixxxxissssssssssssssssxxxxxxxxxxxxxxxxxxx const char CreatureDisplayInfofmt[]="nxxxfxxxxxxxxxxx"; const char CreatureFamilyfmt[]="nfifiiiiixssssssssssssssssxx"; const char CreatureSpellDatafmt[]="nxxxxxxxx"; +const char CreatureTypefmt[]="nxxxxxxxxxxxxxxxxxx"; const char DurabilityCostsfmt[]="niiiiiiiiiiiiiiiiiiiiiiiiiiiii"; const char DurabilityQualityfmt[]="nf"; const char EmoteEntryfmt[]="nxixxxxxxxxxxxxxxxx"; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index ca2f93eef..426cfa73d 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "7146" + #define REVISION_NR "7147" #endif // __REVISION_NR_H__