Project SkyFire Core
SkyFire 5.4.8 server core API documentation
Loading...
Searching...
No Matches
ScriptMgr.h
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#ifndef SC_SCRIPTMGR_H
7#define SC_SCRIPTMGR_H
8
9#include "Common.h"
10#include "Platform/Singleton.h"
11#include <atomic>
12
13#include "DBCStores.h"
14#include "SharedDefines.h"
15#include "Weather.h"
16#include "World.h"
17
19class AuraScript;
20class Battleground;
21class BattlegroundMap;
22class Channel;
23class ChatCommand;
24class Creature;
25class CreatureAI;
26class DynamicObject;
27class GameObject;
28class GameObjectAI;
29class Guild;
30class GridMap;
31class Group;
32class InstanceMap;
33class InstanceScript;
34class Item;
35class Map;
36class OutdoorPvP;
37class Player;
38class Quest;
39class ScriptMgr;
40class Spell;
41class SpellScript;
43class Transport;
44class Unit;
45class Vehicle;
46class WorldPacket;
47class WorldSocket;
48class WorldObject;
49
50struct AuctionEntry;
52struct Condition;
53struct ItemTemplate;
54struct OutdoorPvPData;
55
56#define VISIBLE_RANGE 166.0f //MAX visible range (size of grid)
57
59{
60 uint8 Targets; // set of enum SelectTarget
61 uint8 Effects; // set of enum SelectEffect
62};
63
64/*
65 @todo Add more script type classes.
66
67 MailScript
68 SessionScript
69 CollisionScript
70 ArenaTeamScript
71
72*/
73
74/*
75 Standard procedure when adding new script type classes:
76
77 First of all, define the actual class, and have it inherit from ScriptObject, like so:
78
79 class MyScriptType : public ScriptObject
80 {
81 uint32 _someId;
82
83 private:
84 void RegisterSelf();
85
86 protected:
87 MyScriptType(const char* name, uint32 someId)
88 : ScriptObject(name), _someId(someId)
89 {
90 ScriptRegistry<MyScriptType>::AddScript(this);
91 }
92
93 public:
94 // If a virtual function in your script type class is not necessarily
95 // required to be overridden, just declare it virtual with an empty
96 // body. If, on the other hand, it's logical only to override it (i.e.
97 // if it's the only method in the class), make it pure virtual, by adding
98 // = 0 to it.
99 virtual void OnSomeEvent(uint32 someArg1, std::string& someArg2) { }
100
101 // This is a pure virtual function:
102 virtual void OnAnotherEvent(uint32 someArg) = 0;
103 }
104
105 Next, you need to add a specialization for ScriptRegistry. Put this in the bottom of
106 ScriptMgr.cpp:
107
108 template class ScriptRegistry<MyScriptType>;
109
110 Now, add a cleanup routine in ScriptMgr::~ScriptMgr:
111
112 SCR_CLEAR(MyScriptType);
113
114 Now your script type is good to go with the script system. What you need to do now
115 is add functions to ScriptMgr that can be called from the core to actually trigger
116 certain events. For example, in ScriptMgr.h:
117
118 void OnSomeEvent(uint32 someArg1, std::string& someArg2);
119 void OnAnotherEvent(uint32 someArg);
120
121 In ScriptMgr.cpp:
122
123 void ScriptMgr::OnSomeEvent(uint32 someArg1, std::string& someArg2)
124 {
125 FOREACH_SCRIPT(MyScriptType)->OnSomeEvent(someArg1, someArg2);
126 }
127
128 void ScriptMgr::OnAnotherEvent(uint32 someArg)
129 {
130 FOREACH_SCRIPT(MyScriptType)->OnAnotherEvent(someArg1, someArg2);
131 }
132
133 Now you simply call these two functions from anywhere in the core to trigger the
134 event on all registered scripts of that type.
135*/
136
138{
139 friend class ScriptMgr;
140
141public:
142 // Do not override this in scripts; it should be overridden by the various script type classes. It indicates
143 // whether or not this script type must be assigned in the database.
144 virtual bool IsDatabaseBound() const { return false; }
145
146 const std::string& GetName() const { return _name; }
147
148protected:
149 ScriptObject(const char* name)
150 : _name(name) { }
151
152 virtual ~ScriptObject() { }
153
154private:
155 const std::string _name;
156};
157
158template<class TObject> class UpdatableScript
159{
160protected:
162 virtual ~UpdatableScript() { }
163public:
164 virtual void OnUpdate(TObject* /*obj*/, uint32 /*diff*/) { }
165};
166
168{
169protected:
170 SpellScriptLoader(const char* name);
171
172public:
173 bool IsDatabaseBound() const FINAL { return true; }
174
175 // Should return a fully valid SpellScript pointer.
176 virtual SpellScript* GetSpellScript() const { return NULL; }
177
178 // Should return a fully valid AuraScript pointer.
179 virtual AuraScript* GetAuraScript() const { return NULL; }
180};
181
183{
184protected:
185 ServerScript(const char* name);
186
187public:
188 // Called when reactive socket I/O is started (WorldSocketMgr).
189 virtual void OnNetworkStart() { }
190
191 // Called when reactive I/O is stopped.
192 virtual void OnNetworkStop() { }
193
194 // Called when a remote socket establishes a connection to the server. Do not store the socket object.
195 virtual void OnSocketOpen(WorldSocket* /*socket*/) { }
196
197 // Called when a socket is closed. Do not store the socket object, and do not rely on the connection
198 // being open; it is not.
199 virtual void OnSocketClose(WorldSocket* /*socket*/, bool /*wasNew*/) { }
200
201 // Called when a packet is sent to a client. The packet object is a copy of the original packet, so reading
202 // and modifying it is safe.
203 virtual void OnPacketSend(WorldSocket* /*socket*/, WorldPacket& /*packet*/) { }
204
205 // Called when a (valid) packet is received by a client. The packet object is a copy of the original packet, so
206 // reading and modifying it is safe.
207 virtual void OnPacketReceive(WorldSocket* /*socket*/, WorldPacket& /*packet*/) { }
208
209 // Called when an invalid (unknown opcode) packet is received by a client. The packet is a reference to the orignal
210 // packet; not a copy. This allows you to actually handle unknown packets (for whatever purpose).
211 virtual void OnUnknownPacketReceive(WorldSocket* /*socket*/, WorldPacket& /*packet*/) { }
212};
213
215{
216protected:
217 WorldScript(const char* name);
218
219public:
220 // Called when the open/closed state of the world changes.
221 virtual void OnOpenStateChange(bool /*open*/) { }
222
223 // Called after the world configuration is (re)loaded.
224 virtual void OnConfigLoad(bool /*reload*/) { }
225
226 // Called before the message of the day is changed.
227 virtual void OnMotdChange(std::string& /*newMotd*/) { }
228
229 // Called when a world shutdown is initiated.
230 virtual void OnShutdownInitiate(ShutdownExitCode /*code*/, ShutdownMask /*mask*/) { }
231
232 // Called when a world shutdown is cancelled.
233 virtual void OnShutdownCancel() { }
234
235 // Called on every world tick (don't execute too heavy code here).
236 virtual void OnUpdate(uint32 /*diff*/) { }
237
238 // Called when the world is started.
239 virtual void OnStartup() { }
240
241 // Called when the world is actually shut down.
242 virtual void OnShutdown() { }
243};
244
246{
247protected:
248 FormulaScript(const char* name);
249
250public:
251 // Called after calculating honor.
252 virtual void OnHonorCalculation(float& /*honor*/, uint8 /*level*/, float /*multiplier*/) { }
253
254 // Called after gray level calculation.
255 virtual void OnGrayLevelCalculation(uint8& /*grayLevel*/, uint8 /*playerLevel*/) { }
256
257 // Called after calculating experience color.
258 virtual void OnColorCodeCalculation(XPColorChar& /*color*/, uint8 /*playerLevel*/, uint8 /*mobLevel*/) { }
259
260 // Called after calculating zero difference.
261 virtual void OnZeroDifferenceCalculation(uint8& /*diff*/, uint8 /*playerLevel*/) { }
262
263 // Called after calculating base experience gain.
264 virtual void OnBaseGainCalculation(uint32& /*gain*/, uint8 /*playerLevel*/, uint8 /*mobLevel*/, ContentLevels /*content*/) { }
265
266 // Called after calculating experience gain.
267 virtual void OnGainCalculation(uint32& /*gain*/, Player* /*player*/, Unit* /*unit*/) { }
268
269 // Called when calculating the experience rate for group experience.
270 virtual void OnGroupRateCalculation(float& /*rate*/, uint32 /*count*/, bool /*isRaid*/) { }
271};
272
273template<class TMap> class MapScript : public UpdatableScript<TMap>
274{
276
277protected:
279 : _mapEntry(sMapStore.LookupEntry(mapId))
280 {
281 if (!_mapEntry)
282 SF_LOG_ERROR("scripts", "Invalid MapScript for %u; no such map ID.", mapId);
283 }
284
285public:
286 // Gets the MapEntry structure associated with this script. Can return NULL.
287 MapEntry const* GetEntry() { return _mapEntry; }
288
289 // Called when the map is created.
290 virtual void OnCreate(TMap* /*map*/) { }
291
292 // Called just before the map is destroyed.
293 virtual void OnDestroy(TMap* /*map*/) { }
294
295 // Called when a grid map is loaded.
296 virtual void OnLoadGridMap(TMap* /*map*/, GridMap* /*gmap*/, uint32 /*gx*/, uint32 /*gy*/) { }
297
298 // Called when a grid map is unloaded.
299 virtual void OnUnloadGridMap(TMap* /*map*/, GridMap* /*gmap*/, uint32 /*gx*/, uint32 /*gy*/) { }
300
301 // Called when a player enters the map.
302 virtual void OnPlayerEnter(TMap* /*map*/, Player* /*player*/) { }
303
304 // Called when a player leaves the map.
305 virtual void OnPlayerLeave(TMap* /*map*/, Player* /*player*/) { }
306};
307
308class WorldMapScript : public ScriptObject, public MapScript<Map>
309{
310protected:
311 WorldMapScript(const char* name, uint32 mapId);
312};
313
314class InstanceMapScript : public ScriptObject, public MapScript<InstanceMap>
315{
316protected:
317 InstanceMapScript(const char* name, uint32 mapId);
318
319public:
320 bool IsDatabaseBound() const FINAL { return true; }
321
322 // Gets an InstanceScript object for this instance.
323 virtual InstanceScript* GetInstanceScript(InstanceMap* /*map*/) const { return NULL; }
324};
325
326class BattlegroundMapScript : public ScriptObject, public MapScript<BattlegroundMap>
327{
328protected:
329 BattlegroundMapScript(const char* name, uint32 mapId);
330};
331
333{
334protected:
335 ItemScript(const char* name);
336
337public:
338 bool IsDatabaseBound() const FINAL { return true; }
339
340 // Called when a dummy spell effect is triggered on the item.
341 virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Item* /*target*/) { return false; }
342
343 // Called when a player accepts a quest from the item.
344 virtual bool OnQuestAccept(Player* /*player*/, Item* /*item*/, Quest const* /*quest*/) { return false; }
345
346 // Called when a player uses the item.
347 virtual bool OnUse(Player* /*player*/, Item* /*item*/, SpellCastTargets const& /*targets*/) { return false; }
348
349 // Called when the item expires (is destroyed).
350 virtual bool OnExpire(Player* /*player*/, ItemTemplate const* /*proto*/) { return false; }
351};
352
354{
355protected:
356 UnitScript(const char* name, bool addToScripts = true);
357
358public:
359 // Called when a unit deals healing to another unit
360 virtual void OnHeal(Unit* /*healer*/, Unit* /*reciever*/, uint32& /*gain*/) { }
361
362 // Called when a unit deals damage to another unit
363 virtual void OnDamage(Unit* /*attacker*/, Unit* /*victim*/, uint32& /*damage*/) { }
364
365 // Called when DoT's Tick Damage is being Dealt
366 virtual void ModifyPeriodicDamageAurasTick(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
367
368 // Called when Melee Damage is being Dealt
369 virtual void ModifyMeleeDamage(Unit* /*target*/, Unit* /*attacker*/, uint32& /*damage*/) { }
370
371 // Called when Spell Damage is being Dealt
372 virtual void ModifySpellDamageTaken(Unit* /*target*/, Unit* /*attacker*/, int32& /*damage*/) { }
373};
374
375class CreatureScript : public UnitScript, public UpdatableScript<Creature>
376{
377protected:
378 CreatureScript(const char* name);
379
380public:
381 bool IsDatabaseBound() const FINAL { return true; }
382
383 // Called when a dummy spell effect is triggered on the creature.
384 virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, Creature* /*target*/) { return false; }
385
386 // Called when a player opens a gossip dialog with the creature.
387 virtual bool OnGossipHello(Player* /*player*/, Creature* /*creature*/) { return false; }
388
389 // Called when a player selects a gossip item in the creature's gossip menu.
390 virtual bool OnGossipSelect(Player* /*player*/, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/) { return false; }
391
392 // Called when a player selects a gossip with a code in the creature's gossip menu.
393 virtual bool OnGossipSelectCode(Player* /*player*/, Creature* /*creature*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { return false; }
394
395 // Called when a player accepts a quest from the creature.
396 virtual bool OnQuestAccept(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; }
397
398 // Called when a player selects a quest in the creature's quest menu.
399 virtual bool OnQuestSelect(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; }
400
401 // Called when a player completes a quest with the creature.
402 virtual bool OnQuestComplete(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/) { return false; }
403
404 // Called when a player selects a quest reward.
405 virtual bool OnQuestReward(Player* /*player*/, Creature* /*creature*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; }
406
407 // Called when the dialog status between a player and the creature is requested.
408 virtual uint32 GetDialogStatus(Player* /*player*/, Creature* /*creature*/) { return 100; }
409
410 // Called when a CreatureAI object is needed for the creature.
411 virtual CreatureAI* GetAI(Creature* /*creature*/) const { return NULL; }
412};
413
414class GameObjectScript : public ScriptObject, public UpdatableScript<GameObject>
415{
416protected:
417 GameObjectScript(const char* name);
418
419public:
420 bool IsDatabaseBound() const FINAL { return true; }
421
422 // Called when a dummy spell effect is triggered on the gameobject.
423 virtual bool OnDummyEffect(Unit* /*caster*/, uint32 /*spellId*/, SpellEffIndex /*effIndex*/, GameObject* /*target*/) { return false; }
424
425 // Called when a player opens a gossip dialog with the gameobject.
426 virtual bool OnGossipHello(Player* /*player*/, GameObject* /*go*/) { return false; }
427
428 // Called when a player selects a gossip item in the gameobject's gossip menu.
429 virtual bool OnGossipSelect(Player* /*player*/, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/) { return false; }
430
431 // Called when a player selects a gossip with a code in the gameobject's gossip menu.
432 virtual bool OnGossipSelectCode(Player* /*player*/, GameObject* /*go*/, uint32 /*sender*/, uint32 /*action*/, const char* /*code*/) { return false; }
433
434 // Called when a player accepts a quest from the gameobject.
435 virtual bool OnQuestAccept(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/) { return false; }
436
437 // Called when a player selects a quest reward.
438 virtual bool OnQuestReward(Player* /*player*/, GameObject* /*go*/, Quest const* /*quest*/, uint32 /*opt*/) { return false; }
439
440 // Called when the dialog status between a player and the gameobject is requested.
441 virtual uint32 GetDialogStatus(Player* /*player*/, GameObject* /*go*/) { return 100; }
442
443 // Called when the game object is destroyed (destructible buildings only).
444 virtual void OnDestroyed(GameObject* /*go*/, Player* /*player*/) { }
445
446 // Called when the game object is damaged (destructible buildings only).
447 virtual void OnDamaged(GameObject* /*go*/, Player* /*player*/) { }
448
449 // Called when the game object loot state is changed.
450 virtual void OnLootStateChanged(GameObject* /*go*/, uint32 /*state*/, Unit* /*unit*/) { }
451
452 // Called when the game object state is changed.
453 virtual void OnGameObjectStateChanged(GameObject* /*go*/, uint32 /*state*/) { }
454
455 // Called when a GameObjectAI object is needed for the gameobject.
456 virtual GameObjectAI* GetAI(GameObject* /*go*/) const { return NULL; }
457};
458
460{
461protected:
462 AreaTriggerScript(const char* name);
463
464public:
465 bool IsDatabaseBound() const FINAL { return true; }
466
467 // Called when the area trigger is activated by a player.
468 virtual bool OnTrigger(Player* /*player*/, AreaTriggerEntry const* /*trigger*/) { return false; }
469};
470
472{
473protected:
474 BattlegroundScript(const char* name);
475
476public:
477 bool IsDatabaseBound() const FINAL { return true; }
478
479 // Should return a fully valid Battleground object for the type ID.
480 virtual Battleground* GetBattleground() const = 0;
481};
482
484{
485protected:
486 OutdoorPvPScript(const char* name);
487
488public:
489 bool IsDatabaseBound() const FINAL { return true; }
490
491 // Should return a fully valid OutdoorPvP object for the type ID.
492 virtual OutdoorPvP* GetOutdoorPvP() const = 0;
493};
494
496{
497protected:
498 CommandScript(const char* name);
499
500public:
501 // Should return a pointer to a valid command table (ChatCommand array) to be used by ChatHandler.
502 virtual std::vector<ChatCommand> GetCommands() const = 0;
503};
504
505class WeatherScript : public ScriptObject, public UpdatableScript<Weather>
506{
507protected:
508 WeatherScript(const char* name);
509
510public:
511 bool IsDatabaseBound() const FINAL { return true; }
512
513 // Called when the weather changes in the zone this script is associated with.
514 virtual void OnChange(Weather* /*weather*/, WeatherState /*state*/, float /*grade*/) { }
515};
516
518{
519protected:
520 AuctionHouseScript(const char* name);
521
522public:
523 // Called when an auction is added to an auction house.
524 virtual void OnAuctionAdd(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
525
526 // Called when an auction is removed from an auction house.
527 virtual void OnAuctionRemove(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
528
529 // Called when an auction was succesfully completed.
530 virtual void OnAuctionSuccessful(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
531
532 // Called when an auction expires.
533 virtual void OnAuctionExpire(AuctionHouseObject* /*ah*/, AuctionEntry* /*entry*/) { }
534};
535
537{
538protected:
539 ConditionScript(const char* name);
540
541public:
542 bool IsDatabaseBound() const FINAL { return true; }
543
544 // Called when a single condition is checked for a player.
545 virtual bool OnConditionCheck(Condition* /*condition*/, ConditionSourceInfo& /*sourceInfo*/) { return true; }
546};
547
549{
550protected:
551 VehicleScript(const char* name);
552
553public:
554 // Called after a vehicle is installed.
555 virtual void OnInstall(Vehicle* /*veh*/) { }
556
557 // Called after a vehicle is uninstalled.
558 virtual void OnUninstall(Vehicle* /*veh*/) { }
559
560 // Called when a vehicle resets.
561 virtual void OnReset(Vehicle* /*veh*/) { }
562
563 // Called after an accessory is installed in a vehicle.
564 virtual void OnInstallAccessory(Vehicle* /*veh*/, Creature* /*accessory*/) { }
565
566 // Called after a passenger is added to a vehicle.
567 virtual void OnAddPassenger(Vehicle* /*veh*/, Unit* /*passenger*/, int8 /*seatId*/) { }
568
569 // Called after a passenger is removed from a vehicle.
570 virtual void OnRemovePassenger(Vehicle* /*veh*/, Unit* /*passenger*/) { }
571};
572
573class DynamicObjectScript : public ScriptObject, public UpdatableScript<DynamicObject>
574{
575protected:
576 DynamicObjectScript(const char* name);
577};
578
579class TransportScript : public ScriptObject, public UpdatableScript<Transport>
580{
581protected:
582 TransportScript(const char* name);
583
584public:
585 bool IsDatabaseBound() const FINAL { return true; }
586
587 // Called when a player boards the transport.
588 virtual void OnAddPassenger(Transport* /*transport*/, Player* /*player*/) { }
589
590 // Called when a creature boards the transport.
591 virtual void OnAddCreaturePassenger(Transport* /*transport*/, Creature* /*creature*/) { }
592
593 // Called when a player exits the transport.
594 virtual void OnRemovePassenger(Transport* /*transport*/, Player* /*player*/) { }
595
596 // Called when a transport moves.
597 virtual void OnRelocate(Transport* /*transport*/, uint32 /*waypointId*/, uint32 /*mapId*/, float /*x*/, float /*y*/, float /*z*/) { }
598};
599
601{
602protected:
603 AchievementCriteriaScript(const char* name);
604
605public:
606 bool IsDatabaseBound() const FINAL { return true; }
607
608 // Called when an additional criteria is checked.
609 virtual bool OnCheck(Player* source, Unit* target) = 0;
610};
611
613{
614protected:
615 PlayerScript(const char* name);
616
617public:
618 // Called when a player kills another player
619 virtual void OnPVPKill(Player* /*killer*/, Player* /*killed*/) { }
620
621 // Called when a player kills a creature
622 virtual void OnCreatureKill(Player* /*killer*/, Creature* /*killed*/) { }
623
624 // Called when a player is killed by a creature
625 virtual void OnPlayerKilledByCreature(Creature* /*killer*/, Player* /*killed*/) { }
626
627 // Called when a player's level changes (after the level is applied)
628 virtual void OnLevelChanged(Player* /*player*/, uint8 /*oldLevel*/) { }
629
630 // Called when a player's free talent points change (right before the change is applied)
631 virtual void OnFreeTalentPointsChanged(Player* /*player*/, uint32 /*points*/) { }
632
633 // Called when a player's talent points are reset (right before the reset is done)
634 virtual void OnTalentsReset(Player* /*player*/, bool /*noCost*/) { }
635
636 // Called when a player's money is modified (before the modification is done)
637 virtual void OnMoneyChanged(Player* /*player*/, int64& /*amount*/) { }
638
639 // Called when a player gains XP (before anything is given)
640 virtual void OnGiveXP(Player* /*player*/, uint32& /*amount*/, Unit* /*victim*/) { }
641
642 // Called when a player's reputation changes (before it is actually changed)
643 virtual void OnReputationChange(Player* /*player*/, uint32 /*factionId*/, int32& /*standing*/, bool /*incremental*/) { }
644
645 // Called when a duel is requested
646 virtual void OnDuelRequest(Player* /*target*/, Player* /*challenger*/) { }
647
648 // Called when a duel starts (after 3s countdown)
649 virtual void OnDuelStart(Player* /*player1*/, Player* /*player2*/) { }
650
651 // Called when a duel ends
652 virtual void OnDuelEnd(Player* /*winner*/, Player* /*loser*/, DuelCompleteType /*type*/) { }
653
654 // The following methods are called when a player sends a chat message.
655 virtual void OnChat(Player* /*player*/, ChatMsg /*type*/, Language /*lang*/, std::string& /*msg*/) { }
656
657 virtual void OnChat(Player* /*player*/, ChatMsg /*type*/, Language /*lang*/, std::string& /*msg*/, Player* /*receiver*/) { }
658
659 virtual void OnChat(Player* /*player*/, ChatMsg /*type*/, Language /*lang*/, std::string& /*msg*/, Group* /*group*/) { }
660
661 virtual void OnChat(Player* /*player*/, ChatMsg /*type*/, Language /*lang*/, std::string& /*msg*/, Guild* /*guild*/) { }
662
663 virtual void OnChat(Player* /*player*/, ChatMsg /*type*/, Language /*lang*/, std::string& /*msg*/, Channel* /*channel*/) { }
664
665 // Both of the below are called on emote opcodes.
666 virtual void OnEmote(Player* /*player*/, uint32 /*emote*/) { }
667
668 virtual void OnTextEmote(Player* /*player*/, uint32 /*textEmote*/, uint32 /*emoteNum*/, uint64 /*guid*/) { }
669
670 // Called in Spell::Cast.
671 virtual void OnSpellCast(Player* /*player*/, Spell* /*spell*/, bool /*skipCheck*/) { }
672
673 // Called when a player logs in.
674 virtual void OnLogin(Player* /*player*/, bool /*firstLogin*/) { }
675
676 // Called when a player logs out.
677 virtual void OnLogout(Player* /*player*/) { }
678
679 // Called when a player is created.
680 virtual void OnCreate(Player* /*player*/) { }
681
682 // Called when a player is deleted.
683 virtual void OnDelete(uint64 /*guid*/) { }
684
685 // Called when a player is about to be saved.
686 virtual void OnSave(Player* /*player*/) { }
687
688 // Called when a player is bound to an instance
689 virtual void OnBindToInstance(Player* /*player*/, DifficultyID /*difficulty*/, uint32 /*mapId*/, bool /*permanent*/) { }
690
691 // Called when a player switches to a new zone
692 virtual void OnUpdateZone(Player* /*player*/, uint32 /*newZone*/, uint32 /*newArea*/) { }
693
694 // Called when a player changes to a new map (after moving to new map)
695 virtual void OnMapChanged(Player* /*player*/) { }
696};
697
699{
700protected:
701 GuildScript(const char* name);
702
703public:
704 bool IsDatabaseBound() const FINAL { return false; }
705
706 // Called when a member is added to the guild.
707 virtual void OnAddMember(Guild* /*guild*/, Player* /*player*/, uint8& /*plRank*/) { }
708
709 // Called when a member is removed from the guild.
710 virtual void OnRemoveMember(Guild* /*guild*/, Player* /*player*/, bool /*isDisbanding*/, bool /*isKicked*/) { }
711
712 // Called when the guild MOTD (message of the day) changes.
713 virtual void OnMOTDChanged(Guild* /*guild*/, const std::string& /*newMotd*/) { }
714
715 // Called when the guild info is altered.
716 virtual void OnInfoChanged(Guild* /*guild*/, const std::string& /*newInfo*/) { }
717
718 // Called when a guild is created.
719 virtual void OnCreate(Guild* /*guild*/, Player* /*leader*/, const std::string& /*name*/) { }
720
721 // Called when a guild is disbanded.
722 virtual void OnDisband(Guild* /*guild*/) { }
723
724 // Called when a guild member withdraws money from a guild bank.
725 virtual void OnMemberWitdrawMoney(Guild* /*guild*/, Player* /*player*/, uint64& /*amount*/, bool /*isRepair*/) { }
726
727 // Called when a guild member deposits money in a guild bank.
728 virtual void OnMemberDepositMoney(Guild* /*guild*/, Player* /*player*/, uint64& /*amount*/) { }
729
730 // Called when a guild member moves an item in a guild bank.
731 virtual void OnItemMove(Guild* /*guild*/, Player* /*player*/, Item* /*pItem*/, bool /*isSrcBank*/, uint8 /*srcContainer*/, uint8 /*srcSlotId*/,
732 bool /*isDestBank*/, uint8 /*destContainer*/, uint8 /*destSlotId*/) { }
733
734 virtual void OnEvent(Guild* /*guild*/, uint8 /*eventType*/, uint32 /*playerGuid1*/, uint32 /*playerGuid2*/, uint8 /*newRank*/) { }
735
736 virtual void OnBankEvent(Guild* /*guild*/, uint8 /*eventType*/, uint8 /*tabId*/, uint32 /*playerGuid*/, uint32 /*itemOrMoney*/, uint16 /*itemStackCount*/, uint8 /*destTabId*/) { }
737};
738
740{
741protected:
742 GroupScript(const char* name);
743
744public:
745 bool IsDatabaseBound() const FINAL { return false; }
746
747 // Called when a member is added to a group.
748 virtual void OnAddMember(Group* /*group*/, uint64 /*guid*/) { }
749
750 // Called when a member is invited to join a group.
751 virtual void OnInviteMember(Group* /*group*/, uint64 /*guid*/) { }
752
753 // Called when a member is removed from a group.
754 virtual void OnRemoveMember(Group* /*group*/, uint64 /*guid*/, RemoveMethod /*method*/, uint64 /*kicker*/, const char* /*reason*/) { }
755
756 // Called when the leader of a group is changed.
757 virtual void OnChangeLeader(Group* /*group*/, uint64 /*newLeaderGuid*/, uint64 /*oldLeaderGuid*/) { }
758
759 // Called when a group is disbanded.
760 virtual void OnDisband(Group* /*group*/) { }
761};
762
763// Placed here due to ScriptRegistry::AddScript dependency.
764#define sScriptMgr Skyfire::Singleton<ScriptMgr, Skyfire::NullMutex>::instance()
765
766// Manages registration, loading, and execution of scripts.
768{
769 friend class Skyfire::Singleton<ScriptMgr, Skyfire::NullMutex>;
770 friend class ScriptObject;
771
772private:
773 ScriptMgr();
774 virtual ~ScriptMgr();
775
776public: /* Initialization */
777 void Initialize();
778 void LoadDatabase();
779 void FillSpellSummary();
780
781 const char* ScriptsVersion() const { return "Integrated Skyfire Scripts"; }
782
785
786 /* Unloading */
787 void Unload();
788
789 /* SpellScriptLoader */
790 void CreateSpellScripts(uint32 spellId, std::list<SpellScript*>& scriptVector);
791 void CreateAuraScripts(uint32 spellId, std::list<AuraScript*>& scriptVector);
792 void CreateSpellScriptLoaders(uint32 spellId, std::vector<std::pair<SpellScriptLoader*, std::multimap<uint32, uint32>::iterator> >& scriptVector);
793
794 /* ServerScript */
795 void OnNetworkStart();
796 void OnNetworkStop();
797 void OnSocketOpen(WorldSocket* socket);
798 void OnSocketClose(WorldSocket* socket, bool wasNew);
799 void OnPacketReceive(WorldSocket* socket, WorldPacket packet);
800 void OnPacketSend(WorldSocket* socket, WorldPacket packet);
801 void OnUnknownPacketReceive(WorldSocket* socket, WorldPacket packet);
802
803 /* WorldScript */
804 void OnOpenStateChange(bool open);
805 void OnConfigLoad(bool reload);
806 void OnMotdChange(std::string& newMotd);
808 void OnShutdownCancel();
809 void OnWorldUpdate(uint32 diff);
810 void OnStartup();
811 void OnShutdown();
812
813 /* FormulaScript */
814 void OnHonorCalculation(float& honor, uint8 level, float multiplier);
815 void OnGrayLevelCalculation(uint8& grayLevel, uint8 playerLevel);
816 void OnColorCodeCalculation(XPColorChar& color, uint8 playerLevel, uint8 mobLevel);
817 void OnZeroDifferenceCalculation(uint8& diff, uint8 playerLevel);
818 void OnBaseGainCalculation(uint32& gain, uint8 playerLevel, uint8 mobLevel, ContentLevels content);
819 void OnGainCalculation(uint32& gain, Player* player, Unit* unit);
820 void OnGroupRateCalculation(float& rate, uint32 count, bool isRaid);
821
822 /* MapScript */
823 void OnCreateMap(Map* map);
824 void OnDestroyMap(Map* map);
825 void OnLoadGridMap(Map* map, GridMap* gmap, uint32 gx, uint32 gy);
826 void OnUnloadGridMap(Map* map, GridMap* gmap, uint32 gx, uint32 gy);
827 void OnPlayerEnterMap(Map* map, Player* player);
828 void OnPlayerLeaveMap(Map* map, Player* player);
829 void OnMapUpdate(Map* map, uint32 diff);
830
831 /* InstanceMapScript */
833
834 /* ItemScript */
835 bool OnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex, Item* target);
836 bool OnQuestAccept(Player* player, Item* item, Quest const* quest);
837 bool OnItemUse(Player* player, Item* item, SpellCastTargets const& targets);
838 bool OnItemExpire(Player* player, ItemTemplate const* proto);
839
840 /* CreatureScript */
841 bool OnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex, Creature* target);
842 bool OnGossipHello(Player* player, Creature* creature);
843 bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action);
844 bool OnGossipSelectCode(Player* player, Creature* creature, uint32 sender, uint32 action, const char* code);
845 bool OnQuestAccept(Player* player, Creature* creature, Quest const* quest);
846 bool OnQuestSelect(Player* player, Creature* creature, Quest const* quest);
847 bool OnQuestComplete(Player* player, Creature* creature, Quest const* quest);
848 bool OnQuestReward(Player* player, Creature* creature, Quest const* quest, uint32 opt);
849 uint32 GetDialogStatus(Player* player, Creature* creature);
851 void OnCreatureUpdate(Creature* creature, uint32 diff);
852
853 /* GameObjectScript */
854 bool OnDummyEffect(Unit* caster, uint32 spellId, SpellEffIndex effIndex, GameObject* target);
855 bool OnGossipHello(Player* player, GameObject* go);
856 bool OnGossipSelect(Player* player, GameObject* go, uint32 sender, uint32 action);
857 bool OnGossipSelectCode(Player* player, GameObject* go, uint32 sender, uint32 action, const char* code);
858 bool OnQuestAccept(Player* player, GameObject* go, Quest const* quest);
859 bool OnQuestReward(Player* player, GameObject* go, Quest const* quest, uint32 opt);
861 void OnGameObjectDestroyed(GameObject* go, Player* player);
862 void OnGameObjectDamaged(GameObject* go, Player* player);
863 void OnGameObjectLootStateChanged(GameObject* go, uint32 state, Unit* unit);
865 void OnGameObjectUpdate(GameObject* go, uint32 diff);
867
868 /* AreaTriggerScript */
869 bool OnAreaTrigger(Player* player, AreaTriggerEntry const* trigger);
870
871 /* BattlegroundScript */
873
874 /* OutdoorPvPScript */
876
877 /* CommandScript */
878 std::vector<ChatCommand> GetChatCommands();
879
880 /* WeatherScript */
881 void OnWeatherChange(Weather* weather, WeatherState state, float grade);
882 void OnWeatherUpdate(Weather* weather, uint32 diff);
883
884 /* AuctionHouseScript */
889
890 /* ConditionScript */
891 bool OnConditionCheck(Condition* condition, ConditionSourceInfo& sourceInfo);
892
893 /* VehicleScript */
894 void OnInstall(Vehicle* veh);
895 void OnUninstall(Vehicle* veh);
896 void OnReset(Vehicle* veh);
897 void OnInstallAccessory(Vehicle* veh, Creature* accessory);
898 void OnAddPassenger(Vehicle* veh, Unit* passenger, int8 seatId);
899 void OnRemovePassenger(Vehicle* veh, Unit* passenger);
900
901 /* DynamicObjectScript */
902 void OnDynamicObjectUpdate(DynamicObject* dynobj, uint32 diff);
903
904 /* TransportScript */
905 void OnAddPassenger(Transport* transport, Player* player);
906 void OnAddCreaturePassenger(Transport* transport, Creature* creature);
907 void OnRemovePassenger(Transport* transport, Player* player);
908 void OnTransportUpdate(Transport* transport, uint32 diff);
909 void OnRelocate(Transport* transport, uint32 waypointId, uint32 mapId, float x, float y, float z);
910
911 /* AchievementCriteriaScript */
912 bool OnCriteriaCheck(uint32 scriptId, Player* source, Unit* target);
913
914 /* PlayerScript */
915 void OnPVPKill(Player* killer, Player* killed);
916 void OnCreatureKill(Player* killer, Creature* killed);
917 void OnPlayerKilledByCreature(Creature* killer, Player* killed);
918 void OnPlayerLevelChanged(Player* player, uint8 oldLevel);
919 void OnPlayerFreeTalentPointsChanged(Player* player, uint32 newPoints);
920 void OnPlayerTalentsReset(Player* player, bool noCost);
921 void OnPlayerMoneyChanged(Player* player, int64& amount);
922 void OnGivePlayerXP(Player* player, uint32& amount, Unit* victim);
923 void OnPlayerReputationChange(Player* player, uint32 factionID, int32& standing, bool incremental);
924 void OnPlayerDuelRequest(Player* target, Player* challenger);
925 void OnPlayerDuelStart(Player* player1, Player* player2);
926 void OnPlayerDuelEnd(Player* winner, Player* loser, DuelCompleteType type);
927 void OnPlayerChat(Player* player, ChatMsg type, Language lang, std::string& msg);
928 void OnPlayerChat(Player* player, ChatMsg type, Language lang, std::string& msg, Player* receiver);
929 void OnPlayerChat(Player* player, ChatMsg type, Language lang, std::string& msg, Group* group);
930 void OnPlayerChat(Player* player, ChatMsg type, Language lang, std::string& msg, Guild* guild);
931 void OnPlayerChat(Player* player, ChatMsg type, Language lang, std::string& msg, Channel* channel);
932 void OnPlayerEmote(Player* player, uint32 emote);
933 void OnPlayerTextEmote(Player* player, uint32 textEmote, uint32 emoteNum, uint64 guid);
934 void OnPlayerSpellCast(Player* player, Spell* spell, bool skipCheck);
935 void OnPlayerLogin(Player* player, bool firstLogin);
936 void OnPlayerLogout(Player* player);
937 void OnPlayerCreate(Player* player);
938 void OnPlayerDelete(uint64 guid);
939 void OnPlayerSave(Player* player);
940 void OnPlayerBindToInstance(Player* player, DifficultyID difficulty, uint32 mapid, bool permanent);
941 void OnPlayerUpdateZone(Player* player, uint32 newZone, uint32 newArea);
942
943 /* GuildScript */
944 void OnGuildAddMember(Guild* guild, Player* player, uint8& plRank);
945 void OnGuildRemoveMember(Guild* guild, Player* player, bool isDisbanding, bool isKicked);
946 void OnGuildMOTDChanged(Guild* guild, const std::string& newMotd);
947 void OnGuildInfoChanged(Guild* guild, const std::string& newInfo);
948 void OnGuildCreate(Guild* guild, Player* leader, const std::string& name);
949 void OnGuildDisband(Guild* guild);
950 void OnGuildMemberWitdrawMoney(Guild* guild, Player* player, uint64& amount, bool isRepair);
951 void OnGuildMemberDepositMoney(Guild* guild, Player* player, uint64& amount);
952 void OnGuildItemMove(Guild* guild, Player* player, Item* pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId,
953 bool isDestBank, uint8 destContainer, uint8 destSlotId);
954 void OnGuildEvent(Guild* guild, uint8 eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank);
955 void OnGuildBankEvent(Guild* guild, uint8 eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId);
956
957 /* GroupScript */
958 void OnGroupAddMember(Group* group, uint64 guid);
959 void OnGroupInviteMember(Group* group, uint64 guid);
960 void OnGroupRemoveMember(Group* group, uint64 guid, RemoveMethod method, uint64 kicker, const char* reason);
961 void OnGroupChangeLeader(Group* group, uint64 newLeaderGuid, uint64 oldLeaderGuid);
962 void OnGroupDisband(Group* group);
963
964 /* UnitScript */
965 void OnHeal(Unit* healer, Unit* reciever, uint32& gain);
966 void OnDamage(Unit* attacker, Unit* victim, uint32& damage);
967 void ModifyPeriodicDamageAurasTick(Unit* target, Unit* attacker, uint32& damage);
968 void ModifyMeleeDamage(Unit* target, Unit* attacker, uint32& damage);
969 void ModifySpellDamageTaken(Unit* target, Unit* attacker, int32& damage);
970
971 /* Scheduled scripts */
974 uint32 DecreaseScheduledScriptCount(size_t count) { return _scheduledScripts -= count; }
975 bool IsScriptScheduled() const { return _scheduledScripts > 0; }
976
977private:
979
980 //atomic op counter for active scripts amount
981 std::atomic<long> _scheduledScripts;
982};
983
984template <class S>
986{
987public:
988 GenericSpellScriptLoader(char const* name) : SpellScriptLoader(name) { }
989 SpellScript* GetSpellScript() const override { return new S(); }
990};
991#define RegisterSpellScript(spell_script) new GenericSpellScriptLoader<spell_script>(#spell_script)
992
993template <class A>
995{
996public:
997 GenericAuraScriptLoader(char const* name) : SpellScriptLoader(name) { }
998 AuraScript* GetAuraScript() const override { return new A(); }
999};
1000#define RegisterAuraScript(aura_script) new GenericAuraScriptLoader<aura_script>(#aura_script)
1001
1002template <class S, class A>
1004{
1005public:
1007 SpellScript* GetSpellScript() const override { return new S(); }
1008 AuraScript* GetAuraScript() const override { return new A(); }
1009};
1010#define RegisterSpellAndAuraScriptPair(spell_script, aura_script) new GenericSpellAndAuraScriptLoader<spell_script, aura_script>(#spell_script)
1011
1012template <class AI>
1014{
1015public:
1016 GenericCreatureScript(char const* name) : CreatureScript(name) { }
1017 CreatureAI* GetAI(Creature* me) const override { return new AI(me); }
1018};
1019#define RegisterCreatureAI(ai_name) new GenericCreatureScript<ai_name>(#ai_name)
1020
1021template <class AI, AI* (*AIFactory)(Creature*)>
1023{
1024public:
1025 FactoryCreatureScript(char const* name) : CreatureScript(name) { }
1026 CreatureAI* GetAI(Creature* me) const override { return AIFactory(me); }
1027};
1028#define RegisterCreatureAIWithFactory(ai_name, factory_fn) new FactoryCreatureScript<ai_name, &factory_fn>(#ai_name)
1029
1030template <class AI>
1032{
1033public:
1034 GenericGameObjectScript(char const* name) : GameObjectScript(name) { }
1035 GameObjectAI* GetAI(GameObject* go) const override { return new AI(go); }
1036};
1037#define RegisterGameObjectAI(ai_name) new GenericGameObjectScript<ai_name>(#ai_name)
1038
1039#endif
DifficultyID
Definition DBCEnums.h:330
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
ContentLevels
Definition DBCStores.h:37
std::int32_t int32
Definition Define.h:73
std::uint8_t uint8
Definition Define.h:79
std::uint32_t uint32
Definition Define.h:77
std::int8_t int8
Definition Define.h:75
#define FINAL
Definition Define.h:61
std::uint64_t uint64
Definition Define.h:76
std::int64_t int64
Definition Define.h:72
std::uint16_t uint16
Definition Define.h:78
#define SF_LOG_ERROR(filterType__,...)
Definition Log.h:143
SpellEffIndex
ChatMsg
Language
RemoveMethod
DuelCompleteType
XPColorChar
BattlegroundTypeId
virtual bool OnCheck(Player *source, Unit *target)=0
AchievementCriteriaScript(const char *name)
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:606
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:465
AreaTriggerScript(const char *name)
virtual bool OnTrigger(Player *, AreaTriggerEntry const *)
Definition ScriptMgr.h:468
virtual void OnAuctionExpire(AuctionHouseObject *, AuctionEntry *)
Definition ScriptMgr.h:533
virtual void OnAuctionAdd(AuctionHouseObject *, AuctionEntry *)
Definition ScriptMgr.h:524
virtual void OnAuctionSuccessful(AuctionHouseObject *, AuctionEntry *)
Definition ScriptMgr.h:530
virtual void OnAuctionRemove(AuctionHouseObject *, AuctionEntry *)
Definition ScriptMgr.h:527
AuctionHouseScript(const char *name)
BattlegroundMapScript(const char *name, uint32 mapId)
BattlegroundScript(const char *name)
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:477
virtual Battleground * GetBattleground() const =0
virtual std::vector< ChatCommand > GetCommands() const =0
CommandScript(const char *name)
virtual bool OnConditionCheck(Condition *, ConditionSourceInfo &)
Definition ScriptMgr.h:545
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:542
ConditionScript(const char *name)
virtual bool OnQuestSelect(Player *, Creature *, Quest const *)
Definition ScriptMgr.h:399
virtual CreatureAI * GetAI(Creature *) const
Definition ScriptMgr.h:411
virtual bool OnGossipSelect(Player *, Creature *, uint32, uint32)
Definition ScriptMgr.h:390
virtual uint32 GetDialogStatus(Player *, Creature *)
Definition ScriptMgr.h:408
virtual bool OnQuestComplete(Player *, Creature *, Quest const *)
Definition ScriptMgr.h:402
virtual bool OnGossipHello(Player *, Creature *)
Definition ScriptMgr.h:387
virtual bool OnQuestAccept(Player *, Creature *, Quest const *)
Definition ScriptMgr.h:396
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:381
virtual bool OnDummyEffect(Unit *, uint32, SpellEffIndex, Creature *)
Definition ScriptMgr.h:384
virtual bool OnQuestReward(Player *, Creature *, Quest const *, uint32)
Definition ScriptMgr.h:405
virtual bool OnGossipSelectCode(Player *, Creature *, uint32, uint32, const char *)
Definition ScriptMgr.h:393
CreatureScript(const char *name)
DynamicObjectScript(const char *name)
CreatureAI * GetAI(Creature *me) const override
Definition ScriptMgr.h:1026
FactoryCreatureScript(char const *name)
Definition ScriptMgr.h:1025
virtual void OnGroupRateCalculation(float &, uint32, bool)
Definition ScriptMgr.h:270
FormulaScript(const char *name)
virtual void OnHonorCalculation(float &, uint8, float)
Definition ScriptMgr.h:252
virtual void OnZeroDifferenceCalculation(uint8 &, uint8)
Definition ScriptMgr.h:261
virtual void OnColorCodeCalculation(XPColorChar &, uint8, uint8)
Definition ScriptMgr.h:258
virtual void OnGainCalculation(uint32 &, Player *, Unit *)
Definition ScriptMgr.h:267
virtual void OnBaseGainCalculation(uint32 &, uint8, uint8, ContentLevels)
Definition ScriptMgr.h:264
virtual void OnGrayLevelCalculation(uint8 &, uint8)
Definition ScriptMgr.h:255
virtual void OnDestroyed(GameObject *, Player *)
Definition ScriptMgr.h:444
virtual GameObjectAI * GetAI(GameObject *) const
Definition ScriptMgr.h:456
virtual bool OnDummyEffect(Unit *, uint32, SpellEffIndex, GameObject *)
Definition ScriptMgr.h:423
virtual bool OnQuestReward(Player *, GameObject *, Quest const *, uint32)
Definition ScriptMgr.h:438
virtual void OnDamaged(GameObject *, Player *)
Definition ScriptMgr.h:447
virtual void OnGameObjectStateChanged(GameObject *, uint32)
Definition ScriptMgr.h:453
virtual bool OnGossipHello(Player *, GameObject *)
Definition ScriptMgr.h:426
virtual bool OnGossipSelect(Player *, GameObject *, uint32, uint32)
Definition ScriptMgr.h:429
GameObjectScript(const char *name)
virtual void OnLootStateChanged(GameObject *, uint32, Unit *)
Definition ScriptMgr.h:450
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:420
virtual uint32 GetDialogStatus(Player *, GameObject *)
Definition ScriptMgr.h:441
virtual bool OnGossipSelectCode(Player *, GameObject *, uint32, uint32, const char *)
Definition ScriptMgr.h:432
virtual bool OnQuestAccept(Player *, GameObject *, Quest const *)
Definition ScriptMgr.h:435
GenericAuraScriptLoader(char const *name)
Definition ScriptMgr.h:997
AuraScript * GetAuraScript() const override
Definition ScriptMgr.h:998
GenericCreatureScript(char const *name)
Definition ScriptMgr.h:1016
CreatureAI * GetAI(Creature *me) const override
Definition ScriptMgr.h:1017
GenericGameObjectScript(char const *name)
Definition ScriptMgr.h:1034
GameObjectAI * GetAI(GameObject *go) const override
Definition ScriptMgr.h:1035
SpellScript * GetSpellScript() const override
Definition ScriptMgr.h:1007
AuraScript * GetAuraScript() const override
Definition ScriptMgr.h:1008
GenericSpellAndAuraScriptLoader(char const *name)
Definition ScriptMgr.h:1006
SpellScript * GetSpellScript() const override
Definition ScriptMgr.h:989
GenericSpellScriptLoader(char const *name)
Definition ScriptMgr.h:988
Definition Map.h:148
Definition Group.h:147
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:745
virtual void OnAddMember(Group *, uint64)
Definition ScriptMgr.h:748
virtual void OnDisband(Group *)
Definition ScriptMgr.h:760
virtual void OnRemoveMember(Group *, uint64, RemoveMethod, uint64, const char *)
Definition ScriptMgr.h:754
virtual void OnChangeLeader(Group *, uint64, uint64)
Definition ScriptMgr.h:757
GroupScript(const char *name)
virtual void OnInviteMember(Group *, uint64)
Definition ScriptMgr.h:751
Definition Guild.h:324
virtual void OnRemoveMember(Guild *, Player *, bool, bool)
Definition ScriptMgr.h:710
GuildScript(const char *name)
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:704
virtual void OnItemMove(Guild *, Player *, Item *, bool, uint8, uint8, bool, uint8, uint8)
Definition ScriptMgr.h:731
virtual void OnInfoChanged(Guild *, const std::string &)
Definition ScriptMgr.h:716
virtual void OnDisband(Guild *)
Definition ScriptMgr.h:722
virtual void OnEvent(Guild *, uint8, uint32, uint32, uint8)
Definition ScriptMgr.h:734
virtual void OnMemberDepositMoney(Guild *, Player *, uint64 &)
Definition ScriptMgr.h:728
virtual void OnBankEvent(Guild *, uint8, uint8, uint32, uint32, uint16, uint8)
Definition ScriptMgr.h:736
virtual void OnMemberWitdrawMoney(Guild *, Player *, uint64 &, bool)
Definition ScriptMgr.h:725
virtual void OnAddMember(Guild *, Player *, uint8 &)
Definition ScriptMgr.h:707
virtual void OnMOTDChanged(Guild *, const std::string &)
Definition ScriptMgr.h:713
virtual void OnCreate(Guild *, Player *, const std::string &)
Definition ScriptMgr.h:719
InstanceMapScript(const char *name, uint32 mapId)
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:320
virtual InstanceScript * GetInstanceScript(InstanceMap *) const
Definition ScriptMgr.h:323
Definition Item.h:202
ItemScript(const char *name)
virtual bool OnUse(Player *, Item *, SpellCastTargets const &)
Definition ScriptMgr.h:347
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:338
virtual bool OnExpire(Player *, ItemTemplate const *)
Definition ScriptMgr.h:350
virtual bool OnDummyEffect(Unit *, uint32, SpellEffIndex, Item *)
Definition ScriptMgr.h:341
virtual bool OnQuestAccept(Player *, Item *, Quest const *)
Definition ScriptMgr.h:344
Definition Map.h:238
MapScript(uint32 mapId)
Definition ScriptMgr.h:278
MapEntry const * _mapEntry
Definition ScriptMgr.h:275
virtual void OnUnloadGridMap(TMap *, GridMap *, uint32, uint32)
Definition ScriptMgr.h:299
virtual void OnPlayerLeave(TMap *, Player *)
Definition ScriptMgr.h:305
virtual void OnDestroy(TMap *)
Definition ScriptMgr.h:293
virtual void OnCreate(TMap *)
Definition ScriptMgr.h:290
virtual void OnPlayerEnter(TMap *, Player *)
Definition ScriptMgr.h:302
MapEntry const * GetEntry()
Definition ScriptMgr.h:287
virtual void OnLoadGridMap(TMap *, GridMap *, uint32, uint32)
Definition ScriptMgr.h:296
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:489
virtual OutdoorPvP * GetOutdoorPvP() const =0
OutdoorPvPScript(const char *name)
virtual void OnChat(Player *, ChatMsg, Language, std::string &, Group *)
Definition ScriptMgr.h:659
virtual void OnTalentsReset(Player *, bool)
Definition ScriptMgr.h:634
virtual void OnSave(Player *)
Definition ScriptMgr.h:686
virtual void OnChat(Player *, ChatMsg, Language, std::string &, Player *)
Definition ScriptMgr.h:657
virtual void OnLevelChanged(Player *, uint8)
Definition ScriptMgr.h:628
virtual void OnPVPKill(Player *, Player *)
Definition ScriptMgr.h:619
virtual void OnLogout(Player *)
Definition ScriptMgr.h:677
virtual void OnSpellCast(Player *, Spell *, bool)
Definition ScriptMgr.h:671
virtual void OnDuelRequest(Player *, Player *)
Definition ScriptMgr.h:646
virtual void OnFreeTalentPointsChanged(Player *, uint32)
Definition ScriptMgr.h:631
virtual void OnDelete(uint64)
Definition ScriptMgr.h:683
virtual void OnReputationChange(Player *, uint32, int32 &, bool)
Definition ScriptMgr.h:643
virtual void OnCreatureKill(Player *, Creature *)
Definition ScriptMgr.h:622
virtual void OnBindToInstance(Player *, DifficultyID, uint32, bool)
Definition ScriptMgr.h:689
virtual void OnChat(Player *, ChatMsg, Language, std::string &)
Definition ScriptMgr.h:655
virtual void OnDuelStart(Player *, Player *)
Definition ScriptMgr.h:649
PlayerScript(const char *name)
virtual void OnGiveXP(Player *, uint32 &, Unit *)
Definition ScriptMgr.h:640
virtual void OnMapChanged(Player *)
Definition ScriptMgr.h:695
virtual void OnDuelEnd(Player *, Player *, DuelCompleteType)
Definition ScriptMgr.h:652
virtual void OnChat(Player *, ChatMsg, Language, std::string &, Guild *)
Definition ScriptMgr.h:661
virtual void OnChat(Player *, ChatMsg, Language, std::string &, Channel *)
Definition ScriptMgr.h:663
virtual void OnUpdateZone(Player *, uint32, uint32)
Definition ScriptMgr.h:692
virtual void OnCreate(Player *)
Definition ScriptMgr.h:680
virtual void OnEmote(Player *, uint32)
Definition ScriptMgr.h:666
virtual void OnTextEmote(Player *, uint32, uint32, uint64)
Definition ScriptMgr.h:668
virtual void OnMoneyChanged(Player *, int64 &)
Definition ScriptMgr.h:637
virtual void OnLogin(Player *, bool)
Definition ScriptMgr.h:674
virtual void OnPlayerKilledByCreature(Creature *, Player *)
Definition ScriptMgr.h:625
bool OnItemUse(Player *player, Item *item, SpellCastTargets const &targets)
bool OnGossipHello(Player *player, Creature *creature)
void OnPlayerLogin(Player *player, bool firstLogin)
void OnPlayerCreate(Player *player)
void OnBaseGainCalculation(uint32 &gain, uint8 playerLevel, uint8 mobLevel, ContentLevels content)
void OnPlayerTalentsReset(Player *player, bool noCost)
void OnGuildAddMember(Guild *guild, Player *player, uint8 &plRank)
void OnOpenStateChange(bool open)
uint32 GetDialogStatus(Player *player, Creature *creature)
void OnShutdownCancel()
void OnGuildEvent(Guild *guild, uint8 eventType, uint32 playerGuid1, uint32 playerGuid2, uint8 newRank)
void OnPlayerTextEmote(Player *player, uint32 textEmote, uint32 emoteNum, uint64 guid)
void OnGroupChangeLeader(Group *group, uint64 newLeaderGuid, uint64 oldLeaderGuid)
void OnAuctionSuccessful(AuctionHouseObject *ah, AuctionEntry *entry)
void OnShutdown()
void OnPlayerChat(Player *player, ChatMsg type, Language lang, std::string &msg)
void OnPlayerFreeTalentPointsChanged(Player *player, uint32 newPoints)
void OnLoadGridMap(Map *map, GridMap *gmap, uint32 gx, uint32 gy)
void ModifyPeriodicDamageAurasTick(Unit *target, Unit *attacker, uint32 &damage)
bool OnQuestAccept(Player *player, Item *item, Quest const *quest)
void OnHonorCalculation(float &honor, uint8 level, float multiplier)
void OnGameObjectDestroyed(GameObject *go, Player *player)
void FillSpellSummary()
void OnUnknownPacketReceive(WorldSocket *socket, WorldPacket packet)
void OnDestroyMap(Map *map)
void OnGrayLevelCalculation(uint8 &grayLevel, uint8 playerLevel)
Battleground * CreateBattleground(BattlegroundTypeId typeId)
bool IsScriptScheduled() const
Definition ScriptMgr.h:975
uint32 IncreaseScheduledScriptsCount()
Definition ScriptMgr.h:972
uint32 GetScriptCount() const
Definition ScriptMgr.h:784
void OnGameObjectLootStateChanged(GameObject *go, uint32 state, Unit *unit)
void OnHeal(Unit *healer, Unit *reciever, uint32 &gain)
void OnUninstall(Vehicle *veh)
void OnPlayerLeaveMap(Map *map, Player *player)
void CreateAuraScripts(uint32 spellId, std::list< AuraScript * > &scriptVector)
void OnDynamicObjectUpdate(DynamicObject *dynobj, uint32 diff)
void OnGuildDisband(Guild *guild)
bool OnCriteriaCheck(uint32 scriptId, Player *source, Unit *target)
void OnRemovePassenger(Vehicle *veh, Unit *passenger)
std::vector< ChatCommand > GetChatCommands()
bool OnGossipSelect(Player *player, Creature *creature, uint32 sender, uint32 action)
void Initialize()
void OnAuctionExpire(AuctionHouseObject *ah, AuctionEntry *entry)
void OnPlayerMoneyChanged(Player *player, int64 &amount)
void ModifyMeleeDamage(Unit *target, Unit *attacker, uint32 &damage)
void OnMotdChange(std::string &newMotd)
void OnSocketClose(WorldSocket *socket, bool wasNew)
void OnGuildItemMove(Guild *guild, Player *player, Item *pItem, bool isSrcBank, uint8 srcContainer, uint8 srcSlotId, bool isDestBank, uint8 destContainer, uint8 destSlotId)
void OnTransportUpdate(Transport *transport, uint32 diff)
void CreateSpellScripts(uint32 spellId, std::list< SpellScript * > &scriptVector)
void OnGuildRemoveMember(Guild *guild, Player *player, bool isDisbanding, bool isKicked)
bool OnQuestReward(Player *player, Creature *creature, Quest const *quest, uint32 opt)
void OnGroupRemoveMember(Group *group, uint64 guid, RemoveMethod method, uint64 kicker, const char *reason)
void OnPlayerDuelEnd(Player *winner, Player *loser, DuelCompleteType type)
void OnPlayerReputationChange(Player *player, uint32 factionID, int32 &standing, bool incremental)
uint32 DecreaseScheduledScriptCount(size_t count)
Definition ScriptMgr.h:974
void OnPlayerSpellCast(Player *player, Spell *spell, bool skipCheck)
void IncrementScriptCount()
Definition ScriptMgr.h:783
bool OnQuestSelect(Player *player, Creature *creature, Quest const *quest)
void OnGroupAddMember(Group *group, uint64 guid)
void OnPVPKill(Player *killer, Player *killed)
void OnCreatureUpdate(Creature *creature, uint32 diff)
void OnWorldUpdate(uint32 diff)
void ModifySpellDamageTaken(Unit *target, Unit *attacker, int32 &damage)
void OnGroupRateCalculation(float &rate, uint32 count, bool isRaid)
GameObjectAI * GetGameObjectAI(GameObject *go)
void OnNetworkStop()
void OnReset(Vehicle *veh)
friend class ScriptObject
Definition ScriptMgr.h:770
bool OnGossipSelectCode(Player *player, Creature *creature, uint32 sender, uint32 action, const char *code)
void Unload()
bool OnAreaTrigger(Player *player, AreaTriggerEntry const *trigger)
void OnPlayerDelete(uint64 guid)
void OnGroupDisband(Group *group)
void OnZeroDifferenceCalculation(uint8 &diff, uint8 playerLevel)
void OnPacketSend(WorldSocket *socket, WorldPacket packet)
bool OnDummyEffect(Unit *caster, uint32 spellId, SpellEffIndex effIndex, Item *target)
void OnInstallAccessory(Vehicle *veh, Creature *accessory)
void OnGuildMOTDChanged(Guild *guild, const std::string &newMotd)
void OnDamage(Unit *attacker, Unit *victim, uint32 &damage)
void OnShutdownInitiate(ShutdownExitCode code, ShutdownMask mask)
void OnGuildInfoChanged(Guild *guild, const std::string &newInfo)
void OnPlayerKilledByCreature(Creature *killer, Player *killed)
void OnGainCalculation(uint32 &gain, Player *player, Unit *unit)
void OnPlayerLevelChanged(Player *player, uint8 oldLevel)
const char * ScriptsVersion() const
Definition ScriptMgr.h:781
void OnPlayerSave(Player *player)
void OnGuildBankEvent(Guild *guild, uint8 eventType, uint8 tabId, uint32 playerGuid, uint32 itemOrMoney, uint16 itemStackCount, uint8 destTabId)
void OnGameObjectDamaged(GameObject *go, Player *player)
void OnGroupInviteMember(Group *group, uint64 guid)
void OnPacketReceive(WorldSocket *socket, WorldPacket packet)
void OnGuildMemberDepositMoney(Guild *guild, Player *player, uint64 &amount)
void OnPlayerLogout(Player *player)
void OnGivePlayerXP(Player *player, uint32 &amount, Unit *victim)
void OnPlayerEmote(Player *player, uint32 emote)
void OnPlayerDuelRequest(Player *target, Player *challenger)
void OnConfigLoad(bool reload)
void OnMapUpdate(Map *map, uint32 diff)
CreatureAI * GetCreatureAI(Creature *creature)
void LoadDatabase()
void OnUnloadGridMap(Map *map, GridMap *gmap, uint32 gx, uint32 gy)
void OnPlayerEnterMap(Map *map, Player *player)
void OnInstall(Vehicle *veh)
OutdoorPvP * CreateOutdoorPvP(OutdoorPvPData const *data)
InstanceScript * CreateInstanceData(InstanceMap *map)
bool OnConditionCheck(Condition *condition, ConditionSourceInfo &sourceInfo)
void CreateSpellScriptLoaders(uint32 spellId, std::vector< std::pair< SpellScriptLoader *, std::multimap< uint32, uint32 >::iterator > > &scriptVector)
void OnGameObjectUpdate(GameObject *go, uint32 diff)
void OnWeatherUpdate(Weather *weather, uint32 diff)
bool OnQuestComplete(Player *player, Creature *creature, Quest const *quest)
uint32 _scriptCount
Definition ScriptMgr.h:978
void OnColorCodeCalculation(XPColorChar &color, uint8 playerLevel, uint8 mobLevel)
std::atomic< long > _scheduledScripts
Definition ScriptMgr.h:981
void OnPlayerUpdateZone(Player *player, uint32 newZone, uint32 newArea)
void OnRelocate(Transport *transport, uint32 waypointId, uint32 mapId, float x, float y, float z)
void OnStartup()
void OnPlayerBindToInstance(Player *player, DifficultyID difficulty, uint32 mapid, bool permanent)
void OnCreatureKill(Player *killer, Creature *killed)
void OnGuildCreate(Guild *guild, Player *leader, const std::string &name)
uint32 DecreaseScheduledScriptCount()
Definition ScriptMgr.h:973
void OnAuctionAdd(AuctionHouseObject *ah, AuctionEntry *entry)
void OnAddCreaturePassenger(Transport *transport, Creature *creature)
void OnPlayerDuelStart(Player *player1, Player *player2)
void OnGuildMemberWitdrawMoney(Guild *guild, Player *player, uint64 &amount, bool isRepair)
void OnAuctionRemove(AuctionHouseObject *ah, AuctionEntry *entry)
void OnGameObjectStateChanged(GameObject *go, uint32 state)
void OnSocketOpen(WorldSocket *socket)
void OnNetworkStart()
void OnWeatherChange(Weather *weather, WeatherState state, float grade)
bool OnItemExpire(Player *player, ItemTemplate const *proto)
void OnCreateMap(Map *map)
void OnAddPassenger(Vehicle *veh, Unit *passenger, int8 seatId)
virtual bool IsDatabaseBound() const
Definition ScriptMgr.h:144
const std::string & GetName() const
Definition ScriptMgr.h:146
friend class ScriptMgr
Definition ScriptMgr.h:139
const std::string _name
Definition ScriptMgr.h:155
ScriptObject(const char *name)
Definition ScriptMgr.h:149
virtual ~ScriptObject()
Definition ScriptMgr.h:152
virtual void OnSocketOpen(WorldSocket *)
Definition ScriptMgr.h:195
virtual void OnNetworkStop()
Definition ScriptMgr.h:192
virtual void OnUnknownPacketReceive(WorldSocket *, WorldPacket &)
Definition ScriptMgr.h:211
ServerScript(const char *name)
virtual void OnPacketReceive(WorldSocket *, WorldPacket &)
Definition ScriptMgr.h:207
virtual void OnNetworkStart()
Definition ScriptMgr.h:189
virtual void OnSocketClose(WorldSocket *, bool)
Definition ScriptMgr.h:199
virtual void OnPacketSend(WorldSocket *, WorldPacket &)
Definition ScriptMgr.h:203
Definition Spell.h:289
SpellScriptLoader(const char *name)
virtual SpellScript * GetSpellScript() const
Definition ScriptMgr.h:176
virtual AuraScript * GetAuraScript() const
Definition ScriptMgr.h:179
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:173
virtual void OnRelocate(Transport *, uint32, uint32, float, float, float)
Definition ScriptMgr.h:597
TransportScript(const char *name)
virtual void OnAddCreaturePassenger(Transport *, Creature *)
Definition ScriptMgr.h:591
virtual void OnRemovePassenger(Transport *, Player *)
Definition ScriptMgr.h:594
virtual void OnAddPassenger(Transport *, Player *)
Definition ScriptMgr.h:588
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:585
Definition Unit.h:1367
virtual void OnDamage(Unit *, Unit *, uint32 &)
Definition ScriptMgr.h:363
virtual void ModifySpellDamageTaken(Unit *, Unit *, int32 &)
Definition ScriptMgr.h:372
virtual void ModifyPeriodicDamageAurasTick(Unit *, Unit *, uint32 &)
Definition ScriptMgr.h:366
UnitScript(const char *name, bool addToScripts=true)
virtual void ModifyMeleeDamage(Unit *, Unit *, uint32 &)
Definition ScriptMgr.h:369
virtual void OnHeal(Unit *, Unit *, uint32 &)
Definition ScriptMgr.h:360
virtual ~UpdatableScript()
Definition ScriptMgr.h:162
virtual void OnUpdate(TObject *, uint32)
Definition ScriptMgr.h:164
virtual void OnReset(Vehicle *)
Definition ScriptMgr.h:561
virtual void OnAddPassenger(Vehicle *, Unit *, int8)
Definition ScriptMgr.h:567
virtual void OnUninstall(Vehicle *)
Definition ScriptMgr.h:558
VehicleScript(const char *name)
virtual void OnInstall(Vehicle *)
Definition ScriptMgr.h:555
virtual void OnRemovePassenger(Vehicle *, Unit *)
Definition ScriptMgr.h:570
virtual void OnInstallAccessory(Vehicle *, Creature *)
Definition ScriptMgr.h:564
Weather for one zone.
Definition Weather.h:53
bool IsDatabaseBound() const FINAL
Definition ScriptMgr.h:511
virtual void OnChange(Weather *, WeatherState, float)
Definition ScriptMgr.h:514
WeatherScript(const char *name)
WorldMapScript(const char *name, uint32 mapId)
virtual void OnStartup()
Definition ScriptMgr.h:239
virtual void OnConfigLoad(bool)
Definition ScriptMgr.h:224
virtual void OnShutdownCancel()
Definition ScriptMgr.h:233
virtual void OnShutdown()
Definition ScriptMgr.h:242
WorldScript(const char *name)
virtual void OnOpenStateChange(bool)
Definition ScriptMgr.h:221
virtual void OnShutdownInitiate(ShutdownExitCode, ShutdownMask)
Definition ScriptMgr.h:230
virtual void OnMotdChange(std::string &)
Definition ScriptMgr.h:227
virtual void OnUpdate(uint32)
Definition ScriptMgr.h:236
Handler that can communicate over stream sockets.
Definition WorldSocket.h:51
ShutdownMask
Definition World.h:57
WeatherState
Definition Weather.h:34
ShutdownExitCode
Definition World.h:63
uint8 Targets
Definition ScriptMgr.h:60
uint8 Effects
Definition ScriptMgr.h:61