TrinityCore
Loading...
Searching...
No Matches
zone_drustvar.cpp
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#include "AreaTrigger.h"
19#include "AreaTriggerAI.h"
20#include "Containers.h"
21#include "Conversation.h"
22#include "ConversationAI.h"
23#include "MotionMaster.h"
24#include "ObjectAccessor.h"
25#include "Player.h"
26#include "ScriptedCreature.h"
27#include "ScriptMgr.h"
28#include "SpellAuras.h"
29#include "SpellInfo.h"
30#include "SpellScript.h"
31#include "TemporarySummon.h"
32
41
42// 8790 - Conversation
44{
45public:
47
48 void OnCreate(Unit* creator) override
49 {
50 Creature* thornguardIronclaw = creator->FindNearestCreatureWithOptions(20.0f, { .CreatureId = NPC_SUMMONED_THORNGUARD_IRONCLAW, .IgnorePhases = true, .OwnerGuid = creator->GetGUID() });
51 if (!thornguardIronclaw)
52 return;
53
54 thornguardIronclaw->SetReactState(REACT_PASSIVE);
55 thornguardIronclaw->SetImmuneToAll(true);
56
59 }
60
61 void OnStart() override
62 {
64
66 {
67 Creature* thornguardIronclaw = conversation->GetActorCreature(0);
68 if (!thornguardIronclaw)
69 return;
70
71 thornguardIronclaw->GetMotionMaster()->MovePoint(0, thornguardIronclaw->GetFirstCollisionPosition(20.0f, 0));
72 thornguardIronclaw->CastSpell(thornguardIronclaw, SPELL_DISMISS_TRADEWIND, TRIGGERED_IGNORE_CAST_TIME);
73 }, conversation->GetLastLineEndTime(privateOwnerLocale) + 3s);
74 }
75};
76
77// 274789 - Dismiss Tradewind
79{
80 void HandleHitTarget(SpellEffIndex /*effIndex*/) const
81 {
82 if (Creature* hitUnit = GetHitCreature())
83 {
84 if (hitUnit->GetEntry() == NPC_SUMMONED_THORNGUARD_IRONCLAW)
85 hitUnit->DespawnOrUnsummon(2s);
86 }
87 }
88
93};
94
96{
97 // Creature
100
101 // Actions
103
104 // Spells
107
108 // Paths
109 PATH_CHARGING_FAMILIAR_PATH = 13784100, // until 13784112
110};
111
117
119 { { -1107.751708984375f, 1306.234375f, 4.272790431976318359f, 5.828217506408691406f }, PATH_CHARGING_FAMILIAR_PATH + 0 },
120 { { -1110.071166992187f, 1309.272583f, 4.426310539245605468f, 5.856356143951416015f }, PATH_CHARGING_FAMILIAR_PATH + 1 },
121 { { -1115.628540039062f, 1270.461791f, 11.99121379852294921f, 4.980997085571289062f }, PATH_CHARGING_FAMILIAR_PATH + 2 },
122 { { -1021.048583984375f, 1227.489624f, 7.336474418640136718f, 1.443549275398254394f }, PATH_CHARGING_FAMILIAR_PATH + 3 },
123 { { -1107.543457031250f, 1310.699707f, 4.048464298248291015f, 5.869964599609375356f }, PATH_CHARGING_FAMILIAR_PATH + 4 },
124 { { -1116.659790039062f, 1267.369750f, 12.42689323425292968f, 5.907102108001708984f }, PATH_CHARGING_FAMILIAR_PATH + 5 },
125 { { -1107.930541992187f, 1318.392333f, 4.017061710357666015f, 5.871676445007324218f }, PATH_CHARGING_FAMILIAR_PATH + 6 },
126 { { -1004.663208007812f, 1240.963500f, 6.007450103759765625f, 2.687578678131103515f }, PATH_CHARGING_FAMILIAR_PATH + 7 },
127 { { -1109.645874023437f, 1314.925415f, 4.456899166107177734f, 5.855425834655761718f }, PATH_CHARGING_FAMILIAR_PATH + 8 },
128 { { -1014.447875976562f, 1231.609375f, 7.548688411712646484f, 2.091593265533447265f }, PATH_CHARGING_FAMILIAR_PATH + 9 },
129 { { -1104.810791015625f, 1313.993041f, 3.400579452514648437f, 5.872215747833251953f }, PATH_CHARGING_FAMILIAR_PATH + 10 },
130 { { -1116.729125976562f, 1263.534790f, 12.73228836059570312f, 5.952130794525146484f }, PATH_CHARGING_FAMILIAR_PATH + 11 },
131 { { -1099.619750976562f, 1317.060791f, 2.314694643020629882f, 5.868431091308593750f }, PATH_CHARGING_FAMILIAR_PATH + 12 },
132};
133
134// 126478 - Fletchers Hollow Conscript
136{
138
140 {
143 familiar->GetMotionMaster()->MovePath(data.PathID, false);
144 }
145
146 void JustAppeared() override
147 {
148 for (uint8 i = 0; i < 2; i++)
150 }
151
152 void DoAction(int32 param) override
153 {
156 }
157};
158
159// 137841 - Charging Familair
161{
163
168
169 void JustDied(Unit* /*killer*/) override
170 {
171 if (Creature* controller = me->FindNearestCreatureWithOptions(50.0f, { .CreatureId = NPC_FLETCHERS_HOLLOW_CONSCRIPT, .StringId = "ShootWickermanController" }))
172 controller->AI()->DoAction(ACTION_SPAWN_CHARGING_FAMILIAR);
174 }
175
176 void SpellHit(WorldObject* /*caster*/, SpellInfo const* spellInfo) override
177 {
178 if (spellInfo->Id == SPELL_DRUSTVAR_SHOOT_WICKERMAN)
179 me->KillSelf();
180 }
181};
182
183// 164 - Areatrigger
185{
187
188 void OnUnitEnter(Unit* unit) override
189 {
190 if (!unit->IsCreature() || unit->GetEntry() != NPC_DRUSTVAR_CHARGING_FAMILIAR)
191 return;
192
193 Unit* caster = at->GetCaster();
194 if (!caster)
195 return;
196
198 }
199};
200
LocaleConstant
Definition Common.h:51
uint8_t uint8
Definition Define.h:156
int32_t int32
Definition Define.h:150
uint32_t uint32
Definition Define.h:154
#define RegisterCreatureAI(ai_name)
Definition ScriptMgr.h:1392
#define RegisterAreaTriggerAI(ai_name)
Definition ScriptMgr.h:1428
#define RegisterSpellScript(spell_script)
Definition ScriptMgr.h:1383
#define RegisterConversationAI(ai_name)
Definition ScriptMgr.h:1437
SpellEffIndex
@ EFFECT_0
@ SPELL_EFFECT_SCRIPT_EFFECT
@ TRIGGERED_IGNORE_CAST_IN_PROGRESS
Will not check if a current cast is in progress.
@ TRIGGERED_IGNORE_CAST_TIME
Will always be instantly cast.
#define SpellEffectFn(F, I, N)
@ REACT_PASSIVE
AreaTrigger *const at
Unit * GetCaster() const
ObjectGuid const & GetGUID() const
Definition BaseEntity.h:163
bool IsCreature() const
Definition BaseEntity.h:172
Conversation *const conversation
void AddActor(int32 actorId, uint32 actorIdx, ObjectGuid const &actorGuid)
LocaleConstant GetPrivateObjectOwnerLocale() const
Milliseconds GetLastLineEndTime(LocaleConstant locale) const
Creature * GetActorCreature(uint32 actorIdx) const
Creature *const me
Definition CreatureAI.h:63
void SetReactState(ReactStates st)
Definition Creature.h:174
void DespawnOrUnsummon(Milliseconds timeToDespawn=0s, Seconds forceRespawnTime=0s)
void SetImmuneToAll(bool apply) override
Definition Creature.h:181
void AddEvent(BasicEvent *event, Milliseconds e_time, bool set_addtime=true)
uint32 GetEntry() const
Definition Object.h:89
uint32 const Id
Definition SpellInfo.h:328
Creature * GetHitCreature() const
HookList< EffectHandler > OnEffectHitTarget
SpellCastResult DoCastSelf(uint32 spellId, CastSpellExtraArgs const &args={})
Definition UnitAI.h:160
Definition Unit.h:635
MotionMaster * GetMotionMaster()
Definition Unit.h:1723
void KillSelf(bool durabilityLoss=true, bool skipSettingDeathState=false)
Definition Unit.h:936
Creature * FindNearestCreatureWithOptions(float range, FindCreatureOptions const &options) const
Definition Object.cpp:1526
SpellCastResult CastSpell(CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={ })
Definition Object.cpp:2217
TempSummon * SummonCreature(uint32 entry, Position const &pos, TempSummonType despawnType=TEMPSUMMON_MANUAL_DESPAWN, Milliseconds despawnTime=0s, uint32 vehId=0, uint32 spellId=0, ObjectGuid privateObjectOwner=ObjectGuid::Empty)
Definition Object.cpp:1398
EventProcessor m_Events
Definition Object.h:561
Position GetFirstCollisionPosition(float dist, float angle)
Definition Object.cpp:2762
conversation_drustvar_really_big_problem_complete(Conversation *conversation)
void HandleHitTarget(SpellEffIndex) const
auto SelectRandomContainerElement(C const &container) -> std::add_const_t< decltype(*std::ranges::begin(container))> &
Definition Containers.h:110
at_drustvar_timbered_strand_shoot_wickerman(AreaTrigger *areatrigger)
void SpellHit(WorldObject *, SpellInfo const *spellInfo) override
void JustDied(Unit *) override
npc_drustvar_charging_familiar(Creature *creature)
npc_drustvar_shoot_wickerman_controller(Creature *creature)
ShootWickermanData
@ ACTION_SPAWN_CHARGING_FAMILIAR
@ SPELL_DRUSTVAR_SHADOW_DISSOLVE_IN
@ NPC_DRUSTVAR_CHARGING_FAMILIAR
@ SPELL_DRUSTVAR_SHOOT_WICKERMAN
@ PATH_CHARGING_FAMILIAR_PATH
@ NPC_FLETCHERS_HOLLOW_CONSCRIPT
ChargingFamiliarData ChargingFamiliarDatas[]
ReallyBigProblemData
@ NPC_SUMMONED_THORNGUARD_IRONCLAW
@ SPELL_DISMISS_TRADEWIND
@ CONVO_ACTOR_THORNGUARD_IRONCLAW
void AddSC_zone_drustvar()