mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-01-17 19:05:42 +00:00
* refactor(creature_template): closes #1181 * chore: improve code readability
This commit is contained in:
committed by
Viste(Кирилл)
parent
e8d73a553f
commit
7c7c5eb203
@@ -0,0 +1,10 @@
|
||||
INSERT INTO `version_db_world` (`sql_rev`) VALUES ('1547901412383310168');
|
||||
|
||||
ALTER TABLE `creature_template`
|
||||
CHANGE `baseattacktime` `BaseAttackTime` INT(10) UNSIGNED DEFAULT 0 NOT NULL,
|
||||
CHANGE `rangeattacktime` `RangeAttackTime` INT(10) UNSIGNED DEFAULT 0 NOT NULL,
|
||||
CHANGE `Health_mod` `HealthModifier` FLOAT DEFAULT 1 NOT NULL,
|
||||
CHANGE `Mana_mod` `ManaModifier` FLOAT DEFAULT 1 NOT NULL,
|
||||
CHANGE `Armor_mod` `ArmorModifier` FLOAT DEFAULT 1 NOT NULL,
|
||||
CHANGE `dmg_multiplier` `DamageModifier` FLOAT DEFAULT 1 NOT NULL,
|
||||
CHANGE `VerifiedBuild` `VerifiedBuild` SMALLINT(5) DEFAULT '0';
|
||||
@@ -65,7 +65,7 @@ void WorldDatabaseConnection::DoPrepareStatements()
|
||||
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_ID_BY_GUID, "SELECT id FROM waypoint_scripts WHERE guid = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(WORLD_DEL_CREATURE, "DELETE FROM creature WHERE guid = ?", CONNECTION_ASYNC);
|
||||
PrepareStatement(WORLD_SEL_COMMANDS, "SELECT name, security, help FROM command", CONNECTION_SYNCH);
|
||||
PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(WORLD_SEL_CREATURE_TEMPLATE, "SELECT difficulty_entry_1, difficulty_entry_2, difficulty_entry_3, KillCredit1, KillCredit2, modelid1, modelid2, modelid3, modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, scale, rank, mindmg, maxdmg, dmgschool, attackpower, DamageModifier, BaseAttackTime, RangeAttackTime, unit_class, unit_flags, unit_flags2, dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName FROM creature_template WHERE entry = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(WORLD_SEL_WAYPOINT_SCRIPT_BY_ID, "SELECT guid, delay, command, datalong, datalong2, dataint, x, y, z, o FROM waypoint_scripts WHERE id = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(WORLD_SEL_ITEM_TEMPLATE_BY_NAME, "SELECT entry FROM item_template WHERE name = ?", CONNECTION_SYNCH);
|
||||
PrepareStatement(WORLD_SEL_CREATURE_BY_ID, "SELECT guid FROM creature WHERE id = ?", CONNECTION_SYNCH);
|
||||
|
||||
@@ -428,9 +428,9 @@ bool Creature::UpdateEntry(uint32 Entry, const CreatureData* data, bool changele
|
||||
|
||||
SetUInt32Value(UNIT_DYNAMIC_FLAGS, dynamicflags);
|
||||
|
||||
SetAttackTime(BASE_ATTACK, cInfo->baseattacktime);
|
||||
SetAttackTime(OFF_ATTACK, cInfo->baseattacktime);
|
||||
SetAttackTime(RANGED_ATTACK, cInfo->rangeattacktime);
|
||||
SetAttackTime(BASE_ATTACK, cInfo->BaseAttackTime);
|
||||
SetAttackTime(OFF_ATTACK, cInfo->BaseAttackTime);
|
||||
SetAttackTime(RANGED_ATTACK, cInfo->RangeAttackTime);
|
||||
|
||||
SelectLevel(changelevel);
|
||||
|
||||
|
||||
@@ -66,8 +66,6 @@ enum CreatureFlagsExtra
|
||||
|
||||
#define MAX_CREATURE_QUEST_ITEMS 6
|
||||
|
||||
#define MAX_EQUIPMENT_ITEMS 3
|
||||
|
||||
// from `creature_template` table
|
||||
struct CreatureTemplate
|
||||
{
|
||||
@@ -95,9 +93,9 @@ struct CreatureTemplate
|
||||
float maxdmg;
|
||||
uint32 dmgschool;
|
||||
uint32 attackpower;
|
||||
float dmg_multiplier;
|
||||
uint32 baseattacktime;
|
||||
uint32 rangeattacktime;
|
||||
float DamageModifier;
|
||||
uint32 BaseAttackTime;
|
||||
uint32 RangeAttackTime;
|
||||
uint32 unit_class; // enum Classes. Note only 4 classes are known for creatures.
|
||||
uint32 unit_flags; // enum UnitFlags mask values
|
||||
uint32 unit_flags2; // enum UnitFlags2 mask values
|
||||
@@ -234,6 +232,8 @@ struct PointOfInterestLocale
|
||||
StringVector IconName;
|
||||
};
|
||||
|
||||
#define MAX_EQUIPMENT_ITEMS 3
|
||||
|
||||
struct EquipmentInfo
|
||||
{
|
||||
uint32 ItemEntry[MAX_EQUIPMENT_ITEMS];
|
||||
|
||||
@@ -694,8 +694,8 @@ bool Guardian::InitStatsForLevel(uint8 petlevel)
|
||||
SetModifierValue(UNIT_MOD_ARMOR, BASE_VALUE, float(petlevel*50));
|
||||
|
||||
uint32 attackTime = BASE_ATTACK_TIME;
|
||||
if (m_owner->getClass() != CLASS_HUNTER && cinfo->baseattacktime >= 1000)
|
||||
attackTime = cinfo->baseattacktime;
|
||||
if (m_owner->getClass() != CLASS_HUNTER && cinfo->BaseAttackTime >= 1000)
|
||||
attackTime = cinfo->BaseAttackTime;
|
||||
|
||||
SetAttackTime(BASE_ATTACK, attackTime);
|
||||
SetAttackTime(OFF_ATTACK, attackTime);
|
||||
|
||||
@@ -1089,7 +1089,7 @@ void Creature::CalculateMinMaxDamage(WeaponAttackType attType, bool normalized,
|
||||
float basePct = GetModifierValue(unitMod, BASE_PCT);
|
||||
float totalValue = GetModifierValue(unitMod, TOTAL_VALUE);
|
||||
float totalPct = addTotalPct ? GetModifierValue(unitMod, TOTAL_PCT) : 1.0f;
|
||||
float dmgMultiplier = GetCreatureTemplate()->dmg_multiplier; // = dmg_multiplier * _GetDamageMod(rank);
|
||||
float dmgMultiplier = GetCreatureTemplate()->DamageModifier; // = DamageModifier * _GetDamageMod(rank);
|
||||
|
||||
minDamage = ((weaponMinDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
|
||||
maxDamage = ((weaponMaxDamage + baseValue) * dmgMultiplier * basePct + totalValue) * totalPct;
|
||||
|
||||
@@ -399,15 +399,15 @@ void ObjectMgr::LoadCreatureTemplates()
|
||||
// 9 10 11 12 13 14 15 16 17 18 19 20 21
|
||||
"modelid4, name, subname, IconName, gossip_menu_id, minlevel, maxlevel, exp, faction, npcflag, speed_walk, speed_run, "
|
||||
// 22 23 24 25 26 27 28 29 30 31 32 33
|
||||
"scale, rank, mindmg, maxdmg, dmgschool, attackpower, dmg_multiplier, baseattacktime, rangeattacktime, unit_class, unit_flags, unit_flags2, "
|
||||
"scale, rank, mindmg, maxdmg, dmgschool, attackpower, DamageModifier, BaseAttackTime, RangeAttackTime, unit_class, unit_flags, unit_flags2, "
|
||||
// 34 35 36 37 38 39 40 41 42 43
|
||||
"dynamicflags, family, trainer_type, trainer_spell, trainer_class, trainer_race, minrangedmg, maxrangedmg, rangedattackpower, type, "
|
||||
// 44 45 46 47 48 49 50 51 52 53 54
|
||||
"type_flags, lootid, pickpocketloot, skinloot, resistance1, resistance2, resistance3, resistance4, resistance5, resistance6, spell1, "
|
||||
// 55 56 57 58 59 60 61 62 63 64 65 66 67
|
||||
"spell2, spell3, spell4, spell5, spell6, spell7, spell8, PetSpellDataId, VehicleId, mingold, maxgold, AIName, MovementType, "
|
||||
// 68 69 70 71 72 73 74 75 76 77 78
|
||||
"InhabitType, HoverHeight, Health_mod, Mana_mod, Armor_mod, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName "
|
||||
// 68 69 70 71 72 73 74 75 76 77 78
|
||||
"InhabitType, HoverHeight, HealthModifier, ManaModifier, ArmorModifier, RacialLeader, movementId, RegenHealth, mechanic_immune_mask, flags_extra, ScriptName "
|
||||
"FROM creature_template;");
|
||||
|
||||
if (!result)
|
||||
@@ -456,9 +456,9 @@ void ObjectMgr::LoadCreatureTemplates()
|
||||
creatureTemplate.maxdmg = fields[24].GetFloat();
|
||||
creatureTemplate.dmgschool = uint32(fields[25].GetInt8());
|
||||
creatureTemplate.attackpower = fields[26].GetUInt32();
|
||||
creatureTemplate.dmg_multiplier = fields[27].GetFloat();
|
||||
creatureTemplate.baseattacktime = fields[28].GetUInt32();
|
||||
creatureTemplate.rangeattacktime = fields[29].GetUInt32();
|
||||
creatureTemplate.DamageModifier = fields[27].GetFloat();
|
||||
creatureTemplate.BaseAttackTime = fields[28].GetUInt32();
|
||||
creatureTemplate.RangeAttackTime = fields[29].GetUInt32();
|
||||
creatureTemplate.unit_class = uint32(fields[30].GetUInt8());
|
||||
creatureTemplate.unit_flags = fields[31].GetUInt32();
|
||||
creatureTemplate.unit_flags2 = fields[32].GetUInt32();
|
||||
@@ -840,11 +840,11 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
|
||||
const_cast<CreatureTemplate*>(cInfo)->dmgschool = SPELL_SCHOOL_NORMAL;
|
||||
}
|
||||
|
||||
if (cInfo->baseattacktime == 0)
|
||||
const_cast<CreatureTemplate*>(cInfo)->baseattacktime = BASE_ATTACK_TIME;
|
||||
if (cInfo->BaseAttackTime == 0)
|
||||
const_cast<CreatureTemplate*>(cInfo)->BaseAttackTime = BASE_ATTACK_TIME;
|
||||
|
||||
if (cInfo->rangeattacktime == 0)
|
||||
const_cast<CreatureTemplate*>(cInfo)->rangeattacktime = BASE_ATTACK_TIME;
|
||||
if (cInfo->RangeAttackTime == 0)
|
||||
const_cast<CreatureTemplate*>(cInfo)->RangeAttackTime = BASE_ATTACK_TIME;
|
||||
|
||||
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);
|
||||
@@ -939,7 +939,7 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo)
|
||||
const_cast<CreatureTemplate*>(cInfo)->flags_extra &= CREATURE_FLAG_EXTRA_DB_ALLOWED;
|
||||
}
|
||||
|
||||
const_cast<CreatureTemplate*>(cInfo)->dmg_multiplier *= Creature::_GetDamageMod(cInfo->rank);
|
||||
const_cast<CreatureTemplate*>(cInfo)->DamageModifier *= Creature::_GetDamageMod(cInfo->rank);
|
||||
}
|
||||
|
||||
void ObjectMgr::LoadCreatureAddons()
|
||||
|
||||
@@ -463,9 +463,9 @@ public:
|
||||
cInfo->maxdmg = fields[23].GetFloat();
|
||||
cInfo->dmgschool = fields[24].GetUInt8();
|
||||
cInfo->attackpower = fields[25].GetUInt32();
|
||||
cInfo->dmg_multiplier = fields[26].GetFloat();
|
||||
cInfo->baseattacktime = fields[27].GetUInt32();
|
||||
cInfo->rangeattacktime = fields[28].GetUInt32();
|
||||
cInfo->DamageModifier = fields[26].GetFloat();
|
||||
cInfo->BaseAttackTime = fields[27].GetUInt32();
|
||||
cInfo->RangeAttackTime = fields[28].GetUInt32();
|
||||
cInfo->unit_class = fields[29].GetUInt8();
|
||||
cInfo->unit_flags = fields[30].GetUInt32();
|
||||
cInfo->unit_flags2 = fields[31].GetUInt32();
|
||||
|
||||
@@ -110,7 +110,7 @@ class npc_pet_hunter_snake_trap : public CreatureScript
|
||||
me->SetMaxHealth(health);
|
||||
//Add delta to make them not all hit the same time
|
||||
uint32 delta = urand(0, 700);
|
||||
me->SetAttackTime(BASE_ATTACK, Info->baseattacktime + delta);
|
||||
me->SetAttackTime(BASE_ATTACK, Info->BaseAttackTime + delta);
|
||||
me->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER , float(Info->attackpower));
|
||||
me->CastSpell(me, SPELL_HUNTER_DEADLY_POISON_PASSIVE, true);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user