Core/Spells: reduce differences between branches
This commit is contained in:
1 parent
c158f40455
commit
48c21d7161
8 files changed
+41
-42
No files matched your search
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in new issue
Block a user