mirror of
https://github.com/mangosfour/server.git
synced 2025-12-14 07:37:01 +00:00
[7904] Change creature damage calculation formula.
* Add new creature_template field `dmg_multiplier` * Make attackpower include in creature damage not dependent from attack speed. NOTE: included in sql update recalculation for creature damage related fields only make temporary possible usable values. Real values need revisited by DB devs for correctness. Signed-off-by: VladimirMangos <vladimir@getmangos.com>
This commit is contained in:
parent
0614a9eb75
commit
2fc277fdb6
7 changed files with 21 additions and 9 deletions
|
|
@ -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',
|
||||
|
|
|
|||
9
sql/updates/7904_01_mangos_creature_template.sql
Normal file
9
sql/updates/7904_01_mangos_creature_template.sql
Normal file
|
|
@ -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);
|
||||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
#ifndef __REVISION_NR_H__
|
||||
#define __REVISION_NR_H__
|
||||
#define REVISION_NR "7903"
|
||||
#define REVISION_NR "7904"
|
||||
#endif // __REVISION_NR_H__
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue