Skip to content

Commit

Permalink
Core/Spells: Rogue Honor Among Thieves
Browse files Browse the repository at this point in the history
  • Loading branch information
ccrs committed Feb 10, 2016
1 parent c6bdfe4 commit 983bbe4
Show file tree
Hide file tree
Showing 4 changed files with 148 additions and 7 deletions.
6 changes: 6 additions & 0 deletions sql/updates/world/2016_99_99_99_world.sql
@@ -0,0 +1,6 @@
-- Honor among thieves
DELETE FROM `spell_script_names` WHERE `scriptname` = 'spell_rog_honor_among_thieves';
DELETE FROM `spell_script_names` WHERE `scriptname` = 'spell_rog_honor_among_thieves_proc';
INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES
(-51698, 'spell_rog_honor_among_thieves'),
(52916, 'spell_rog_honor_among_thieves_proc');
2 changes: 0 additions & 2 deletions src/server/game/Entities/Unit/Unit.cpp
Expand Up @@ -8328,8 +8328,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg
case 52914:
case 52915:
case 52910:
// Honor Among Thieves
case 52916:
{
target = triggeredByAura->GetBase()->GetCaster();
if (!target)
Expand Down
5 changes: 0 additions & 5 deletions src/server/game/Spells/Auras/SpellAuraEffects.cpp
Expand Up @@ -4683,11 +4683,6 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
if (target->GetTypeId() == TYPEID_PLAYER)
target->ToPlayer()->RemoveAmmo(); // not use ammo and not allow use
break;
case 52916: // Honor Among Thieves
if (target->GetTypeId() == TYPEID_PLAYER)
if (Unit* spellTarget = ObjectAccessor::GetUnit(*target, target->ToPlayer()->GetComboTarget()))
target->CastSpell(spellTarget, 51699, true);
break;
case 71563:
if (Aura* newAura = target->AddAura(71564, target))
newAura->SetStackAmount(newAura->GetSpellInfo()->StackAmount);
Expand Down
142 changes: 142 additions & 0 deletions src/server/scripts/Spells/spell_rogue.cpp
Expand Up @@ -41,6 +41,9 @@ enum RogueSpells
SPELL_ROGUE_SHIV_TRIGGERED = 5940,
SPELL_ROGUE_TRICKS_OF_THE_TRADE_DMG_BOOST = 57933,
SPELL_ROGUE_TRICKS_OF_THE_TRADE_PROC = 59628,
SPELL_ROGUE_HONOR_AMONG_THIEVES = 51698,
SPELL_ROGUE_HONOR_AMONG_THIEVES_PROC = 52916,
SPELL_ROGUE_HONOR_AMONG_THIEVES_2 = 51699
};

// 13877, 33735, (check 51211, 65956) - Blade Flurry
Expand Down Expand Up @@ -703,6 +706,143 @@ class spell_rog_tricks_of_the_trade_proc : public SpellScriptLoader
}
};

