* Backed out changeset c7c6faf26cbd
* A different solution to damage will be implemented * You will need data from your DB provider if you don't have a backup --HG-- branch : trunk
This commit is contained in:
+5
-14
@@ -1107,24 +1107,15 @@ void Creature::SelectLevel(const CreatureInfo *cinfo)
|
||||
|
||||
//damage
|
||||
float damagemod = 1.0f;//_GetDamageMod(rank);
|
||||
float mindmg = stats->GenerateMinDmg(cinfo);
|
||||
float maxdmg = stats->GenerateMaxDmg(cinfo);
|
||||
float attackpower = stats->GenerateAttackPower(cinfo);
|
||||
|
||||
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, mindmg * damagemod);
|
||||
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, maxdmg * damagemod);
|
||||
SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, cinfo->mindmg * damagemod);
|
||||
SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, cinfo->maxdmg * damagemod);
|
||||
|
||||
SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, attackpower * damagemod);
|
||||
SetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE,cinfo->minrangedmg * damagemod);
|
||||
SetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE,cinfo->maxrangedmg * damagemod);
|
||||
|
||||
// ranged damage
|
||||
float minrangeddmg = stats->GenerateRangedDmg(cinfo) / 2.5f;
|
||||
float maxrangeddmg = stats->GenerateRangedDmg(cinfo) - mindmg;
|
||||
float rangedattackpower = (minrangeddmg + maxrangeddmg) / 2 * 0.3;
|
||||
SetModifierValue(UNIT_MOD_ATTACK_POWER, BASE_VALUE, cinfo->attackpower * damagemod);
|
||||
|
||||
SetFloatValue(UNIT_FIELD_MINRANGEDDAMAGE, minrangeddmg * damagemod);
|
||||
SetFloatValue(UNIT_FIELD_MAXRANGEDDAMAGE, maxrangeddmg * damagemod);
|
||||
|
||||
SetModifierValue(UNIT_MOD_ATTACK_POWER_RANGED, BASE_VALUE, rangedattackpower * damagemod);
|
||||
}
|
||||
|
||||
float Creature::_GetHealthMod(int32 Rank)
|
||||
|
||||
+6
-24
@@ -89,7 +89,10 @@ struct CreatureInfo
|
||||
float speed;
|
||||
float scale;
|
||||
uint32 rank;
|
||||
float mindmg;
|
||||
float maxdmg;
|
||||
uint32 dmgschool;
|
||||
uint32 attackpower;
|
||||
float dmg_multiplier;
|
||||
uint32 baseattacktime;
|
||||
uint32 rangeattacktime;
|
||||
@@ -101,6 +104,9 @@ struct CreatureInfo
|
||||
uint32 trainer_spell;
|
||||
uint32 trainer_class;
|
||||
uint32 trainer_race;
|
||||
float minrangedmg;
|
||||
float maxrangedmg;
|
||||
uint32 rangedattackpower;
|
||||
uint32 type; // enum CreatureType values
|
||||
uint32 type_flags; // enum CreatureTypeFlags mask values
|
||||
uint32 lootid;
|
||||
@@ -123,8 +129,6 @@ struct CreatureInfo
|
||||
float ModHealth;
|
||||
float ModMana;
|
||||
float ModArmor;
|
||||
float ModDmg;
|
||||
float ModRangedDmg;
|
||||
bool RacialLeader;
|
||||
uint32 questItems[6];
|
||||
uint32 movementId;
|
||||
@@ -171,8 +175,6 @@ struct TRINITY_DLL_SPEC CreatureBaseStats
|
||||
uint32 BaseHealth[MAX_CREATURE_BASE_HP];
|
||||
uint32 BaseMana;
|
||||
uint32 BaseArmor;
|
||||
uint32 BaseDmg;
|
||||
uint32 BaseRangedDmg;
|
||||
|
||||
// Helpers
|
||||
|
||||
@@ -195,26 +197,6 @@ struct TRINITY_DLL_SPEC CreatureBaseStats
|
||||
return uint32((BaseArmor * info->ModArmor) + 0.5f);
|
||||
}
|
||||
|
||||
uint32 GenerateMinDmg(CreatureInfo const* info) const
|
||||
{
|
||||
return uint32((BaseDmg * (info->baseattacktime / 1000.0f) / 2.5f) * info->ModDmg + 0.5f);
|
||||
}
|
||||
|
||||
uint32 GenerateMaxDmg(CreatureInfo const* info) const
|
||||
{
|
||||
return uint32((BaseDmg * (info->baseattacktime / 1000) - GenerateMinDmg(info)) * info->ModDmg + 0.5f);
|
||||
}
|
||||
|
||||
uint32 GenerateAttackPower(CreatureInfo const* info) const
|
||||
{
|
||||
return uint32(((GenerateMinDmg(info) + GenerateMaxDmg(info)) / 2.0f * 0.3f) * info->ModDmg + 0.5f);
|
||||
}
|
||||
|
||||
uint32 GenerateRangedDmg(CreatureInfo const* info) const
|
||||
{
|
||||
return uint32((BaseDmg * (info->baseattacktime / 1000.0f) * info->ModRangedDmg) + 0.5f);
|
||||
}
|
||||
|
||||
static CreatureBaseStats const* GetBaseStats(uint32 level, uint8 unitClass);
|
||||
};
|
||||
|
||||
|
||||
@@ -8917,7 +8917,7 @@ CreatureBaseStats const* ObjectMgr::GetCreatureBaseStats(uint32 level, uint8 uni
|
||||
|
||||
void ObjectMgr::LoadCreatureClassLevelStats()
|
||||
{
|
||||
QueryResult *result = WorldDatabase.Query("SELECT level, class, basehp0, basehp1, basehp2, basemana, basearmor, basedmg, baserangeddmg FROM creature_classlevelstats");
|
||||
QueryResult *result = WorldDatabase.Query("SELECT level, class, basehp0, basehp1, basehp2, basemana, basearmor FROM creature_classlevelstats");
|
||||
|
||||
if (!result)
|
||||
{
|
||||
@@ -8941,8 +8941,6 @@ void ObjectMgr::LoadCreatureClassLevelStats()
|
||||
stats.BaseHealth[i] = fields[i + 2].GetUInt32();
|
||||
stats.BaseMana = fields[5].GetUInt32();
|
||||
stats.BaseArmor = fields[6].GetUInt32();
|
||||
stats.BaseDmg = fields[7].GetUInt32();
|
||||
stats.BaseRangedDmg = fields[8].GetUInt32();
|
||||
|
||||
if (stats.Level > STRONG_MAX_LEVEL)
|
||||
{
|
||||
@@ -8989,8 +8987,6 @@ void ObjectMgr::LoadCreatureClassLevelStats()
|
||||
CreatureBaseStats new_stats = CreatureBaseStats();
|
||||
|
||||
new_stats.BaseArmor = 1;
|
||||
new_stats.BaseDmg = 1;
|
||||
new_stats.BaseRangedDmg = 1;
|
||||
for (uint8 j = 0; j < MAX_CREATURE_BASE_HP; ++j)
|
||||
new_stats.BaseHealth[j] = 1;
|
||||
new_stats.BaseMana = 0;
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
#include "SharedDefines.h"
|
||||
#include "SpellAuras.h"
|
||||
#include "SpellAuraEffects.h"
|
||||
#include "ObjectMgr.h"
|
||||
|
||||
/*#######################################
|
||||
######## ########
|
||||
@@ -866,8 +865,7 @@ void Creature::UpdateDamagePhysical(WeaponAttackType attType)
|
||||
float weapon_maxdamage = GetWeaponDamageRange(attType, MAXDAMAGE);
|
||||
|
||||
/* difference in AP between current attack power and base value from DB */
|
||||
CreatureBaseStats const* stats = objmgr.GetCreatureBaseStats(getLevel(), GetCreatureInfo()->unit_class);
|
||||
float att_pwr_change = GetTotalAttackPowerValue(attType) - stats->GenerateAttackPower(GetCreatureInfo());
|
||||
float att_pwr_change = GetTotalAttackPowerValue(attType) - GetCreatureInfo()->attackpower;
|
||||
float base_value = GetModifierValue(unitMod, BASE_VALUE) + (att_pwr_change * GetAPMultiplier(attType, false) / 14.0f);
|
||||
float base_pct = GetModifierValue(unitMod, BASE_PCT);
|
||||
float total_value = GetModifierValue(unitMod, TOTAL_VALUE);
|
||||
|
||||
@@ -270,11 +270,8 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
//damage
|
||||
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, cinfo->mindmg);
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, cinfo->maxdmg);
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
}
|
||||
|
||||
@@ -396,18 +393,15 @@ struct TRINITY_DLL_DECL boss_malchezaarAI : public ScriptedAI
|
||||
|
||||
//damage
|
||||
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, 2*cinfo->mindmg);
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, 2*cinfo->maxdmg);
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
|
||||
m_creature->SetBaseWeaponDamage(OFF_ATTACK, MINDAMAGE, mindmg);
|
||||
m_creature->SetBaseWeaponDamage(OFF_ATTACK, MAXDAMAGE, maxdmg);
|
||||
m_creature->SetBaseWeaponDamage(OFF_ATTACK, MINDAMAGE, cinfo->mindmg);
|
||||
m_creature->SetBaseWeaponDamage(OFF_ATTACK, MAXDAMAGE, cinfo->maxdmg);
|
||||
//Sigh, updating only works on main attack, do it manually ....
|
||||
m_creature->SetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, mindmg);
|
||||
m_creature->SetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, maxdmg);
|
||||
m_creature->SetFloatValue(UNIT_FIELD_MINOFFHANDDAMAGE, cinfo->mindmg);
|
||||
m_creature->SetFloatValue(UNIT_FIELD_MAXOFFHANDDAMAGE, cinfo->maxdmg);
|
||||
|
||||
m_creature->SetAttackTime(OFF_ATTACK, (m_creature->GetAttackTime(BASE_ATTACK)*150)/100);
|
||||
}
|
||||
|
||||
@@ -234,11 +234,8 @@ struct TRINITY_DLL_DECL boss_arlokkAI : public ScriptedAI
|
||||
m_creature->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
|
||||
|
||||
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
|
||||
if (Unit* pTarget = SelectUnit(SELECT_TARGET_RANDOM,0))
|
||||
|
||||
@@ -145,11 +145,8 @@ 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();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 35)));
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 35)));
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
DoCast(m_creature->getVictim(), SPELL_ENVOLWINGWEB);
|
||||
|
||||
@@ -188,11 +185,8 @@ struct TRINITY_DLL_DECL boss_marliAI : public ScriptedAI
|
||||
{
|
||||
m_creature->SetDisplayId(15220);
|
||||
const CreatureInfo *cinfo = m_creature->GetCreatureInfo();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 1)));
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 1)));
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
|
||||
PhaseTwo = false;
|
||||
|
||||
@@ -185,11 +185,8 @@ 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();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 40)));
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 40)));
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
DoResetThreat();
|
||||
PhaseTwo = true;
|
||||
|
||||
@@ -148,11 +148,8 @@ 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();
|
||||
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->SetBaseWeaponDamage(BASE_ATTACK, MINDAMAGE, (cinfo->mindmg +((cinfo->mindmg/100) * 25)));
|
||||
m_creature->SetBaseWeaponDamage(BASE_ATTACK, MAXDAMAGE, (cinfo->maxdmg +((cinfo->maxdmg/100) * 25)));
|
||||
m_creature->UpdateDamagePhysical(BASE_ATTACK);
|
||||
DoResetThreat();
|
||||
PhaseTwo = true;
|
||||
|
||||
@@ -1580,7 +1580,6 @@ 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;
|
||||
@@ -1589,9 +1588,8 @@ 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 , attackpower);
|
||||
m_creature->SetStatFloatValue(UNIT_FIELD_RANGED_ATTACK_POWER , Info->attackpower);
|
||||
}
|
||||
|
||||
//Redefined for random target selection:
|
||||
|
||||
@@ -27,8 +27,8 @@ extern DatabasePostgre WorldDatabase;
|
||||
extern DatabaseMysql WorldDatabase;
|
||||
#endif
|
||||
|
||||
const char CreatureInfosrcfmt[]="iiiiiiiiiisssiiiiiiiffiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisiifffffliiiiiiiliiis";
|
||||
const char CreatureInfodstfmt[]="iiiiiiiiiisssiiiiiiiffiifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiisiifffffliiiiiiiliiii";
|
||||
const char CreatureInfosrcfmt[]="iiiiiiiiiisssiiiiiiiffiffiifiiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifffliiiiiiiliiis";
|
||||
const char CreatureInfodstfmt[]="iiiiiiiiiisssiiiiiiiffiffiifiiiiiiiiiiffiiiiiiiiiiiiiiiiiiiiiiiisiifffliiiiiiiliiii";
|
||||
const char CreatureDataAddonInfofmt[]="iiiiiis";
|
||||
const char CreatureModelfmt[]="iffbi";
|
||||
const char CreatureInfoAddonInfofmt[]="iiiiiis";
|
||||
|
||||
Reference in New Issue
Block a user