diff --git a/data/sql/updates/pending_db_world/rev_1547901412383310168.sql b/data/sql/updates/pending_db_world/rev_1547901412383310168.sql new file mode 100644 index 000000000..db11df09b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1547901412383310168.sql @@ -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'; diff --git a/src/common/Database/Implementation/WorldDatabase.cpp b/src/common/Database/Implementation/WorldDatabase.cpp index 575199638..11048ced4 100644 --- a/src/common/Database/Implementation/WorldDatabase.cpp +++ b/src/common/Database/Implementation/WorldDatabase.cpp @@ -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); diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index e168e35ad..d6905da26 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -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); diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index b99e4e391..40e204624 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -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]; diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index e2353a807..59adaf393 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -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); diff --git a/src/server/game/Entities/Unit/StatSystem.cpp b/src/server/game/Entities/Unit/StatSystem.cpp index 9bd0c1720..feabf1c3c 100644 --- a/src/server/game/Entities/Unit/StatSystem.cpp +++ b/src/server/game/Entities/Unit/StatSystem.cpp @@ -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; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index 782ef58d3..ab39dc7e1 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -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(cInfo)->dmgschool = SPELL_SCHOOL_NORMAL; } - if (cInfo->baseattacktime == 0) - const_cast(cInfo)->baseattacktime = BASE_ATTACK_TIME; + if (cInfo->BaseAttackTime == 0) + const_cast(cInfo)->BaseAttackTime = BASE_ATTACK_TIME; - if (cInfo->rangeattacktime == 0) - const_cast(cInfo)->rangeattacktime = BASE_ATTACK_TIME; + if (cInfo->RangeAttackTime == 0) + const_cast(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(cInfo)->flags_extra &= CREATURE_FLAG_EXTRA_DB_ALLOWED; } - const_cast(cInfo)->dmg_multiplier *= Creature::_GetDamageMod(cInfo->rank); + const_cast(cInfo)->DamageModifier *= Creature::_GetDamageMod(cInfo->rank); } void ObjectMgr::LoadCreatureAddons() diff --git a/src/server/scripts/Commands/cs_reload.cpp b/src/server/scripts/Commands/cs_reload.cpp index c0bfaeace..422be2f85 100644 --- a/src/server/scripts/Commands/cs_reload.cpp +++ b/src/server/scripts/Commands/cs_reload.cpp @@ -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(); diff --git a/src/server/scripts/Pet/pet_hunter.cpp b/src/server/scripts/Pet/pet_hunter.cpp index f2be4298a..727af3836 100644 --- a/src/server/scripts/Pet/pet_hunter.cpp +++ b/src/server/scripts/Pet/pet_hunter.cpp @@ -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);