From 2572e9ef8eacdd5944e8a63cf313c8a3c9ac7faf Mon Sep 17 00:00:00 2001 From: win32 <> Date: Thu, 21 Jan 2010 13:48:27 +0200 Subject: * Add support for basedmg and baserangeddmg values in creature_classlevelstats. * Remove mindmg, maxdmg, attackpower and ranged field in creature_template and add Dmg_Mod, Rangeddmg_Mod field. --HG-- branch : trunk --- .../karazhan/boss_prince_malchezaar.cpp | 22 ++++++++++++++-------- .../eastern_kingdoms/zulgurub/boss_arlokk.cpp | 7 +++++-- .../eastern_kingdoms/zulgurub/boss_marli.cpp | 14 ++++++++++---- .../eastern_kingdoms/zulgurub/boss_thekal.cpp | 7 +++++-- .../eastern_kingdoms/zulgurub/boss_venoxis.cpp | 7 +++++-- src/scripts/world/npcs_special.cpp | 4 +++- 6 files changed, 42 insertions(+), 19 deletions(-) (limited to 'src/scripts') diff --git a/src/scripts/eastern_kingdoms/karazhan/boss_prince_malchezaar.cpp b/src/scripts/eastern_kingdoms/karazhan/boss_prince_malchezaar.cpp index dcba83ab249..6a40cecacb6 100644 --- a/src/scripts/eastern_kingdoms/karazhan/boss_prince_malchezaar.cpp +++ b/src/scripts/eastern_kingdoms/karazhan/boss_prince_malchezaar.cpp @@ -270,8 +270,11 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI //damage const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, cinfo->mindmg); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, cinfo->maxdmg); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, mindmg); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxdmg); m_creature->UpdateDamagePhysical(BASE_ATTACK); } @@ -393,15 +396,18 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI //damage const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, 2*cinfo->mindmg); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, 2*cinfo->maxdmg); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, 2 * mindmg); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, 2 * maxdmg); m_creature->UpdateDamagePhysical(BASE_ATTACK); - m_creature->SetBaseWeaponDamage(OFF_ATTACK, MINDAMAGE, cinfo->mindmg); - m_creature->SetBaseWeaponDamage(OFF_ATTACK, MAXDAMAGE, cinfo->maxdmg); + m_creature->SetBaseWeaponDamage(OFF_ATTACK, MINDAMAGE, mindmg); + m_creature->SetBaseWeaponDamage(OFF_ATTACK, MAXDAMAGE, maxdmg); //Sigh, updating only works on main attack, do it manually .... - m_creature->SetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, cinfo->mindmg); - m_creature->SetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, cinfo->maxdmg); + m_creature->SetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, mindmg); + m_creature->SetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, maxdmg); m_creature->SetAttackTime(OFF_ATTACK, (m_creature->GetAttackTime(BASE_ATTACK)*150)/100); } diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp index 7cea97bb7c2..05ab5c81447 100644 --- a/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp +++ b/src/scripts/eastern_kingdoms/zulgurub/boss_arlokk.cpp @@ -234,8 +234,11 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (mindmg +((mindmg/100) * 35))); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (maxdmg +((maxdmg/100) * 35))); m_creature->UpdateDamagePhysical(BASE_ATTACK); if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0)) diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp index e4b12ffb972..e240ae5db9a 100644 --- a/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp +++ b/src/scripts/eastern_kingdoms/zulgurub/boss_marli.cpp @@ -145,8 +145,11 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI DoScriptText(SAY_TRANSFORM, m_creature); DoCast(m_creature, SPELL_SPIDER_FORM); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35))); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35))); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (mindmg +((mindmg/100) * 35))); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (maxdmg +((maxdmg/100) * 35))); m_creature->UpdateDamagePhysical(BASE_ATTACK); DoCast(m_creature->getVictim(), SPELL_ENVOLWINGWEB); @@ -185,8 +188,11 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI { m_creature->SetDisplayId(15220); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1))); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1))); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (mindmg +((mindmg/100) * 1))); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (maxdmg +((maxdmg/100) * 1))); m_creature->UpdateDamagePhysical(BASE_ATTACK); PhaseTwo = false; diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_thekal.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_thekal.cpp index e7002673cd3..3f8b49c8970 100644 --- a/src/scripts/eastern_kingdoms/zulgurub/boss_thekal.cpp +++ b/src/scripts/eastern_kingdoms/zulgurub/boss_thekal.cpp @@ -185,8 +185,11 @@ struct TRINITY_DLL_DECL boss_thekalAI : public ScriptedAI m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE); m_creature->SetHealth(int(m_creature->GetMaxHealth()*1.0)); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 40))); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 40))); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (mindmg +((mindmg/100) * 40))); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (maxdmg +((maxdmg/100) * 40))); m_creature->UpdateDamagePhysical(BASE_ATTACK); DoResetThreat(); PhaseTwo = true; diff --git a/src/scripts/eastern_kingdoms/zulgurub/boss_venoxis.cpp b/src/scripts/eastern_kingdoms/zulgurub/boss_venoxis.cpp index 3b094b74b1e..5ea03ab4615 100644 --- a/src/scripts/eastern_kingdoms/zulgurub/boss_venoxis.cpp +++ b/src/scripts/eastern_kingdoms/zulgurub/boss_venoxis.cpp @@ -148,8 +148,11 @@ struct TRINITY_DLL_DECL boss_venoxisAI : public ScriptedAI DoCast(m_creature, SPELL_SNAKE_FORM); m_creature->SetFloatValue(OBJECT_FIELD_SCALE_X, 2.00f); const CreatureInfo *cinfo = m_creature->GetCreatureInfo(); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 25))); - m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 25))); + const CreatureBaseStats *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), cinfo->unit_class); + float mindmg = stats->GenerateMinDmg(cinfo); + float maxdmg = stats->GenerateMaxDmg(cinfo); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (mindmg +((mindmg/100) * 25))); + m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (maxdmg +((maxdmg/100) * 25))); m_creature->UpdateDamagePhysical(BASE_ATTACK); DoResetThreat(); PhaseTwo = true; diff --git a/src/scripts/world/npcs_special.cpp b/src/scripts/world/npcs_special.cpp index a57507f9c6a..93e68d074e1 100644 --- a/src/scripts/world/npcs_special.cpp +++ b/src/scripts/world/npcs_special.cpp @@ -1580,6 +1580,7 @@ struct TRINITY_DLL_DECL npc_snake_trap_serpentsAI : public ScriptedAI SpellTimer = 0; CreatureInfo const *Info = m_creature->GetCreatureInfo(); + CreatureBaseStats const *stats = ((CreatureBaseStats*)m_creature)->GetBaseStats(m_creature->getLevel(), Info->unit_class); if (Info->Entry == C_VIPER) IsViper = true; @@ -1588,8 +1589,9 @@ struct TRINITY_DLL_DECL npc_snake_trap_serpentsAI : public ScriptedAI //Add delta to make them not all hit the same time uint32 delta = (rand() % 7) * 100; + float attackpower = stats->GenerateAttackPower(Info); m_creature->SetStatFloatValue(UNIT_FIELD_BASEATTACKTIME, Info->baseattacktime + delta); - m_creature->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER , Info->attackpower); + m_creature->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER , attackpower); } //Redefined for random target selection: -- cgit v1.2.3