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