eluna-scripts-ornfelt/lua/WowEmulationScriptPack/C++/midsummer_fire_festival.cpp
2024-09-23 07:59:23 +02:00

349 lines
12 KiB
C++
Raw Permalink Blame History

#include "ScriptMgr.h"
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
#include "Spell.h"
#define ACHIEVEMENT_FIRE_DANCING 271
#define ACHIEVEMENT_TORCH_JUGGLER 272
#define SPELL_JUGGLE_TORCH 45638
#define SPELL_TORCHES_CAUGHT 45693
#define GO_RIBBON_POLE 181605
// spell 45418
class spell_fire_dancing : public SpellScriptLoader
{
public:
spell_fire_dancing() : SpellScriptLoader("spell_fire_dancing") { }
class spell_fire_dancingAuraScript : public AuraScript
{
PrepareAuraScript(spell_fire_dancingAuraScript);
void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* caster = GetCaster();
// caster may be not avalible (logged out for example)
if (!caster)
return;
if (GameObject* Cage = caster->FindNearestGameObject(GO_RIBBON_POLE, 10))
if (AchievementEntry const *AchievWC = sAchievementStore.LookupEntry(ACHIEVEMENT_FIRE_DANCING))
caster->ToPlayer()->CompletedAchievement(AchievWC);
}
// function registering
void Register() override
{
OnEffectRemove += AuraEffectRemoveFn(spell_fire_dancingAuraScript::HandleEffectRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_fire_dancingAuraScript();
}
};
// spell 45693 -
class spell_torches_caught : public SpellScriptLoader
{
public:
spell_torches_caught() : SpellScriptLoader("spell_torches_caught") { }
class spell_torches_caughtAuraScript : public AuraScript
{
PrepareAuraScript(spell_torches_caughtAuraScript);
void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit* caster = GetCaster();
// caster may be not avalible (logged out for example)
if (caster)
if(GetStackAmount() >= 39)
if (AchievementEntry const *Achiev = sAchievementStore.LookupEntry(ACHIEVEMENT_TORCH_JUGGLER))
caster->ToPlayer()->CompletedAchievement(Achiev);
}
// function registering
void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_torches_caughtAuraScript::OnStackChange, EFFECT_1, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_torches_caughtAuraScript();
}
};
// spell 45669
class spell_throw_torch : public SpellScriptLoader
{
public:
spell_throw_torch() : SpellScriptLoader("spell_throw_torch") { }
class spell_throw_torch_SpellScript : public SpellScript
{
PrepareSpellScript(spell_throw_torch_SpellScript);
void CheckTarget(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(EFFECT_0);
Unit* caster = GetCaster();
Unit* target = caster->ToPlayer()->GetSelectedUnit();
if(!caster)
return;
if(target && target->GetTypeId() == TYPEID_PLAYER && target != caster)
{
caster->CastSpell(caster, SPELL_TORCHES_CAUGHT, true);
target->CastSpell(caster, SPELL_JUGGLE_TORCH, true);
}
}
void Register() override
{
OnEffectHit += SpellEffectFn(spell_throw_torch_SpellScript::CheckTarget, EFFECT_0, SPELL_EFFECT_TRIGGER_MISSILE);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_throw_torch_SpellScript();
}
};
class item_juggling_torch : public ItemScript
{
public:
item_juggling_torch() : ItemScript("item_juggling_torch") { }
bool OnUse(Player *pPlayer, Item *pItem, SpellCastTargets const& /*targets*/) override
{
pPlayer->CastSpell(pPlayer->GetSelectedUnit(), 45669, true);
pPlayer->DestroyItemCount(pItem->GetEntry(), 1, true);
return true;
}
};
// spell 45819
class spell_throw_torch2 : public SpellScriptLoader
{
public:
spell_throw_torch2() : SpellScriptLoader("spell_throw_torch2") { }
class spell_throw_torch2_SpellScript : public SpellScript
{
PrepareSpellScript(spell_throw_torch2_SpellScript);
void CheckTarget(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(EFFECT_0);
Unit* caster = GetCaster();
if(!caster)
return;
Unit* target = caster->getVictim();
// caster may be not avalible (logged out for example)
if(target)
caster->CastSpell(target, 45669, true);
}
void Register() override
{
OnEffectHit += SpellEffectFn(spell_throw_torch2_SpellScript::CheckTarget, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_throw_torch2_SpellScript();
}
};
// spell 45693 - <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
class spell_hawka : public SpellScriptLoader
{
public:
spell_hawka() : SpellScriptLoader("spell_hawka") { }
class spell_hawkaAuraScript : public AuraScript
{
PrepareAuraScript(spell_hawkaAuraScript);
void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
Unit * target = GetTarget();
// caster may be not avalible (logged out for example)
if (target)
if(GetStackAmount() >= 5)
{
switch (GetId())
{
case 61841:
target->CastSpell(target, 66372, true);
break;
case 61842:
target->CastSpell(target, 66373, true);
break;
case 61843:
target->CastSpell(target, 66375, true);
break;
case 61844:
target->CastSpell(target, 66376, true);
break;
case 61845:
target->CastSpell(target, 66374, true);
break;
default:
break;
}
if(Aura* aura1 = target->GetAura(61841))
if(Aura* aura2 = target->GetAura(61842))
if(Aura* aura3 = target->GetAura(61843))
if(Aura* aura4 = target->GetAura(61844))
if(Aura* aura5 = target->GetAura(61845))
{
if(aura1->GetStackAmount() >= 5 && aura2->GetStackAmount() >= 5 && aura3->GetStackAmount() >= 5 && aura4->GetStackAmount() >= 5 && aura5->GetStackAmount() >= 5)
{
target->CastSpell(target, 61849, true);
aura1->SetStackAmount(0);
aura2->SetStackAmount(0);
aura3->SetStackAmount(0);
aura4->SetStackAmount(0);
aura5->SetStackAmount(0);
}
}
}
}
// function registering
void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_hawkaAuraScript::OnStackChange, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
// function which creates AuraScript
AuraScript* GetAuraScript() const override
{
return new spell_hawkaAuraScript();
}
};
// 62014
class spell_turkey_tracker : public SpellScriptLoader
{
public:
spell_turkey_tracker() : SpellScriptLoader("spell_turkey_tracker") { }
class spell_turkey_trackerAuraScript : public AuraScript
{
PrepareAuraScript(spell_turkey_trackerAuraScript);
void OnStackChange(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetStackAmount() >= 39)
if (Unit* caster = GetCaster())
if (Player* player = caster->ToPlayer())
{
player->CastSpell(player, 62021, true);
GetAura()->Remove();
}
}
void Register() override
{
OnEffectApply += AuraEffectApplyFn(spell_turkey_trackerAuraScript::OnStackChange, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL_OR_REAPPLY_MASK);
}
};
AuraScript* GetAuraScript() const override
{
return new spell_turkey_trackerAuraScript();
}
};
class spell_pass_the_turkey : public SpellScriptLoader
{
public:
spell_pass_the_turkey() : SpellScriptLoader("spell_pass_the_turkey") { }
class spell_pass_the_turkey_SpellScript : public SpellScript
{
PrepareSpellScript(spell_pass_the_turkey_SpellScript);
void Dummy(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(EFFECT_0);
if(Unit* caster = GetCaster())
if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself())
if (AchievementEntry const *Achiev = sAchievementStore.LookupEntry(3579))
if (!player->HasAchieved(Achiev->ID))
player->CompletedAchievement(Achiev);
}
void Register() override
{
OnEffectHit += SpellEffectFn(spell_pass_the_turkey_SpellScript::Dummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_pass_the_turkey_SpellScript();
}
};
class spell_achiev_snow : public SpellScriptLoader
{
public:
spell_achiev_snow() : SpellScriptLoader("spell_achiev_snow") { }
class spell_achiev_snow_SpellScript : public SpellScript
{
PrepareSpellScript(spell_achiev_snow_SpellScript);
void Dummy(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(EFFECT_0);
Unit* target = GetHitUnit();
if(!target || target->GetEntry() != 42928)
return;
if(Unit* caster = GetCaster())
if (Player* player = caster->GetCharmerOrOwnerPlayerOrPlayerItself())
if (AchievementEntry const *Achiev = sAchievementStore.LookupEntry(1255))
player->CompletedAchievement(Achiev);
}
void Register() override
{
OnEffectHitTarget += SpellEffectFn(spell_achiev_snow_SpellScript::Dummy, EFFECT_0, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const override
{
return new spell_achiev_snow_SpellScript();
}
};
void AddSC_midsummer_fire_festival()
{
new spell_fire_dancing;
new spell_torches_caught;
new spell_throw_torch;
new spell_throw_torch2;
new item_juggling_torch;
new spell_hawka;
new spell_turkey_tracker();
new spell_pass_the_turkey();
new spell_achiev_snow();
}