more work on unit script to increase damage

This commit is contained in:
2024-09-29 02:27:54 -04:00
parent c4be5d44be
commit e4a234b567
2 changed files with 38 additions and 16 deletions

View File

@@ -276,21 +276,21 @@ void MythicPlus::ScaleCreature(uint8 level, Creature* creature, MpMultipliers* m
// creature->SetModifierValue(UNIT_MOD_ATTACK_POWER_RANGED, BASE_VALUE, stats->RangedAttackPower * multipliers->melee);
}
int32 ScaleDamageSpell(SpellInfo const * spellInfo, MpCreatureData* creatureData, Creature* creature, float damageMultiplier)
int32 MythicPlus::ScaleDamageSpell(SpellInfo const * spellInfo, MpCreatureData* creatureData, Creature* creature, float damageMultiplier)
{
if (!spellInfo) {
MpLogger::error("Invalid spell info ScaleDamageSpell()");
return;
return 0;
}
if(!creatureData) {
MpLogger::error("Invalid creature data ScaleDamageSpell()");
return;
return 0;
}
if(!creature) {
MpLogger::error("Invalid creature ScaleDamageSpell()");
return;
return 0;
}
int32 originalLevel = creatureData->originalLevel;
@@ -310,29 +310,31 @@ int32 ScaleDamageSpell(SpellInfo const * spellInfo, MpCreatureData* creatureData
// Apply scaling factor and the set multiplier from the instance data
totalDamage = int32(totalDamage * scalingFactor * damageMultiplier);
MpLogger::debug("Spell damage scaled from for spell New Damage: {}", totalDamage);
return totalDamage;
}
int32 ScaleHealSpell(SpellInfo const * spellInfo, MpCreatureData* creatureData, Creature* creature, Creature* target, float healMultiplier)
int32 MythicPlus::ScaleHealSpell(SpellInfo const * spellInfo, MpCreatureData* creatureData, Creature* creature, Creature* target, float healMultiplier)
{
if (!spellInfo) {
MpLogger::error("Invalid spell info ScaleHealSpell()");
return;
return 0;
}
if(!creatureData) {
MpLogger::error("Invalid creature data ScaleHealSpell()");
return;
return 0;
}
if(!creature) {
MpLogger::error("Invalid creature ScaleHealSpell()");
return;
return 0;
}
if(!target) {
MpLogger::error("Invalid target ScaleHealSpell()");
return;
return 0;
}
int32 originalHp = creatureData->originalStats->BaseHealth[EXPANSION_WRATH_OF_THE_LICH_KING];
@@ -348,8 +350,8 @@ int32 ScaleHealSpell(SpellInfo const * spellInfo, MpCreatureData* creatureData,
}
// Apply scaling factor and the set multiplier from the instance data
MpLogger::debug("Spell healing scaled from for spell New Damage: {}", totalHeal);
return pow((totalHeal / originalHp) * currentHealth, 0.8f) * healMultiplier;
return totalHeal;
}
/**

View File

@@ -77,7 +77,7 @@ public:
healing = modifyIncomingDmgHeal(MythicPlus::UNIT_EVENT_HEAL, target, healer, healing);
}
uint32 modifyIncomingDmgHeal(MythicPlus::MP_UNIT_EVENT_TYPE eventType,Unit* target, Unit* attacker, uint32 damageOrHeal) {
uint32 modifyIncomingDmgHeal(MythicPlus::MP_UNIT_EVENT_TYPE eventType,Unit* target, Unit* attacker, uint32 damageOrHeal, SpellInfo const* spellInfo = nullptr) {
if (!target && !attacker) {
return damageOrHeal;
}
@@ -114,7 +114,9 @@ public:
case MythicPlus::UNIT_EVENT_SPELL:
eventName = "Spell";
break;
case MythicPlus::UNIT_EVENT_HOT:
eventName = "HOT";
break;
}
MpLogger::debug("Incoming Event Type ({}): {} hits {} before mod: {}", eventName, attacker->GetName(), target->GetName(), damageOrHeal);
@@ -138,24 +140,42 @@ public:
case MythicPlus::UNIT_EVENT_DOT:
case MythicPlus::UNIT_EVENT_SPELL:
if(creature->IsDungeonBoss()) {
alteredDmgHeal = damageOrHeal * instanceData->boss.spell;
if(spellInfo) {
alteredDmgHeal = sMythicPlus->ScaleDamageSpell(spellInfo, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, instanceData->boss.spell);
} else {
alteredDmgHeal = damageOrHeal * instanceData->boss.spell;
}
} else {
alteredDmgHeal = damageOrHeal * instanceData->creature.spell;
if(spellInfo) {
alteredDmgHeal = sMythicPlus->ScaleDamageSpell(spellInfo, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, instanceData->creature.spell);
} else {
alteredDmgHeal = damageOrHeal * instanceData->creature.spell;
}
}
MpLogger::debug("Incoming spell or dot New Damage: {}({}) {} hits {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName());
break;
}
}
/**
* @TODO: Add more granular control over the scaling of healing spells
*/
if(sMythicPlus->EligibleHealTarget(target) && (eventType == MythicPlus::UNIT_EVENT_HEAL || eventType == MythicPlus::UNIT_EVENT_HOT)) {
isHeal = true;
if(creature->IsDungeonBoss()) {
alteredDmgHeal = damageOrHeal * instanceData->boss.spell;
if(spellInfo) {
alteredDmgHeal = sMythicPlus->ScaleHealSpell(spellInfo, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, attacker->ToCreature(), instanceData->boss.spell);
} else {
alteredDmgHeal = damageOrHeal * instanceData->boss.spell;
}
} else {
alteredDmgHeal = damageOrHeal * instanceData->creature.spell;
if(spellInfo) {
alteredDmgHeal = sMythicPlus->ScaleHealSpell(spellInfo, sMpDataStore->GetCreatureData(attacker->GetGUID()), creature, attacker->ToCreature(), instanceData->creature.spell);
} else {
alteredDmgHeal = damageOrHeal * instanceData->creature.spell;
}
}
MpLogger::debug("Incoming heal: {}({}) {} hits {}", alteredDmgHeal, damageOrHeal, attacker->GetName(), target->GetName());
}