160849fec1
Port From (https://github.com/TrinityCore/TrinityCore/commit/622eed752bc69fc4c34bb568d96d51913258f852)
479 lines
18 KiB
C#
479 lines
18 KiB
C#
// Copyright (c) CypherCore <http://github.com/CypherCore> All rights reserved.
|
|
// Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information.
|
|
|
|
using Framework.Constants;
|
|
using Game.Entities;
|
|
using Game.Scripting;
|
|
using Game.Spells;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Scripts.Events.PilgrimsBounty
|
|
{
|
|
struct SpellIds
|
|
{
|
|
//Pilgrims Bounty
|
|
public const uint WellFedApTrigger = 65414;
|
|
public const uint WellFedZmTrigger = 65412;
|
|
public const uint WellFedHitTrigger = 65416;
|
|
public const uint WellFedHasteTrigger = 65410;
|
|
public const uint WellFedSpiritTrigger = 65415;
|
|
|
|
//FeastOnSpells
|
|
//Feastonspells
|
|
public const uint FeastOnTurkey = 61784;
|
|
public const uint FeastOnCranberries = 61785;
|
|
public const uint FeastOnSweetPotatoes = 61786;
|
|
public const uint FeastOnPie = 61787;
|
|
public const uint FeastOnStuffing = 61788;
|
|
public const uint CranberryHelpins = 61841;
|
|
public const uint TurkeyHelpins = 61842;
|
|
public const uint StuffingHelpins = 61843;
|
|
public const uint SweetPotatoHelpins = 61844;
|
|
public const uint PieHelpins = 61845;
|
|
public const uint OnPlateEatVisual = 61826;
|
|
|
|
//Theturkinator
|
|
public const uint KillCounterVisual = 62015;
|
|
public const uint KillCounterVisualMax = 62021;
|
|
|
|
//Spiritofsharing
|
|
public const uint TheSpiritOfSharing = 61849;
|
|
|
|
//Bountifultablemisc
|
|
public const uint OnPlateTurkey = 61928;
|
|
public const uint OnPlateCranberries = 61925;
|
|
public const uint OnPlateStuffing = 61927;
|
|
public const uint OnPlateSweetPotatoes = 61929;
|
|
public const uint OnPlatePie = 61926;
|
|
public const uint PassTheTurkey = 66373;
|
|
public const uint PassTheCranberries = 66372;
|
|
public const uint PassTheStuffing = 66375;
|
|
public const uint PassTheSweetPotatoes = 66376;
|
|
public const uint PassThePie = 66374;
|
|
public const uint OnPlateVisualPie = 61825;
|
|
public const uint OnPlateVisualCranberries = 61821;
|
|
public const uint OnPlateVisualPotatoes = 61824;
|
|
public const uint OnPlateVisualTurkey = 61822;
|
|
public const uint OnPlateVisualStuffing = 61823;
|
|
public const uint AServingOfCranberriesPlate = 61833;
|
|
public const uint AServingOfTurkeyPlate = 61835;
|
|
public const uint AServingOfStuffingPlate = 61836;
|
|
public const uint AServingOfSweetPotatoesPlate = 61837;
|
|
public const uint AServingOfPiePlate = 61838;
|
|
public const uint AServingOfCranberriesChair = 61804;
|
|
public const uint AServingOfTurkeyChair = 61807;
|
|
public const uint AServingOfStuffingChair = 61806;
|
|
public const uint AServingOfSweetPotatoesChair = 61808;
|
|
public const uint AServingOfPieChair = 61805;
|
|
}
|
|
|
|
struct CreatureIds
|
|
{
|
|
//BountifulTableMisc
|
|
public const uint BountifulTable = 32823;
|
|
}
|
|
|
|
struct EmoteIds
|
|
{
|
|
//TheTurkinator
|
|
public const uint TurkeyHunter = 0;
|
|
public const uint TurkeyDomination = 1;
|
|
public const uint TurkeySlaughter = 2;
|
|
public const uint TurkeyTriumph = 3;
|
|
}
|
|
|
|
struct SeatIds
|
|
{
|
|
//BountifulTableMisc
|
|
public const sbyte Player = 0;
|
|
public const sbyte PlateHolder = 6;
|
|
}
|
|
|
|
[Script("spell_gen_slow_roasted_turkey", SpellIds.WellFedApTrigger)]
|
|
[Script("spell_gen_cranberry_chutney", SpellIds.WellFedZmTrigger)]
|
|
[Script("spell_gen_spice_bread_stuffing", SpellIds.WellFedHitTrigger)]
|
|
[Script("spell_gen_pumpkin_pie", SpellIds.WellFedSpiritTrigger)]
|
|
[Script("spell_gen_candied_sweet_potato", SpellIds.WellFedHasteTrigger)]
|
|
class spell_pilgrims_bounty_buff_food : AuraScript
|
|
{
|
|
public spell_pilgrims_bounty_buff_food(uint triggeredSpellId)
|
|
{
|
|
_triggeredSpellId = triggeredSpellId;
|
|
_handled = false;
|
|
}
|
|
|
|
void HandleTriggerSpell(AuraEffect aurEff)
|
|
{
|
|
PreventDefaultAction();
|
|
if (_handled)
|
|
return;
|
|
|
|
_handled = true;
|
|
GetTarget().CastSpell(GetTarget(), _triggeredSpellId, true);
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectPeriodic.Add(new EffectPeriodicHandler(HandleTriggerSpell, 2, AuraType.PeriodicTriggerSpell));
|
|
}
|
|
|
|
readonly uint _triggeredSpellId;
|
|
|
|
bool _handled;
|
|
}
|
|
|
|
/* 61784 - Feast On Turkey
|
|
* 61785 - Feast On Cranberries
|
|
* 61786 - Feast On Sweet Potatoes
|
|
* 61787 - Feast On Pie
|
|
* 61788 - Feast On Stuffing */
|
|
[Script]
|
|
class spell_pilgrims_bounty_feast_on_SpellScript : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spellInfo)
|
|
{
|
|
return ValidateSpellEffect(spellInfo.Id, 0) && ValidateSpellEffect((uint)spellInfo.GetEffect(0).CalcValue(), 0);
|
|
}
|
|
|
|
void HandleDummy(uint effIndex)
|
|
{
|
|
Unit caster = GetCaster();
|
|
|
|
uint _spellId = 0;
|
|
switch (GetSpellInfo().Id)
|
|
{
|
|
case SpellIds.FeastOnTurkey:
|
|
_spellId = SpellIds.TurkeyHelpins;
|
|
break;
|
|
case SpellIds.FeastOnCranberries:
|
|
_spellId = SpellIds.CranberryHelpins;
|
|
break;
|
|
case SpellIds.FeastOnSweetPotatoes:
|
|
_spellId = SpellIds.SweetPotatoHelpins;
|
|
break;
|
|
case SpellIds.FeastOnPie:
|
|
_spellId = SpellIds.PieHelpins;
|
|
break;
|
|
case SpellIds.FeastOnStuffing:
|
|
_spellId = SpellIds.StuffingHelpins;
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
|
|
Vehicle vehicle = caster.GetVehicleKit();
|
|
if (vehicle != null)
|
|
{
|
|
Unit target = vehicle.GetPassenger(0);
|
|
if (target != null)
|
|
{
|
|
Player player = target.ToPlayer();
|
|
if (player != null)
|
|
{
|
|
player.CastSpell(player, SpellIds.OnPlateEatVisual, true);
|
|
caster.CastSpell(player, _spellId, new CastSpellExtraArgs(TriggerCastFlags.FullMask)
|
|
.SetOriginalCaster(player.GetGUID()));
|
|
}
|
|
}
|
|
}
|
|
|
|
Aura aura = caster.GetAura((uint)GetEffectValue());
|
|
if (aura != null)
|
|
{
|
|
if (aura.GetStackAmount() == 1)
|
|
caster.RemoveAurasDueToSpell((uint)aura.GetSpellInfo().GetEffect(0).CalcValue());
|
|
aura.ModStackAmount(-1);
|
|
}
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new EffectHandler(HandleDummy, 0, SpellEffectName.Dummy));
|
|
}
|
|
}
|
|
|
|
[Script] // 62014 - Turkey Tracker
|
|
class spell_pilgrims_bounty_turkey_tracker_SpellScript : SpellScript
|
|
{
|
|
public override bool Validate(SpellInfo spell)
|
|
{
|
|
return ValidateSpellInfo(SpellIds.KillCounterVisual, SpellIds.KillCounterVisualMax);
|
|
}
|
|
|
|
void HandleScript(uint effIndex)
|
|
{
|
|
Creature caster = GetCaster().ToCreature();
|
|
Unit target = GetHitUnit();
|
|
|
|
if (target == null || caster == null)
|
|
return;
|
|
|
|
if (target.HasAura(SpellIds.KillCounterVisualMax))
|
|
return;
|
|
|
|
Aura aura = target.GetAura(GetSpellInfo().Id);
|
|
if (aura != null)
|
|
{
|
|
switch (aura.GetStackAmount())
|
|
{
|
|
case 10:
|
|
caster.GetAI().Talk(EmoteIds.TurkeyHunter, target);
|
|
break;
|
|
case 20:
|
|
caster.GetAI().Talk(EmoteIds.TurkeyDomination, target);
|
|
break;
|
|
case 30:
|
|
caster.GetAI().Talk(EmoteIds.TurkeySlaughter, target);
|
|
break;
|
|
case 40:
|
|
caster.GetAI().Talk(EmoteIds.TurkeyTriumph, target);
|
|
target.CastSpell(target, SpellIds.KillCounterVisualMax, true);
|
|
target.RemoveAurasDueToSpell(GetSpellInfo().Id);
|
|
break;
|
|
default:
|
|
return;
|
|
}
|
|
target.CastSpell(target, SpellIds.KillCounterVisual, true);
|
|
}
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new EffectHandler(HandleScript, 1, SpellEffectName.ScriptEffect));
|
|
}
|
|
}
|
|
|
|
[Script("spell_pilgrims_bounty_well_fed_turkey", SpellIds.WellFedApTrigger)]
|
|
[Script("spell_pilgrims_bounty_well_fed_cranberry", SpellIds.WellFedZmTrigger)]
|
|
[Script("spell_pilgrims_bounty_well_fed_stuffing", SpellIds.WellFedHitTrigger)]
|
|
[Script("spell_pilgrims_bounty_well_fed_sweet_potatoes", SpellIds.WellFedHasteTrigger)]
|
|
[Script("spell_pilgrims_bounty_well_fed_pie", SpellIds.WellFedSpiritTrigger)]
|
|
class spell_pilgrims_bounty_well_fed_SpellScript : SpellScript
|
|
{
|
|
uint _triggeredSpellId;
|
|
|
|
public spell_pilgrims_bounty_well_fed_SpellScript(uint triggeredSpellId)
|
|
{
|
|
_triggeredSpellId = triggeredSpellId;
|
|
}
|
|
|
|
public override bool Validate(SpellInfo spell)
|
|
{
|
|
return ValidateSpellInfo(_triggeredSpellId);
|
|
}
|
|
|
|
void HandleScript(uint effIndex)
|
|
{
|
|
PreventHitDefaultEffect(effIndex);
|
|
Player target = GetHitPlayer();
|
|
if (target == null)
|
|
return;
|
|
|
|
Aura aura = target.GetAura(GetSpellInfo().Id);
|
|
if (aura != null)
|
|
{
|
|
if (aura.GetStackAmount() == 5)
|
|
target.CastSpell(target, _triggeredSpellId, true);
|
|
}
|
|
|
|
Aura turkey = target.GetAura(SpellIds.TurkeyHelpins);
|
|
Aura cranberies = target.GetAura(SpellIds.CranberryHelpins);
|
|
Aura stuffing = target.GetAura(SpellIds.StuffingHelpins);
|
|
Aura sweetPotatoes = target.GetAura(SpellIds.SweetPotatoHelpins);
|
|
Aura pie = target.GetAura(SpellIds.PieHelpins);
|
|
|
|
if ((turkey != null && turkey.GetStackAmount() == 5) && (cranberies != null && cranberies.GetStackAmount() == 5) && (stuffing != null && stuffing.GetStackAmount() == 5)
|
|
&& (sweetPotatoes != null && sweetPotatoes.GetStackAmount() == 5) && (pie != null && pie.GetStackAmount() == 5))
|
|
{
|
|
target.CastSpell(target, SpellIds.TheSpiritOfSharing, true);
|
|
target.RemoveAurasDueToSpell(SpellIds.TurkeyHelpins);
|
|
target.RemoveAurasDueToSpell(SpellIds.CranberryHelpins);
|
|
target.RemoveAurasDueToSpell(SpellIds.StuffingHelpins);
|
|
target.RemoveAurasDueToSpell(SpellIds.SweetPotatoHelpins);
|
|
target.RemoveAurasDueToSpell(SpellIds.PieHelpins);
|
|
}
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new EffectHandler(HandleScript, 1, SpellEffectName.ScriptEffect));
|
|
}
|
|
}
|
|
|
|
[Script("spell_pilgrims_bounty_on_plate_turkey", SpellIds.OnPlateTurkey, SpellIds.PassTheTurkey, SpellIds.OnPlateVisualTurkey, SpellIds.AServingOfTurkeyChair)]
|
|
[Script("spell_pilgrims_bounty_on_plate_cranberries", SpellIds.OnPlateCranberries, SpellIds.PassTheCranberries, SpellIds.OnPlateVisualCranberries, SpellIds.AServingOfCranberriesChair)]
|
|
[Script("spell_pilgrims_bounty_on_plate_stuffing", SpellIds.OnPlateStuffing, SpellIds.PassTheStuffing, SpellIds.OnPlateVisualStuffing, SpellIds.AServingOfStuffingChair)]
|
|
[Script("spell_pilgrims_bounty_on_plate_sweet_potatoes", SpellIds.OnPlateSweetPotatoes, SpellIds.PassTheSweetPotatoes, SpellIds.OnPlateVisualPotatoes, SpellIds.AServingOfSweetPotatoesChair)]
|
|
[Script("spell_pilgrims_bounty_on_plate_pie", SpellIds.OnPlatePie, SpellIds.PassThePie, SpellIds.OnPlateVisualPie, SpellIds.AServingOfPieChair)]
|
|
class spell_pilgrims_bounty_on_plate_SpellScript : SpellScript
|
|
{
|
|
uint _triggeredSpellId1;
|
|
uint _triggeredSpellId2;
|
|
uint _triggeredSpellId3;
|
|
uint _triggeredSpellId4;
|
|
|
|
public spell_pilgrims_bounty_on_plate_SpellScript(uint triggeredSpellId1, uint triggeredSpellId2, uint triggeredSpellId3, uint triggeredSpellId4)
|
|
{
|
|
_triggeredSpellId1 = triggeredSpellId1;
|
|
_triggeredSpellId2 = triggeredSpellId2;
|
|
_triggeredSpellId3 = triggeredSpellId3;
|
|
_triggeredSpellId4 = triggeredSpellId4;
|
|
}
|
|
|
|
public override bool Validate(SpellInfo spell)
|
|
{
|
|
return ValidateSpellInfo(_triggeredSpellId1, _triggeredSpellId2, _triggeredSpellId3, _triggeredSpellId4);
|
|
}
|
|
|
|
Vehicle GetTable(Unit target)
|
|
{
|
|
if (target.IsPlayer())
|
|
{
|
|
Unit vehBase = target.GetVehicleBase();
|
|
if (vehBase != null)
|
|
{
|
|
Vehicle table = vehBase.GetVehicle();
|
|
if (table != null)
|
|
if (table.GetCreatureEntry() == CreatureIds.BountifulTable)
|
|
return table;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
Vehicle veh = target.GetVehicle();
|
|
if (veh != null)
|
|
if (veh.GetCreatureEntry() == CreatureIds.BountifulTable)
|
|
return veh;
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
Unit GetPlateInSeat(Vehicle table, sbyte seat)
|
|
{
|
|
Unit holderUnit = table.GetPassenger(SeatIds.PlateHolder);
|
|
if (holderUnit != null)
|
|
{
|
|
Vehicle holder = holderUnit.GetVehicleKit();
|
|
if (holder != null)
|
|
return holder.GetPassenger(seat);
|
|
}
|
|
|
|
return null;
|
|
}
|
|
|
|
void HandleDummy(uint effIndex)
|
|
{
|
|
Unit caster = GetCaster();
|
|
Unit target = GetHitUnit();
|
|
if (!target || caster == target)
|
|
return;
|
|
|
|
Vehicle table = GetTable(caster);
|
|
if (!table || table != GetTable(target))
|
|
return;
|
|
|
|
Vehicle casterChair = caster.GetVehicleKit();
|
|
if (casterChair != null)
|
|
{
|
|
Unit casterPlr = casterChair.GetPassenger(SeatIds.Player);
|
|
if (casterPlr != null)
|
|
{
|
|
if (casterPlr == target)
|
|
return;
|
|
|
|
casterPlr.CastSpell(casterPlr, _triggeredSpellId2, true); //Credit for Sharing is Caring(always)
|
|
|
|
sbyte seat = target.GetTransSeat();
|
|
if (target.IsPlayer() && target.GetVehicleBase())
|
|
seat = target.GetVehicleBase().GetTransSeat();
|
|
|
|
Unit plate = GetPlateInSeat(table, seat);
|
|
if (plate != null)
|
|
{
|
|
if (target.IsPlayer()) //Food Fight case
|
|
{
|
|
casterPlr.CastSpell(target, _triggeredSpellId1, true);
|
|
caster.CastSpell(target.GetVehicleBase(), _triggeredSpellId4, true); //CanEat-chair(always)
|
|
}
|
|
else
|
|
{
|
|
casterPlr.CastSpell(plate, _triggeredSpellId3, true); //Food Visual on plate
|
|
caster.CastSpell(target, _triggeredSpellId4, true); //CanEat-chair(always)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
OnEffectHitTarget.Add(new EffectHandler(HandleDummy, 0, SpellEffectName.Dummy));
|
|
}
|
|
}
|
|
|
|
[Script("spell_pilgrims_bounty_a_serving_of_cranberries", SpellIds.AServingOfCranberriesPlate)]
|
|
[Script("spell_pilgrims_bounty_a_serving_of_turkey", SpellIds.AServingOfTurkeyPlate)]
|
|
[Script("spell_pilgrims_bounty_a_serving_of_stuffing", SpellIds.AServingOfStuffingPlate)]
|
|
[Script("spell_pilgrims_bounty_a_serving_of_potatoes", SpellIds.AServingOfSweetPotatoesPlate)]
|
|
[Script("spell_pilgrims_bounty_a_serving_of_pie", SpellIds.AServingOfPiePlate)]
|
|
class spell_pilgrims_bounty_a_serving_of_AuraScript : AuraScript
|
|
{
|
|
uint _triggeredSpellId;
|
|
|
|
public spell_pilgrims_bounty_a_serving_of_AuraScript(uint triggeredSpellId)
|
|
{
|
|
_triggeredSpellId = triggeredSpellId;
|
|
}
|
|
|
|
public override bool Validate(SpellInfo spell)
|
|
{
|
|
return ValidateSpellInfo(_triggeredSpellId);
|
|
}
|
|
|
|
void OnApply(AuraEffect aurEff, AuraEffectHandleModes mode)
|
|
{
|
|
Unit target = GetTarget();
|
|
target.CastSpell(target, (uint)aurEff.GetAmount(), true);
|
|
HandlePlate(target, true);
|
|
}
|
|
|
|
void OnRemove(AuraEffect aurEff, AuraEffectHandleModes mode)
|
|
{
|
|
Unit target = GetTarget();
|
|
target.RemoveAurasDueToSpell((uint)aurEff.GetAmount());
|
|
HandlePlate(target, false);
|
|
}
|
|
|
|
void HandlePlate(Unit target, bool apply)
|
|
{
|
|
Vehicle table = target.GetVehicle();
|
|
if (table != null)
|
|
{
|
|
Unit holderUnit = table.GetPassenger(SeatIds.PlateHolder);
|
|
if (holderUnit != null)
|
|
{
|
|
Vehicle holder = holderUnit.GetVehicleKit();
|
|
if (holder != null)
|
|
{
|
|
Unit plate = holder.GetPassenger(target.GetTransSeat());
|
|
if (plate != null)
|
|
{
|
|
if (apply)
|
|
target.CastSpell(plate, _triggeredSpellId, true);
|
|
else
|
|
plate.RemoveAurasDueToSpell(_triggeredSpellId);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void Register()
|
|
{
|
|
AfterEffectApply.Add(new EffectApplyHandler(OnApply, 0, AuraType.Dummy, AuraEffectHandleModes.Real));
|
|
OnEffectRemove.Add(new EffectApplyHandler(OnRemove, 0, AuraType.Dummy, AuraEffectHandleModes.Real));
|
|
}
|
|
}
|
|
}
|