Core/Spells: Refactor CastSpellExtraArgs

* Allow C++20 designated initializers
* Allow precise float values for SPELLVALUE_RADIUS_MOD, SPELLVALUE_CRIT_CHANCE and SPELLVALUE_DURATION_PCT
This commit is contained in:
Shauren
2024-09-12 21:57:16 +02:00
parent d3b05c591c
commit 975e7cc072
9 changed files with 92 additions and 61 deletions

View File

@@ -8793,21 +8793,12 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value)
switch (mod)
{
case SPELLVALUE_RADIUS_MOD:
m_spellValue->RadiusMod = (float)value / 10000;
break;
case SPELLVALUE_MAX_TARGETS:
m_spellValue->MaxAffectedTargets = (uint32)value;
break;
case SPELLVALUE_AURA_STACK:
m_spellValue->AuraStackAmount = uint8(value);
break;
case SPELLVALUE_CRIT_CHANCE:
m_spellValue->CriticalChance = value / 100.0f; // @todo ugly /100 remove when basepoints are double
break;
case SPELLVALUE_DURATION_PCT:
m_spellValue->DurationMul = float(value) / 100.0f;
break;
case SPELLVALUE_DURATION:
m_spellValue->Duration = value;
break;
@@ -8822,6 +8813,24 @@ void Spell::SetSpellValue(SpellValueMod mod, int32 value)
}
}
void Spell::SetSpellValue(SpellValueModFloat mod, float value)
{
switch (mod)
{
case SPELLVALUE_RADIUS_MOD:
m_spellValue->RadiusMod = value;
break;
case SPELLVALUE_CRIT_CHANCE:
m_spellValue->CriticalChance = value;
break;
case SPELLVALUE_DURATION_PCT:
m_spellValue->DurationMul = value / 100.0f;
break;
default:
break;
}
}
void Spell::PrepareTargetProcessing()
{
}
@@ -9662,8 +9671,10 @@ CastSpellExtraArgs& CastSpellExtraArgs::SetTriggeringSpell(Spell const* triggeri
TriggeringSpell = triggeringSpell;
if (triggeringSpell)
{
OriginalCastItemLevel = triggeringSpell->m_castItemLevel;
OriginalCastId = triggeringSpell->m_castId;
if (!OriginalCastItemLevel)
OriginalCastItemLevel = triggeringSpell->m_castItemLevel;
if (!OriginalCastItemLevel)
OriginalCastId = triggeringSpell->m_castId;
}
return *this;
}