diff --git a/sql/mangos.sql b/sql/mangos.sql index e5b43254d..633bdb683 100644 --- a/sql/mangos.sql +++ b/sql/mangos.sql @@ -23,7 +23,7 @@ DROP TABLE IF EXISTS `db_version`; CREATE TABLE `db_version` ( `version` varchar(120) default NULL, `creature_ai_version` varchar(120) default NULL, - `required_7902_02_mangos_pool_gameobject` bit(1) default NULL + `required_7904_01_mangos_creature_template` bit(1) default NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=FIXED COMMENT='Used DB version notes'; -- @@ -813,6 +813,7 @@ CREATE TABLE `creature_template` ( `maxdmg` float NOT NULL default '0', `dmgschool` tinyint(4) NOT NULL default '0', `attackpower` int(10) unsigned NOT NULL default '0', + `dmg_multiplier` float NOT NULL default '1', `baseattacktime` int(10) unsigned NOT NULL default '0', `rangeattacktime` int(10) unsigned NOT NULL default '0', `unit_flags` int(10) unsigned NOT NULL default '0', diff --git a/sql/updates/7904_01_mangos_creature_template.sql b/sql/updates/7904_01_mangos_creature_template.sql new file mode 100644 index 000000000..0f984b74e --- /dev/null +++ b/sql/updates/7904_01_mangos_creature_template.sql @@ -0,0 +1,9 @@ +ALTER TABLE db_version CHANGE COLUMN required_7902_02_mangos_pool_gameobject required_7904_01_mangos_creature_template bit; + +ALTER TABLE creature_template + ADD COLUMN dmg_multiplier float NOT NULL default '1' AFTER attackpower; + +UPDATE creature_template SET mindmg = round(mindmg + attackpower / 14); +UPDATE creature_template SET maxdmg = round(maxdmg + attackpower / 14); +UPDATE creature_template SET attackpower = round((maxdmg + mindmg) * 0.3); +UPDATE creature_template SET mindmg = round(mindmg * 0.7), maxdmg = round(maxdmg * 0.7); diff --git a/sql/updates/Makefile.am b/sql/updates/Makefile.am index 6e18e6493..62aab9912 100644 --- a/sql/updates/Makefile.am +++ b/sql/updates/Makefile.am @@ -204,6 +204,7 @@ pkgdata_DATA = \ 7902_01_mangos_pool_creature.sql \ 7902_02_mangos_pool_gameobject.sql \ 7903_01_characters_character_pet.sql \ + 7904_01_mangos_creature_template.sql \ README ## Additional files to include when running 'make dist' @@ -388,4 +389,5 @@ EXTRA_DIST = \ 7902_01_mangos_pool_creature.sql \ 7902_02_mangos_pool_gameobject.sql \ 7903_01_characters_character_pet.sql \ + 7904_01_mangos_creature_template.sql \ README diff --git a/src/game/Creature.h b/src/game/Creature.h index 70b1d771c..0d15dfe01 100644 --- a/src/game/Creature.h +++ b/src/game/Creature.h @@ -181,6 +181,7 @@ struct CreatureInfo float maxdmg; uint32 dmgschool; uint32 attackpower; + float dmg_multiplier; uint32 baseattacktime; uint32 rangeattacktime; uint32 unit_flags; // enum UnitFlags mask values diff --git a/src/game/StatSystem.cpp b/src/game/StatSystem.cpp index 849f90575..8ca0ee1a8 100644 --- a/src/game/StatSystem.cpp +++ b/src/game/StatSystem.cpp @@ -796,18 +796,17 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType) UnitMods unitMod = UNIT_MOD_DAMAGE_MAINHAND; - float att_speed = float(GetAttackTime(BASE_ATTACK))/1000.0f; - - float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed; + float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType); float base_pct = GetModifierValue(unitMod, BASE_PCT); float total_value = GetModifierValue(unitMod, TOTAL_VALUE); float total_pct = GetModifierValue(unitMod, TOTAL_PCT); + float dmg_multiplier = GetCreatureInfo()->dmg_multiplier; float weapon_mindamage = GetWeaponDamageRange(BASE_ATTACK, MINDAMAGE); float weapon_maxdamage = GetWeaponDamageRange(BASE_ATTACK, MAXDAMAGE); - float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct ; - float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct ; + float mindamage = ((base_value + weapon_mindamage) * base_pct + total_value) * total_pct * dmg_multiplier; + float maxdamage = ((base_value + weapon_maxdamage) * base_pct + total_value) * total_pct * dmg_multiplier; SetStatFloatValue(UNIT_FIELD_MINDAMAGE, mindamage); SetStatFloatValue(UNIT_FIELD_MAXDAMAGE, maxdamage); diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp index 9cb1dbbaf..768abcee5 100644 --- a/src/shared/Database/SQLStorage.cpp +++ b/src/shared/Database/SQLStorage.cpp @@ -25,8 +25,8 @@ extern DatabasePostgre WorldDatabase; extern DatabaseMysql WorldDatabase; #endif -const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiifflliiis"; -const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiifflliiii"; +const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiifiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiifflliiis"; +const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiifiiiiiiiiiffiiiiiiiiiiiiiiiiiiisiifflliiii"; const char CreatureDataAddonInfofmt[]="iiiiiiis"; const char CreatureModelfmt[]="iffbi"; const char CreatureInfoAddonInfofmt[]="iiiiiiis"; diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index de1b34343..de10281b6 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 "7903" + #define REVISION_NR "7904" #endif // __REVISION_NR_H__