aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/mangos.sql3
-rw-r--r--sql/updates/7904_01_mangos_creature_template.sql9
-rw-r--r--src/game/Creature.h1
-rw-r--r--src/game/StatSystem.cpp10
-rw-r--r--src/shared/Database/SQLStorage.cpp4
5 files changed, 18 insertions, 9 deletions
diff --git a/sql/mangos.sql b/sql/mangos.sql
index f983e4b070b..fe3869cfa46 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';
--
@@ -812,6 +812,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 00000000000..0f984b74e78
--- /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/src/game/Creature.h b/src/game/Creature.h
index 9c94fa64423..eaf76942e58 100644
--- a/src/game/Creature.h
+++ b/src/game/Creature.h
@@ -200,6 +200,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 4cf93760957..87bd8a46825 100644
--- a/src/game/StatSystem.cpp
+++ b/src/game/StatSystem.cpp
@@ -842,16 +842,14 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType)
float weapon_mindamage = GetWeaponDamageRange(attType, MINDAMAGE);
float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE);
- //This formula is not correct
- //The correct one is (Damage_from_AttackPower + Base_Weapon_Damage) * Multiplier
- //We do not know the multiplier, so we assume attack power is about 25% damage
- //float base_value = GetModifierValue(unitMod, BASE_VALUE) + GetTotalAttackPowerValue(attType)/ 14.0f * att_speed;
float base_value = GetModifierValue(unitMod, BASE_VALUE)
+ (weapon_mindamage + weapon_maxdamage) / 6
* GetTotalAttackPowerValue(attType) / (getLevel() * 5);
+ //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;
if(!CanUseAttackType(attType))
{
@@ -859,8 +857,8 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType)
weapon_maxdamage = 0;
}
- 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;
switch(attType)
{
diff --git a/src/shared/Database/SQLStorage.cpp b/src/shared/Database/SQLStorage.cpp
index 67091174c77..8274ccb0cd9 100644
--- a/src/shared/Database/SQLStorage.cpp
+++ b/src/shared/Database/SQLStorage.cpp
@@ -27,8 +27,8 @@ extern DatabasePostgre WorldDatabase;
extern DatabaseMysql WorldDatabase;
#endif
-const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiis";
-const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiiiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiii";
+const char CreatureInfosrcfmt[]="iiiiiisssiiiiiiiiiiffiffiifiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiis";
+const char CreatureInfodstfmt[]="iiiiiisssiiiiiiiiiiffiffiifiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifflliiii";
const char CreatureDataAddonInfofmt[]="iiiiiiis";
const char CreatureModelfmt[]="iffbi";
const char CreatureInfoAddonInfofmt[]="iiiiiiis";