// 51698,51700,51701 - Honor Among Thieves
class spell_rog_honor_among_thieves : public SpellScriptLoader
{
public:
spell_rog_honor_among_thieves() : SpellScriptLoader("spell_rog_honor_among_thieves") { }

class spell_rog_honor_among_thieves_AuraScript : public AuraScript
{
PrepareAuraScript(spell_rog_honor_among_thieves_AuraScript);

bool CheckProc(ProcEventInfo& /*eventInfo*/)
{
Unit* caster = GetCaster();
if (!caster)
return false;

if (!caster->GetSpellHistory()->HasCooldown(GetSpellInfo()->Effects[EFFECT_0].TriggerSpell))
return true;

return false;
}

void HandleProc(AuraEffect const* aurEff, ProcEventInfo& /*eventInfo*/)
{
PreventDefaultAction();

Unit* caster = GetCaster();
if (!caster)
return;

Unit* target = GetTarget();
target->CastSpell(target, GetSpellInfo()->Effects[EFFECT_0].TriggerSpell, TriggerCastFlags(TRIGGERED_FULL_MASK & ~TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD), nullptr, aurEff, caster->GetGUID());
}

void Register() override
{
DoCheckProc += AuraCheckProcFn(spell_rog_honor_among_thieves_AuraScript::CheckProc);
OnEffectProc += AuraEffectProcFn(spell_rog_honor_among_thieves_AuraScript::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_rog_honor_among_thieves_AuraScript();
}
};

// 52916 - Honor Among Thieves (Proc)
class spell_rog_honor_among_thieves_proc : public SpellScriptLoader
{
public:
spell_rog_honor_among_thieves_proc() : SpellScriptLoader("spell_rog_honor_among_thieves_proc") { }

class spell_rog_honor_among_thieves_proc_SpellScript : public SpellScript
{
PrepareSpellScript(spell_rog_honor_among_thieves_proc_SpellScript);

bool Validate(SpellInfo const* /*spellInfo*/) override
{
if (!sSpellMgr->GetSpellInfo(SPELL_ROGUE_HONOR_AMONG_THIEVES_PROC))
return false;

return true;
}

void FilterTargets(std::list<WorldObject*>& targets)
{
targets.clear();

Unit* target = GetOriginalCaster();
if (!target)
return;

targets.push_back(target);
}

void HandleBeforeHit()
{
Unit* target = GetHitUnit();
if (!target)
return;

/*
* The applied aura has a duration of 8 seconds
* This prevents new applications while its active
* Removing it on each new proc enables the application from different sources (different grouped players)
* and on new procs after the source cooldown is finished (1 second)
*/
if (target->HasAura(GetSpellInfo()->Id))
target->RemoveAura(GetSpellInfo()->Id);
}

void TriggerCooldown()
{
Unit* target = GetHitUnit();
if (!target)
return;

target->GetSpellHistory()->AddCooldown(GetSpellInfo()->Id, 0, std::chrono::seconds(1));
}

void Register() override
{
OnObjectAreaTargetSelect += SpellObjectAreaTargetSelectFn(spell_rog_honor_among_thieves_proc_SpellScript::FilterTargets, EFFECT_0, TARGET_UNIT_CASTER_AREA_PARTY);
BeforeHit += SpellHitFn(spell_rog_honor_among_thieves_proc_SpellScript::HandleBeforeHit);
AfterHit += SpellHitFn(spell_rog_honor_among_thieves_proc_SpellScript::TriggerCooldown);
}
};

SpellScript* GetSpellScript() const override
{
return new spell_rog_honor_among_thieves_proc_SpellScript();
}

class spell_rog_honor_among_thieves_proc_AuraScript : public AuraScript
{
PrepareAuraScript(spell_rog_honor_among_thieves_proc_AuraScript);

void HandleEffectApply(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (Player* player = GetTarget()->ToPlayer())
if (Unit* spellTarget = ObjectAccessor::GetUnit(*player, player->GetTarget()))
player->CastSpell(spellTarget, SPELL_ROGUE_HONOR_AMONG_THIEVES_2, true);
}

void Register() override
{
AfterEffectApply += AuraEffectApplyFn(spell_rog_honor_among_thieves_proc_AuraScript::HandleEffectApply, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};

AuraScript* GetAuraScript() const override
{
return new spell_rog_honor_among_thieves_proc_AuraScript();
}
};

void AddSC_rogue_spell_scripts()
{
new spell_rog_blade_flurry();
Expand All @@ -716,4 +856,6 @@ void AddSC_rogue_spell_scripts()
new spell_rog_shiv();
new spell_rog_tricks_of_the_trade();
new spell_rog_tricks_of_the_trade_proc();
new spell_rog_honor_among_thieves();
new spell_rog_honor_among_thieves_proc();
}

0 comments on commit 983bbe4

Please sign in to comment.