Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
zone_shattrath_city.cpp
Go to the documentation of this file.
1/*
2* This file is part of Project SkyFire https://www.projectskyfire.org.
3* See LICENSE.md file for Copyright information
4*/
5
6/* ScriptData
7SDName: Shattrath_City
8SD%Complete: 100
9SDComment: Quest support: 10004, 10009, 10211. Flask vendors, Teleport to Caverns of Time
10SDCategory: Shattrath City
11EndScriptData */
12
13/* ContentData
14npc_raliq_the_drunk
15npc_salsalabim
16npc_shattrathflaskvendors
17npc_zephyr
18npc_kservant
19npc_ishanah
20npc_khadgar
21EndContentData */
22
23#include "ScriptMgr.h"
24#include "ScriptedCreature.h"
25#include "ScriptedGossip.h"
26#include "ScriptedEscortAI.h"
27#include "Player.h"
28#include "WorldSession.h"
29
30/*######
31## npc_raliq_the_drunk
32######*/
33
34#define GOSSIP_RALIQ "You owe Sim'salabim money. Hand them over or die!"
35
42
44{
45public:
46 npc_raliq_the_drunk() : CreatureScript("npc_raliq_the_drunk") { }
47
48 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
49 {
50 player->PlayerTalkClass->ClearMenus();
51 if (action == GOSSIP_ACTION_INFO_DEF+1)
52 {
53 player->CLOSE_GOSSIP_MENU();
54 creature->setFaction(FACTION_HOSTILE_RD);
55 creature->AI()->AttackStart(player);
56 }
57 return true;
58 }
59
60 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
61 {
62 if (player->GetQuestStatus(QUEST_CRACK_SKULLS) == QUEST_STATUS_INCOMPLETE)
64
65 player->SEND_GOSSIP_MENU(9440, creature->GetGUID());
66 return true;
67 }
68
70 {
71 return new npc_raliq_the_drunkAI(creature);
72 }
73
75 {
77 {
78 m_uiNormFaction = creature->getFaction();
79 }
80
83
85 {
86 Uppercut_Timer = 5000;
87 me->RestoreFaction();
88 }
89
91 {
92 if (!UpdateVictim())
93 return;
94
95 if (Uppercut_Timer <= diff)
96 {
98 Uppercut_Timer = 15000;
99 } else Uppercut_Timer -= diff;
100
102 }
103 };
104};
105
106/*######
107# npc_salsalabim
108######*/
109
111{
112 // Factions
115
116 // Quests
117 QUEST_10004 = 10004,
118
119 // Spells
121};
122
124{
125public:
126 npc_salsalabim() : CreatureScript("npc_salsalabim") { }
127
128 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
129 {
130 if (player->GetQuestStatus(QUEST_10004) == QUEST_STATUS_INCOMPLETE)
131 {
132 creature->setFaction(FACTION_HOSTILE_SA);
133 creature->AI()->AttackStart(player);
134 }
135 else
136 {
137 if (creature->IsQuestGiver())
138 player->PrepareQuestMenu(creature->GetGUID());
139 player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
140 }
141 return true;
142 }
143
145 {
146 return new npc_salsalabimAI(creature);
147 }
148
150 {
151 npc_salsalabimAI(Creature* creature) : ScriptedAI(creature) { }
152
154
156 {
157 MagneticPull_Timer = 15000;
158 me->RestoreFaction();
159 }
160
161 void DamageTaken(Unit* done_by, uint32 &damage) OVERRIDE
162 {
163 if (done_by->GetTypeId() == TypeID::TYPEID_PLAYER && me->HealthBelowPctDamaged(20, damage))
164 {
165 done_by->ToPlayer()->GroupEventHappens(QUEST_10004, me);
166 damage = 0;
168 }
169 }
170
172 {
173 if (!UpdateVictim())
174 return;
175
176 if (MagneticPull_Timer <= diff)
177 {
179 MagneticPull_Timer = 15000;
180 } else MagneticPull_Timer -= diff;
181
183 }
184 };
185};
186
187/*
188##################################################
189Shattrath City Flask Vendors provides flasks to people exalted with 3 fActions:
190Haldor the Compulsive
191Arcanist Xorith
192Both sell special flasks for use in Outlands 25man raids only,
193purchasable for one Mark of Illidari each
194Purchase requires exalted reputation with Scryers/Aldor, Cenarion Expedition and The Sha'tar
195##################################################
196*/
197
199{
200public:
201 npc_shattrathflaskvendors() : CreatureScript("npc_shattrathflaskvendors") { }
202
203 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
204 {
205 player->PlayerTalkClass->ClearMenus();
206 if (action == GOSSIP_ACTION_TRADE)
207 player->GetSession()->SendListInventory(creature->GetGUID());
208
209 return true;
210 }
211
212 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
213 {
214 if (creature->GetEntry() == 23484)
215 {
216 // Aldor vendor
217 if (creature->IsVendor() && (player->GetReputationRank(932) == REP_EXALTED) && (player->GetReputationRank(935) == REP_EXALTED) && (player->GetReputationRank(942) == REP_EXALTED))
218 {
220 player->SEND_GOSSIP_MENU(11085, creature->GetGUID());
221 }
222 else
223 {
224 player->SEND_GOSSIP_MENU(11083, creature->GetGUID());
225 }
226 }
227
228 if (creature->GetEntry() == 23483)
229 {
230 // Scryers vendor
231 if (creature->IsVendor() && (player->GetReputationRank(934) == REP_EXALTED) && (player->GetReputationRank(935) == REP_EXALTED) && (player->GetReputationRank(942) == REP_EXALTED))
232 {
234 player->SEND_GOSSIP_MENU(11085, creature->GetGUID());
235 }
236 else
237 {
238 player->SEND_GOSSIP_MENU(11084, creature->GetGUID());
239 }
240 }
241
242 return true;
243 }
244};
245
246/*######
247# npc_zephyr
248######*/
249
250#define GOSSIP_HZ "Take me to the Caverns of Time."
251
253{
254public:
255 npc_zephyr() : CreatureScript("npc_zephyr") { }
256
257 bool OnGossipSelect(Player* player, Creature* /*creature*/, uint32 /*sender*/, uint32 action) OVERRIDE
258 {
259 player->PlayerTalkClass->ClearMenus();
260 if (action == GOSSIP_ACTION_INFO_DEF+1)
261 player->CastSpell(player, 37778, false);
262
263 return true;
264 }
265
266 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
267 {
268 if (player->GetReputationRank(989) >= REP_REVERED)
270
271 player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
272
273 return true;
274 }
275};
276
277/*######
278# npc_kservant
279######*/
280
306
308{
309public:
310 npc_kservant() : CreatureScript("npc_kservant") { }
311
313 {
314 return new npc_kservantAI(creature);
315 }
316
318 {
319 public:
320 npc_kservantAI(Creature* creature) : npc_escortAI(creature) { }
321
323 {
324 Player* player = GetPlayerForEscort();
325 if (!player)
326 return;
327
328 switch (waypointId)
329 {
330 case 0:
331 Talk(SAY1, player);
332 break;
333 case 4:
334 Talk(WHISP1, player);
335 break;
336 case 6:
337 Talk(WHISP2, player);
338 break;
339 case 7:
340 Talk(WHISP3, player);
341 break;
342 case 8:
343 Talk(WHISP4, player);
344 break;
345 case 17:
346 Talk(WHISP5, player);
347 break;
348 case 18:
349 Talk(WHISP6, player);
350 break;
351 case 19:
352 Talk(WHISP7, player);
353 break;
354 case 33:
355 Talk(WHISP8, player);
356 break;
357 case 34:
358 Talk(WHISP9, player);
359 break;
360 case 35:
361 Talk(WHISP10, player);
362 break;
363 case 36:
364 Talk(WHISP11, player);
365 break;
366 case 43:
367 Talk(WHISP12, player);
368 break;
369 case 44:
370 Talk(WHISP13, player);
371 break;
372 case 49:
373 Talk(WHISP14, player);
374 break;
375 case 50:
376 Talk(WHISP15, player);
377 break;
378 case 51:
379 Talk(WHISP16, player);
380 break;
381 case 52:
382 Talk(WHISP17, player);
383 break;
384 case 53:
385 Talk(WHISP18, player);
386 break;
387 case 54:
388 Talk(WHISP19, player);
389 break;
390 case 55:
391 Talk(WHISP20, player);
392 break;
393 case 56:
394 Talk(WHISP21, player);
395 player->GroupEventHappens(10211, me);
396 break;
397 }
398 }
399
401
402 {
404 return;
405
406 Player* player = who->ToPlayer();
407 if (player && player->GetQuestStatus(10211) == QUEST_STATUS_INCOMPLETE)
408 {
409 float Radius = 10.0f;
410 if (me->IsWithinDistInMap(who, Radius))
411 {
412 Start(false, false, who->GetGUID());
413 }
414 }
415 }
416
417 void Reset() OVERRIDE { }
418 };
419};
420
421/*######
422# npc_ishanah
423######*/
424
425#define ISANAH_GOSSIP_1 "Who are the Sha'tar?"
426#define ISANAH_GOSSIP_2 "Isn't Shattrath a draenei city? Why do you allow others here?"
427
429{
430public:
431 npc_ishanah() : CreatureScript("npc_ishanah") { }
432
433 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
434 {
435 player->PlayerTalkClass->ClearMenus();
436 if (action == GOSSIP_ACTION_INFO_DEF+1)
437 player->SEND_GOSSIP_MENU(9458, creature->GetGUID());
438 else if (action == GOSSIP_ACTION_INFO_DEF+2)
439 player->SEND_GOSSIP_MENU(9459, creature->GetGUID());
440
441 return true;
442 }
443
444 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
445 {
446 if (creature->IsQuestGiver())
447 player->PrepareQuestMenu(creature->GetGUID());
448
451
452 player->SEND_GOSSIP_MENU(player->GetGossipTextId(creature), creature->GetGUID());
453
454 return true;
455 }
456};
457
458/*######
459# npc_khadgar
460######*/
461
462#define KHADGAR_GOSSIP_1 "I've heard your name spoken only in whispers, mage. Who are you?"
463#define KHADGAR_GOSSIP_2 "Go on, please."
464#define KHADGAR_GOSSIP_3 "I see." //6th too this
465#define KHADGAR_GOSSIP_4 "What did you do then?"
466#define KHADGAR_GOSSIP_5 "What happened next?"
467#define KHADGAR_GOSSIP_7 "There was something else I wanted to ask you."
468
470{
471public:
472 npc_khadgar() : CreatureScript("npc_khadgar") { }
473
474 bool OnGossipSelect(Player* player, Creature* creature, uint32 /*sender*/, uint32 action) OVERRIDE
475 {
476 player->PlayerTalkClass->ClearMenus();
477 switch (action)
478 {
481 player->SEND_GOSSIP_MENU(9876, creature->GetGUID());
482 break;
485 player->SEND_GOSSIP_MENU(9877, creature->GetGUID());
486 break;
489 player->SEND_GOSSIP_MENU(9878, creature->GetGUID());
490 break;
493 player->SEND_GOSSIP_MENU(9879, creature->GetGUID());
494 break;
497 player->SEND_GOSSIP_MENU(9880, creature->GetGUID());
498 break;
501 player->SEND_GOSSIP_MENU(9881, creature->GetGUID());
502 break;
505 player->SEND_GOSSIP_MENU(9243, creature->GetGUID());
506 break;
507 }
508 return true;
509 }
510
511 bool OnGossipHello(Player* player, Creature* creature) OVERRIDE
512 {
513 if (creature->IsQuestGiver())
514 player->PrepareQuestMenu(creature->GetGUID());
515
516 if (player->GetQuestStatus(10211) != QUEST_STATUS_INCOMPLETE)
518
519 player->SEND_GOSSIP_MENU(9243, creature->GetGUID());
520
521 return true;
522 }
523};
524
526{
528 new npc_salsalabim();
530 new npc_zephyr();
531 new npc_kservant();
532 new npc_ishanah();
533 new npc_khadgar();
534}
std::uint32_t uint32
Definition Define.h:77
#define OVERRIDE
Definition Define.h:60
@ GOSSIP_ICON_CHAT
Definition GossipDef.h:46
@ GOSSIP_ICON_VENDOR
Definition GossipDef.h:47
@ TYPEID_PLAYER
Definition Object.h:55
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:89
@ STATE_ESCORT_ESCORTING
#define GOSSIP_TEXT_BROWSE_GOODS
@ GOSSIP_SENDER_MAIN
@ GOSSIP_ACTION_TRADE
@ GOSSIP_ACTION_INFO_DEF
@ REP_EXALTED
@ REP_REVERED
@ SPELL_MAGNETIC_PULL
void Talk(uint8 id, WorldObject const *whisperTarget=NULL)
bool UpdateVictim()
virtual void EnterEvadeMode()
CreatureScript(const char *name)
Player * ToPlayer()
Definition Object.h:204
void GroupEventHappens(uint32 questId, WorldObject const *pEventObject)
QuestStatus GetQuestStatus(uint32 quest_id) const
void DoMeleeAttackIfReady()
Definition UnitAI.cpp:28
void DoCastVictim(uint32 spellId, bool triggered=false)
Definition UnitAI.cpp:168
Definition Unit.h:1367
uint32 getFaction() const
Definition Unit.h:1695
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
CreatureAI * GetAI(Creature *creature) const OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
bool OnGossipSelect(Player *player, Creature *creature, uint32, uint32 action) OVERRIDE
bool OnGossipHello(Player *player, Creature *creature) OVERRIDE
bool OnGossipSelect(Player *player, Creature *, uint32, uint32 action) OVERRIDE
Creature * me
ScriptedAI(Creature *creature)
Player * GetPlayerForEscort()
bool HasEscortState(uint32 escortState) const
npc_escortAI(Creature *creature)
void Start(bool isActiveAttacker=true, bool run=false, uint64 playerGUID=0, Quest const *quest=NULL, bool instantRespawn=false, bool canLoopPath=false, bool resetWaypoints=true)
void WaypointReached(uint32 waypointId) OVERRIDE
void MoveInLineOfSight(Unit *who) OVERRIDE
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void UpdateAI(uint32 diff) OVERRIDE
== Triggered Actions Requested ==================
void DamageTaken(Unit *done_by, uint32 &damage) OVERRIDE
#define ISANAH_GOSSIP_2
#define KHADGAR_GOSSIP_4
void AddSC_shattrath_city()
#define KHADGAR_GOSSIP_5
#define GOSSIP_HZ
#define KHADGAR_GOSSIP_1
@ QUEST_CRACK_SKULLS
@ FACTION_HOSTILE_RD
@ SPELL_UPPERCUT
#define KHADGAR_GOSSIP_3
#define KHADGAR_GOSSIP_2
#define GOSSIP_RALIQ
#define KHADGAR_GOSSIP_7
#define ISANAH_GOSSIP_1
@ SPELL_MAGNETIC_PULL
@ FACTION_HOSTILE_SA
@ FACTION_FRIENDLY_SA