Core/Spells: reduce differences between branches

This commit is contained in:
Ovahlord committed 2025-08-02 09:39:15 +02:00
1 parent c158f40455
commit 48c21d7161
8 files changed
+41 -42

No files matched your search

+2 -2
View File
@@ -2951,8 +2951,8 @@ SpellCastResult WorldObject::CastSpell(SpellCastTargets const& targets, uint32 s
}
Spell* spell = new Spell(this, info, args.TriggerFlags, args.OriginalCaster);
for (auto const& pair : args.SpellValueOverrides)
spell->SetSpellValue(pair.first, pair.second);
for (CastSpellExtraArgsInit::SpellValueOverride const& value : args.SpellValueOverrides)
spell->SetSpellValue(value);
spell->m_CastItem = args.CastItem;
+1 -1
View File
@@ -8103,7 +8103,7 @@ void Player::CastItemUseSpell(Item* item, SpellCastTargets const& targets, uint8
Spell* spell = new Spell(this, spellInfo, TRIGGERED_NONE);
spell->m_CastItem = item;
spell->m_cast_count = castId;
spell->SetSpellValue(SPELLVALUE_BASE_POINT0, learning_spell_id);
spell->SetSpellValue({ SPELLVALUE_BASE_POINT0, learning_spell_id });
spell->prepare(targets);
return;
}
@@ -3156,7 +3156,7 @@ void AuraEffect::HandleAuraControlVehicle(AuraApplication const* aurApp, uint8 m
// so this break such spells or most of them.
// Current formula about m_amount: effect base points + dieside - 1
// TO DO: Reasearch more about 0/0 and fix it.
caster->_EnterVehicle(target->GetVehicleKit(), _amount - 1, aurApp);
caster->_EnterVehicle(target->GetVehicleKit(), GetAmount() - 1, aurApp);
}
else
{
+13 -18
View File
@@ -8274,33 +8274,28 @@ SpellCastResult Spell::CanOpenLock(uint32 effIndex, uint32 lockId, SkillType& sk
return SPELL_CAST_OK;
}
void Spell::SetSpellValue(SpellValueMod mod, int32 value)
void Spell::SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const& value)
{
switch (mod)
if (value.Type >= SPELLVALUE_BASE_POINT0 && value.Type < SPELLVALUE_BASE_POINT_END)
{
m_spellValue->EffectBasePoints[value.Type - SPELLVALUE_BASE_POINT0] = value.Value.I;
m_spellValue->CustomBasePointsMask |= 1 << (value.Type - SPELLVALUE_BASE_POINT0);
return;
}
switch (value.Type)
{
case SPELLVALUE_BASE_POINT0:
m_spellValue->EffectBasePoints[0] = value;
m_spellValue->CustomBasePointsMask |= 1 << 0;
break;
case SPELLVALUE_BASE_POINT1:
m_spellValue->EffectBasePoints[1] = value;
m_spellValue->CustomBasePointsMask |= 1 << 1;
break;
case SPELLVALUE_BASE_POINT2:
m_spellValue->EffectBasePoints[2] = value;
m_spellValue->CustomBasePointsMask |= 1 << 2;
break;
case SPELLVALUE_RADIUS_MOD:
m_spellValue->RadiusMod = (float)value / 10000;
m_spellValue->RadiusMod = (float)value.Value.I / 10000;
break;
case SPELLVALUE_MAX_TARGETS:
m_spellValue->MaxAffectedTargets = (uint32)value;
m_spellValue->MaxAffectedTargets = uint32(value.Value.I);
break;
case SPELLVALUE_AURA_STACK:
m_spellValue->AuraStackAmount = uint8(value);
m_spellValue->AuraStackAmount = uint8(value.Value.I);
break;
case SPELLVALUE_DURATION:
m_spellValue->Duration = value;
m_spellValue->Duration = value.Value.I;
break;
default:
break;
+3 -2
View File
@@ -25,6 +25,7 @@
#include "Optional.h"
#include "Position.h"
#include "SharedDefines.h"
#include "SpellDefines.h"
#include <any>
#include <memory>
@@ -69,7 +70,7 @@ enum LootType : uint8;
enum SpellCastTargetFlags : uint32;
enum SpellTargetCheckTypes : uint8;
enum SpellTargetObjectTypes : uint8;
enum SpellValueMod : uint8;
enum SpellValueMod : int32;
enum TriggerCastFlags : uint32;
enum WeaponAttackType : uint8;
@@ -584,7 +585,7 @@ class TC_GAME_API Spell
void CleanupTargetList();
void SetSpellValue(SpellValueMod mod, int32 value);
void SetSpellValue(CastSpellExtraArgsInit::SpellValueOverride const& value);
Spell** m_selfContainer; // pointer to our spell container (if applicable)
+18 -15
View File
@@ -141,12 +141,15 @@ enum class SpellModOp : uint8
constexpr uint8 MAX_SPELLMOD = 32;
enum SpellValueMod : uint8
enum SpellValueMod : int32
{
SPELLVALUE_BASE_POINT0,
SPELLVALUE_BASE_POINT1,
SPELLVALUE_BASE_POINT2,
SPELLVALUE_RADIUS_MOD,
SPELLVALUE_BASE_POINT_END,
SPELLVALUE_RADIUS_MOD = SPELLVALUE_BASE_POINT_END,
SPELLVALUE_MAX_TARGETS,
SPELLVALUE_AURA_STACK,
SPELLVALUE_DURATION
@@ -204,20 +207,20 @@ struct CastSpellExtraArgsInit
AuraEffect const* TriggeringAura = nullptr;
ObjectGuid OriginalCaster = ObjectGuid::Empty;
struct
struct SpellValueOverride
{
friend struct CastSpellExtraArgs;
friend class WorldObject;
SpellValueOverride(SpellValueMod mod, int32 val) : Type(mod) { Value.I = val; }
//SpellValueOverride(SpellValueModFloat mod, float val) : Type(mod) { Value.F = val; }
private:
void AddMod(SpellValueMod mod, int32 val) { data.push_back({ mod, val }); }
auto begin() const { return data.cbegin(); }
auto end() const { return data.cend(); }
std::vector<std::pair<SpellValueMod, int32>> data;
} SpellValueOverrides;
int32 Type;
union
{
float F;
int32 I;
} Value;
};
std::vector<SpellValueOverride> SpellValueOverrides;
std::any CustomArg;
};
@@ -231,7 +234,7 @@ struct TC_GAME_API CastSpellExtraArgs : public CastSpellExtraArgsInit
CastSpellExtraArgs(AuraEffect const* eff) { TriggerFlags = TRIGGERED_FULL_MASK; SetTriggeringAura(eff); }
CastSpellExtraArgs(ObjectGuid const& origCaster) { TriggerFlags = TRIGGERED_FULL_MASK; SetOriginalCaster(origCaster); }
CastSpellExtraArgs(AuraEffect const* eff, ObjectGuid const& origCaster) { TriggerFlags = TRIGGERED_FULL_MASK; SetTriggeringAura(eff); SetOriginalCaster(origCaster); }
CastSpellExtraArgs(SpellValueMod mod, int32 val) { SpellValueOverrides.AddMod(mod, val); }
CastSpellExtraArgs(SpellValueMod mod, int32 val) { SpellValueOverrides.emplace_back(mod, val); }
CastSpellExtraArgs(CastSpellExtraArgsInit&& init) : CastSpellExtraArgsInit(std::move(init)) { SetTriggeringSpell(TriggeringSpell); }
CastSpellExtraArgs(CastSpellExtraArgs const& other);
@@ -247,7 +250,7 @@ struct TC_GAME_API CastSpellExtraArgs : public CastSpellExtraArgsInit
CastSpellExtraArgs& SetTriggeringSpell(Spell const* triggeringSpell) { TriggeringSpell = triggeringSpell; return *this; }
CastSpellExtraArgs& SetTriggeringAura(AuraEffect const* triggeringAura) { TriggeringAura = triggeringAura; return *this; }
CastSpellExtraArgs& SetOriginalCaster(ObjectGuid const& guid) { OriginalCaster = guid; return *this; }
CastSpellExtraArgs& AddSpellMod(SpellValueMod mod, int32 val) { SpellValueOverrides.AddMod(mod, val); return *this; }
CastSpellExtraArgs& AddSpellMod(SpellValueMod mod, int32 val) { SpellValueOverrides.emplace_back(mod, val); return *this; }
CastSpellExtraArgs& AddSpellBP0(int32 val) { return AddSpellMod(SPELLVALUE_BASE_POINT0, val); } // because i don't want to type SPELLVALUE_BASE_POINT0 300 times
CastSpellExtraArgs& SetCustomArg(std::any customArg) { CustomArg = std::move(customArg); return *this; }
};
@@ -647,7 +647,7 @@ class spell_azil_gravity_well_damage_nearby : public SpellScript
{
void SetRadiusMod()
{
GetSpell()->SetSpellValue(SPELLVALUE_RADIUS_MOD, int32(GetCaster()->GetObjectScale() * 10000 * 2 / 3));
GetSpell()->SetSpellValue({ SPELLVALUE_RADIUS_MOD, int32(GetCaster()->GetObjectScale() * 10000 * 2 / 3) });
}
void FilterTargets(std::list<WorldObject*>& unitList)
@@ -694,7 +694,7 @@ class spell_azil_gravity_well_pull : public SpellScript
{
void SetRadiusMod()
{
GetSpell()->SetSpellValue(SPELLVALUE_RADIUS_MOD, int32(GetCaster()->GetObjectScale() * 10000 * 2 / 3));
GetSpell()->SetSpellValue({ SPELLVALUE_RADIUS_MOD, int32(GetCaster()->GetObjectScale() * 10000 * 2 / 3)} );
}
void Register() override
@@ -2756,7 +2756,7 @@ class spell_yogg_saron_sanity : public SpellScriptLoader // 63050
void ModSanityStacks()
{
GetSpell()->SetSpellValue(SPELLVALUE_AURA_STACK, 100);
GetSpell()->SetSpellValue({SPELLVALUE_AURA_STACK, 100 });
}
void Register() override