AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
SmartAIMgr Class Reference

#include "SmartScriptMgr.h"

Public Member Functions

 ~SmartAIMgr ()
 
void LoadSmartAIFromDB ()
 
void CheckIfSmartAIInDatabaseExists ()
 
SmartAIEventList GetScript (int32 entry, SmartScriptType type)
 

Static Public Member Functions

static SmartAIMgrinstance ()
 

Private Member Functions

 SmartAIMgr ()
 
bool IsEventValid (SmartScriptHolder &e)
 
bool IsTargetValid (SmartScriptHolder const &e)
 
bool IsMinMaxValid (SmartScriptHolder const &e, uint32 min, uint32 max)
 
bool NotNULL (SmartScriptHolder const &e, uint32 data)
 
bool IsCreatureValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsQuestValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsGameObjectValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsSpellValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsItemValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsTextEmoteValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsEmoteValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsAreaTriggerValid (SmartScriptHolder const &e, uint32 entry)
 
bool IsSoundValid (SmartScriptHolder const &e, uint32 entry)
 

Static Private Member Functions

static bool EventHasInvoker (SMART_EVENT event)
 
static bool IsSAIBoolValid (SmartScriptHolder const &e, SAIBool value)
 
static bool IsTextValid (SmartScriptHolder const &e, uint32 id)
 
static bool CheckUnusedEventParams (SmartScriptHolder const &e)
 
static bool CheckUnusedActionParams (SmartScriptHolder const &e)
 
static bool CheckUnusedTargetParams (SmartScriptHolder const &e)
 

Private Attributes

SmartAIEventMap mEventMap [SMART_SCRIPT_TYPE_MAX]
 

Detailed Description

Constructor & Destructor Documentation

◆ SmartAIMgr()

SmartAIMgr::SmartAIMgr ( )
inlineprivate
2102{};

◆ ~SmartAIMgr()

SmartAIMgr::~SmartAIMgr ( )
inline
2104{};

Member Function Documentation

◆ CheckIfSmartAIInDatabaseExists()

void SmartAIMgr::CheckIfSmartAIInDatabaseExists ( )
322{
323 // SMART_SCRIPT_TYPE_CREATURE
324 for (auto const& [entry, creatureTemplate] : *sObjectMgr->GetCreatureTemplates())
325 {
326 if (creatureTemplate.AIName != "SmartAI")
327 continue;
328
329 bool found = false;
330
331 // check template SAI
333 found = true;
334 else
335 {
336 // check GUID SAI
337 for (auto const& pair : sObjectMgr->GetAllCreatureData())
338 {
339 if (pair.second.id != creatureTemplate.Entry)
340 continue;
341
343 {
344 found = true;
345 break;
346 }
347 }
348 }
349
350 if (!found)
351 LOG_ERROR("sql.sql", "Creature entry ({}) has SmartAI enabled but no SmartAI entries in the database.", creatureTemplate.Entry);
352 }
353
354 // SMART_SCRIPT_TYPE_GAMEOBJECT
355 for (auto const& [entry, gameobjectTemplate] : *sObjectMgr->GetGameObjectTemplates())
356 {
357 if (gameobjectTemplate.AIName != "SmartGameObjectAI")
358 continue;
359
360 bool found = false;
361
362 // check template SAI
364 found = true;
365 else
366 {
367 // check GUID SAI
368 for (auto const& pair : sObjectMgr->GetAllGOData())
369 {
370 if (pair.second.id != gameobjectTemplate.entry)
371 continue;
372
374 {
375 found = true;
376 break;
377 }
378 }
379 }
380
381 if (!found)
382 LOG_ERROR("sql.sql", "Gameobject entry ({}) has SmartGameobjectAI enabled but no SmartAI entries in the database.", gameobjectTemplate.entry);
383 }
384
385 // SMART_SCRIPT_TYPE_AREATRIGGER
386 uint32 scriptID = sObjectMgr->GetScriptId("SmartTrigger");
387
388 for (auto const& pair : sObjectMgr->GetAllAreaTriggerScriptData())
389 {
390 if (pair.second != scriptID)
391 continue;
392
394 LOG_ERROR("sql.sql", "AreaTrigger entry ({}) has SmartTrigger enabled but no SmartAI entries in the database.", pair.first);
395 }
396}
std::uint32_t uint32
Definition Define.h:107
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
#define sObjectMgr
Definition ObjectMgr.h:1732
@ SMART_SCRIPT_TYPE_CREATURE
Definition SmartScriptMgr.h:1794
@ SMART_SCRIPT_TYPE_GAMEOBJECT
Definition SmartScriptMgr.h:1795
@ SMART_SCRIPT_TYPE_AREATRIGGER
Definition SmartScriptMgr.h:1796
SmartAIEventMap mEventMap[SMART_SCRIPT_TYPE_MAX]
Definition SmartScriptMgr.h:2126

References LOG_ERROR, mEventMap, SMART_SCRIPT_TYPE_AREATRIGGER, SMART_SCRIPT_TYPE_CREATURE, SMART_SCRIPT_TYPE_GAMEOBJECT, and sObjectMgr.

Referenced by LoadSmartAIFromDB().

◆ CheckUnusedActionParams()

bool SmartAIMgr::CheckUnusedActionParams ( SmartScriptHolder const &  e)
staticprivate
716{
717 std::size_t paramsStructSize = [&]() -> std::size_t
718 {
719 constexpr std::size_t NO_PARAMS = std::size_t(0);
720 switch (e.action.type)
721 {
722 case SMART_ACTION_NONE: return NO_PARAMS;
723 case SMART_ACTION_TALK: return sizeof(SmartAction::talk);
726 case SMART_ACTION_SOUND: return sizeof(SmartAction::sound);
727 case SMART_ACTION_PLAY_EMOTE: return sizeof(SmartAction::emote);
728 case SMART_ACTION_FAIL_QUEST: return sizeof(SmartAction::quest);
731 case SMART_ACTION_ACTIVATE_GOBJECT: return NO_PARAMS;
733 case SMART_ACTION_CAST: return sizeof(SmartAction::cast);
738 case SMART_ACTION_RESERVED_16: return sizeof(SmartAction::raw);
746 case SMART_ACTION_EVADE: return NO_PARAMS;
749 case SMART_ACTION_COMBAT_STOP: return NO_PARAMS;
751 case SMART_ACTION_FOLLOW: return sizeof(SmartAction::follow);
754 case SMART_ACTION_RESET_GOBJECT: return NO_PARAMS;
759 case SMART_ACTION_DIE: return sizeof(SmartAction::die);
760 case SMART_ACTION_SET_IN_COMBAT_WITH_ZONE: return NO_PARAMS;
767 case SMART_ACTION_SET_DATA: return sizeof(SmartAction::setData);
768 case SMART_ACTION_INC_DATA: return sizeof(SmartAction::setData);
770 case SMART_ACTION_ATTACK_STOP: return NO_PARAMS;
773 case SMART_ACTION_ATTACK_START: return NO_PARAMS;
775 case SMART_ACTION_KILL_UNIT: return NO_PARAMS;
780 case SMART_ACTION_ADD_ITEM: return sizeof(SmartAction::item);
781 case SMART_ACTION_REMOVE_ITEM: return sizeof(SmartAction::item);
783 case SMART_ACTION_SET_RUN: return sizeof(SmartAction::setRun);
784 case SMART_ACTION_SET_FLY: return sizeof(SmartAction::setFly);
785 case SMART_ACTION_SET_SWIM: return sizeof(SmartAction::setSwim);
786 case SMART_ACTION_TELEPORT: return sizeof(SmartAction::teleport);
789 case SMART_ACTION_ESCORT_RESUME: return NO_PARAMS;
792 case SMART_ACTION_PLAYMOVIE: return sizeof(SmartAction::movie);
795 case SMART_ACTION_EQUIP: return sizeof(SmartAction::equip);
796 case SMART_ACTION_CLOSE_GOSSIP: return NO_PARAMS;
799 case SMART_ACTION_ADD_AURA: return sizeof(SmartAction::addAura);
800 case SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT: return NO_PARAMS;
801 case SMART_ACTION_RESET_SCRIPT_BASE_OBJECT: return NO_PARAMS;
802 case SMART_ACTION_CALL_SCRIPT_RESET: return NO_PARAMS;
805 case SMART_ACTION_SET_NPC_FLAG: return sizeof(SmartAction::flag);
806 case SMART_ACTION_ADD_NPC_FLAG: return sizeof(SmartAction::flag);
809 case SMART_ACTION_SELF_CAST: return sizeof(SmartAction::cast);
810 case SMART_ACTION_INVOKER_CAST: return sizeof(SmartAction::cast);
822 case SMART_ACTION_JUMP_TO_POS: return sizeof(SmartAction::jump);
828 case SMART_ACTION_SET_ROOT: return sizeof(SmartAction::setRoot);
833 case SMART_ACTION_SET_POWER: return sizeof(SmartAction::power);
834 case SMART_ACTION_ADD_POWER: return sizeof(SmartAction::power);
844 // case SMART_ACTION_SET_CAN_FLY: return sizeof(SmartAction::setFly);
845 // case SMART_ACTION_REMOVE_AURAS_BY_TYPE: return sizeof(SmartAction::auraType);
847 case SMART_ACTION_FLEE: return sizeof(SmartAction::flee);
848 case SMART_ACTION_ADD_THREAT: return sizeof(SmartAction::threat);
851 case SMART_ACTION_REMOVE_ALL_GAMEOBJECTS: return NO_PARAMS;
852 // case SMART_ACTION_PAUSE_MOVEMENT: return sizeof(SmartAction::pauseMovement);
853 case SMART_ACTION_PLAY_ANIMKIT: return sizeof(SmartAction::raw);
854 case SMART_ACTION_SCENE_PLAY: return sizeof(SmartAction::raw);
855 case SMART_ACTION_SCENE_CANCEL: return sizeof(SmartAction::raw);
858 // case SMART_ACTION_RESPAWN_BY_SPAWNID: return sizeof(SmartAction::respawnData);
861 // case SMART_ACTION_PLAY_SPELL_VISUAL_KIT: return sizeof(SmartAction::raw);
862 // case SMART_ACTION_OVERRIDE_LIGHT: return sizeof(SmartAction::overrideLight);
863 // case SMART_ACTION_OVERRIDE_WEATHER: return sizeof(SmartAction::overrideWeather);
864 // case SMART_ACTION_SET_AI_ANIM_KIT: return sizeof(SmartAction::raw);
867 // case SMART_ACTION_CREATE_CONVERSATION: return sizeof(SmartAction::raw);
869 case SMART_ACTION_EXIT_VEHICLE: return NO_PARAMS;
872 case SMART_ACTION_FALL: return NO_PARAMS;
875 case SMART_ACTION_NO_ENVIRONMENT_UPDATE: return NO_PARAMS;
876 case SMART_ACTION_ZONE_UNDER_ATTACK: return NO_PARAMS;
877 case SMART_ACTION_LOAD_GRID: return NO_PARAMS;
878 case SMART_ACTION_MUSIC: return sizeof(SmartAction::music);
880 case SMART_ACTION_SET_GUID: return sizeof(SmartAction::setGuid);
889 case SMART_ACTION_MOVEMENT_STOP: return NO_PARAMS;
897 case SMART_ACTION_DISMOUNT: return NO_PARAMS;
898 default:
899 LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using an action with no unused params specified in SmartAIMgr::CheckUnusedActionParams(), please report this.",
900 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
901 return sizeof(SmartAction::raw);
902 }
903 }();
904
905 static std::size_t rawCount = sizeof(SmartAction::raw) / sizeof(uint32);
906 std::size_t paramsCount = paramsStructSize / sizeof(uint32);
907
908 bool valid = true;
909 for (std::size_t index = paramsCount; index < rawCount; index++)
910 {
911 uint32 value = ((uint32*)&e.action.raw)[index];
912 if (value != 0)
913 {
914 LOG_ERROR("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} has unused action_param{} with value {}, it must be 0, skipped.",
915 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), index + 1, value);
916 valid = false;
917 }
918 }
919
920 return valid;
921}
#define LOG_WARN(filterType__,...)
Definition Log.h:149
@ SMART_ACTION_REMOVE_TIMED_EVENT
Definition SmartScriptMgr.h:616
@ SMART_ACTION_NONE
Definition SmartScriptMgr.h:542
@ SMART_ACTION_SET_GO_FLAG
Definition SmartScriptMgr.h:646
@ SMART_ACTION_UPDATE_TEMPLATE
Definition SmartScriptMgr.h:578
@ SMART_ACTION_STORE_TARGET_LIST
Definition SmartScriptMgr.h:606
@ SMART_ACTION_SET_HEALTH_REGEN
Definition SmartScriptMgr.h:644
@ SMART_ACTION_SET_GOSSIP_MENU
Definition SmartScriptMgr.h:727
@ SMART_ACTION_ACTIVATE_GOBJECT
Definition SmartScriptMgr.h:551
@ SMART_ACTION_FORCE_DESPAWN
Definition SmartScriptMgr.h:583
@ SMART_ACTION_GAME_EVENT_START
Definition SmartScriptMgr.h:654
@ SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST
Definition SmartScriptMgr.h:630
@ SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1
Definition SmartScriptMgr.h:633
@ SMART_ACTION_SET_INST_DATA64
Definition SmartScriptMgr.h:577
@ SMART_ACTION_SET_FACTION
Definition SmartScriptMgr.h:544
@ SMART_ACTION_THREAT_SINGLE_PCT
Definition SmartScriptMgr.h:555
@ SMART_ACTION_OFFER_QUEST
Definition SmartScriptMgr.h:549
@ SMART_ACTION_REMOVE_ALL_GAMEOBJECTS
Definition SmartScriptMgr.h:668
@ SMART_ACTION_RISE_UP
Definition SmartScriptMgr.h:656
@ SMART_ACTION_SET_INGAME_PHASE_MASK
Definition SmartScriptMgr.h:586
@ SMART_ACTION_SET_UNIT_FIELD_BYTES_1
Definition SmartScriptMgr.h:632
@ SMART_ACTION_CLOSE_GOSSIP
Definition SmartScriptMgr.h:614
@ SMART_ACTION_RESERVED_16
Definition SmartScriptMgr.h:558
@ SMART_ACTION_DISABLE_EVADE
Definition SmartScriptMgr.h:659
@ SMART_ACTION_INC_DATA
Definition SmartScriptMgr.h:729
@ SMART_ACTION_ADD_GO_FLAG
Definition SmartScriptMgr.h:647
@ SMART_ACTION_ESCORT_START
Definition SmartScriptMgr.h:595
@ SMART_ACTION_ADD_DYNAMIC_FLAG
Definition SmartScriptMgr.h:637
@ SMART_ACTION_KILL_UNIT
Definition SmartScriptMgr.h:593
@ SMART_ACTION_LOAD_EQUIPMENT
Definition SmartScriptMgr.h:666
@ SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS
Definition SmartScriptMgr.h:557
@ SMART_ACTION_ATTACK_START
Definition SmartScriptMgr.h:591
@ SMART_ACTION_MOVEMENT_RESUME
Definition SmartScriptMgr.h:723
@ SMART_ACTION_SET_UNIT_FLAG
Definition SmartScriptMgr.h:560
@ SMART_ACTION_NO_ENVIRONMENT_UPDATE
Definition SmartScriptMgr.h:699
@ SMART_ACTION_CALL_GROUPEVENTHAPPENS
Definition SmartScriptMgr.h:568
@ SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL
Definition SmartScriptMgr.h:585
@ SMART_ACTION_INVOKER_CAST
Definition SmartScriptMgr.h:676
@ SMART_ACTION_SCENE_PLAY
Definition SmartScriptMgr.h:671
@ SMART_ACTION_MOVEMENT_STOP
Definition SmartScriptMgr.h:721
@ SMART_ACTION_SET_SCALE
Definition SmartScriptMgr.h:714
@ SMART_ACTION_JUMP_TO_POS
Definition SmartScriptMgr.h:639
@ SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST
Definition SmartScriptMgr.h:629
@ SMART_ACTION_SEND_GOSSIP_MENU
Definition SmartScriptMgr.h:640
@ SMART_ACTION_SET_COUNTER
Definition SmartScriptMgr.h:605
@ SMART_ACTION_FLEE_FOR_ASSIST
Definition SmartScriptMgr.h:567
@ SMART_ACTION_EQUIP
Definition SmartScriptMgr.h:613
@ SMART_ACTION_SET_ROOT
Definition SmartScriptMgr.h:645
@ SMART_ACTION_ATTACK_STOP
Definition SmartScriptMgr.h:711
@ SMART_ACTION_SUMMON_GO
Definition SmartScriptMgr.h:592
@ SMART_ACTION_SET_HOVER
Definition SmartScriptMgr.h:693
@ SMART_ACTION_SIMPLE_TALK
Definition SmartScriptMgr.h:626
@ SMART_ACTION_STOP_MOTION
Definition SmartScriptMgr.h:698
@ SMART_ACTION_CAST
Definition SmartScriptMgr.h:553
@ SMART_ACTION_WORLD_SCRIPT
Definition SmartScriptMgr.h:724
@ SMART_ACTION_MUSIC
Definition SmartScriptMgr.h:702
@ SMART_ACTION_SET_ORIENTATION_TARGET
Definition SmartScriptMgr.h:718
@ SMART_ACTION_SPAWN_SPAWNGROUP
Definition SmartScriptMgr.h:673
@ SMART_ACTION_ALLOW_COMBAT_MOVEMENT
Definition SmartScriptMgr.h:563
@ SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS
Definition SmartScriptMgr.h:690
@ SMART_ACTION_ADD_AURA
Definition SmartScriptMgr.h:617
@ SMART_ACTION_THREAT_ALL_PCT
Definition SmartScriptMgr.h:556
@ SMART_ACTION_WAYPOINT_START
Definition SmartScriptMgr.h:719
@ SMART_ACTION_ESCORT_STOP
Definition SmartScriptMgr.h:597
@ SMART_ACTION_RESPAWN_TARGET
Definition SmartScriptMgr.h:612
@ SMART_ACTION_FOLLOW_GROUP
Definition SmartScriptMgr.h:717
@ SMART_ACTION_SOUND
Definition SmartScriptMgr.h:546
@ SMART_ACTION_ESCORT_PAUSE
Definition SmartScriptMgr.h:596
@ SMART_ACTION_MOVE_TO_POS_TARGET
Definition SmartScriptMgr.h:687
@ SMART_ACTION_SET_MOVEMENT_SPEED
Definition SmartScriptMgr.h:678
@ SMART_ACTION_PLAY_CINEMATIC
Definition SmartScriptMgr.h:677
@ SMART_ACTION_ADD_NPC_FLAG
Definition SmartScriptMgr.h:624
@ SMART_ACTION_EVADE
Definition SmartScriptMgr.h:566
@ SMART_ACTION_FAIL_QUEST
Definition SmartScriptMgr.h:548
@ SMART_ACTION_INTERRUPT_SPELL
Definition SmartScriptMgr.h:634
@ SMART_ACTION_ADD_POWER
Definition SmartScriptMgr.h:651
@ SMART_ACTION_SET_ANIM_TIER
Definition SmartScriptMgr.h:726
@ SMART_ACTION_REMOVE_DYNAMIC_FLAG
Definition SmartScriptMgr.h:638
@ SMART_ACTION_RANDOM_SOUND
Definition SmartScriptMgr.h:657
@ SMART_ACTION_SET_COMBAT_DISTANCE
Definition SmartScriptMgr.h:691
@ SMART_ACTION_SCENE_CANCEL
Definition SmartScriptMgr.h:672
@ SMART_ACTION_SET_POWER
Definition SmartScriptMgr.h:650
@ SMART_ACTION_MOVE_FORWARD
Definition SmartScriptMgr.h:588
@ SMART_ACTION_SEND_TARGET_TO_TARGET
Definition SmartScriptMgr.h:642
@ SMART_ACTION_REMOVE_POWER
Definition SmartScriptMgr.h:652
@ SMART_ACTION_SET_DYNAMIC_FLAG
Definition SmartScriptMgr.h:636
@ SMART_ACTION_FALL
Definition SmartScriptMgr.h:696
@ SMART_ACTION_GO_SET_GO_STATE
Definition SmartScriptMgr.h:660
@ SMART_ACTION_REMOVE_ITEM
Definition SmartScriptMgr.h:599
@ SMART_ACTION_SEND_GO_CUSTOM_ANIM
Definition SmartScriptMgr.h:635
@ SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL
Definition SmartScriptMgr.h:545
@ SMART_ACTION_REMOVE_UNIT_FLAG
Definition SmartScriptMgr.h:561
@ SMART_ACTION_RANDOM_PHASE
Definition SmartScriptMgr.h:572
@ SMART_ACTION_SET_EMOTE_STATE
Definition SmartScriptMgr.h:559
@ SMART_ACTION_CROSS_CAST
Definition SmartScriptMgr.h:628
@ SMART_ACTION_GAME_EVENT_STOP
Definition SmartScriptMgr.h:653
@ SMART_ACTION_CALL_KILLEDMONSTER
Definition SmartScriptMgr.h:575
@ SMART_ACTION_SCRIPTED_SPAWN
Definition SmartScriptMgr.h:713
@ SMART_ACTION_ESCORT_RESUME
Definition SmartScriptMgr.h:607
@ SMART_ACTION_TALK
Definition SmartScriptMgr.h:543
@ SMART_ACTION_CALL_SCRIPT_RESET
Definition SmartScriptMgr.h:620
@ SMART_ACTION_SET_DATA
Definition SmartScriptMgr.h:587
@ SMART_ACTION_COMBAT_STOP
Definition SmartScriptMgr.h:569
@ SMART_ACTION_EXIT_VEHICLE
Definition SmartScriptMgr.h:689
@ SMART_ACTION_SET_RUN
Definition SmartScriptMgr.h:601
@ SMART_ACTION_SET_HEALTH_PCT
Definition SmartScriptMgr.h:680
@ SMART_ACTION_AUTO_ATTACK
Definition SmartScriptMgr.h:562
@ SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL
Definition SmartScriptMgr.h:584
@ SMART_ACTION_SET_VISIBILITY
Definition SmartScriptMgr.h:589
@ SMART_ACTION_RANDOM_PHASE_RANGE
Definition SmartScriptMgr.h:573
@ SMART_ACTION_MOVEMENT_PAUSE
Definition SmartScriptMgr.h:722
@ SMART_ACTION_GO_SET_LOOT_STATE
Definition SmartScriptMgr.h:641
@ SMART_ACTION_SELF_CAST
Definition SmartScriptMgr.h:627
@ SMART_ACTION_SET_SWIM
Definition SmartScriptMgr.h:603
@ SMART_ACTION_SET_SIGHT_DIST
Definition SmartScriptMgr.h:663
@ SMART_ACTION_SET_INST_DATA
Definition SmartScriptMgr.h:576
@ SMART_ACTION_PLAY_ANIMKIT
Definition SmartScriptMgr.h:670
@ SMART_ACTION_REMOVE_GO_FLAG
Definition SmartScriptMgr.h:648
@ SMART_ACTION_LOAD_GRID
Definition SmartScriptMgr.h:701
@ SMART_ACTION_CALL_FOR_HELP
Definition SmartScriptMgr.h:581
@ SMART_ACTION_SUMMON_RADIAL
Definition SmartScriptMgr.h:715
@ SMART_ACTION_ADD_THREAT
Definition SmartScriptMgr.h:665
@ SMART_ACTION_DISMOUNT
Definition SmartScriptMgr.h:692
@ SMART_ACTION_TELEPORT
Definition SmartScriptMgr.h:604
@ SMART_ACTION_PLAYMOVIE
Definition SmartScriptMgr.h:610
@ SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT
Definition SmartScriptMgr.h:667
@ SMART_ACTION_FOLLOW
Definition SmartScriptMgr.h:571
@ SMART_ACTION_PLAY_EMOTE
Definition SmartScriptMgr.h:547
@ SMART_ACTION_SET_EVENT_PHASE
Definition SmartScriptMgr.h:564
@ SMART_ACTION_DESPAWN_SPAWNGROUP
Definition SmartScriptMgr.h:674
@ SMART_ACTION_SET_CORPSE_DELAY
Definition SmartScriptMgr.h:658
@ SMART_ACTION_WAYPOINT_DATA_RANDOM
Definition SmartScriptMgr.h:720
@ SMART_ACTION_SET_GUID
Definition SmartScriptMgr.h:712
@ SMART_ACTION_SET_SHEATH
Definition SmartScriptMgr.h:582
@ SMART_ACTION_SET_ORIENTATION
Definition SmartScriptMgr.h:608
@ SMART_ACTION_SET_NPC_FLAG
Definition SmartScriptMgr.h:623
@ SMART_ACTION_MOVE_TO_POS
Definition SmartScriptMgr.h:611
@ SMART_ACTION_RANDOM_EMOTE
Definition SmartScriptMgr.h:552
@ SMART_ACTION_INC_EVENT_PHASE
Definition SmartScriptMgr.h:565
@ SMART_ACTION_CREATE_TIMED_EVENT
Definition SmartScriptMgr.h:609
@ SMART_ACTION_SET_EVENT_FLAG_RESET
Definition SmartScriptMgr.h:697
@ SMART_ACTION_SUMMON_GAMEOBJECT_GROUP
Definition SmartScriptMgr.h:728
@ SMART_ACTION_DIE
Definition SmartScriptMgr.h:579
@ SMART_ACTION_RESET_SCRIPT_BASE_OBJECT
Definition SmartScriptMgr.h:619
@ SMART_ACTION_REMOVE_NPC_FLAG
Definition SmartScriptMgr.h:625
@ SMART_ACTION_SET_FLY
Definition SmartScriptMgr.h:602
@ SMART_ACTION_INSTALL_AI_TEMPLATE
Definition SmartScriptMgr.h:600
@ SMART_ACTION_SUMMON_CREATURE
Definition SmartScriptMgr.h:554
@ SMART_ACTION_RESET_GOBJECT
Definition SmartScriptMgr.h:574
@ SMART_ACTION_CALL_TIMED_ACTIONLIST
Definition SmartScriptMgr.h:622
@ SMART_ACTION_SET_IN_COMBAT_WITH_ZONE
Definition SmartScriptMgr.h:580
@ SMART_ACTION_DO_ACTION
Definition SmartScriptMgr.h:710
@ SMART_ACTION_SET_HOME_POS
Definition SmartScriptMgr.h:643
@ SMART_ACTION_ADD_ITEM
Definition SmartScriptMgr.h:598
@ SMART_ACTION_SET_ACTIVE
Definition SmartScriptMgr.h:590
@ SMART_ACTION_SET_RANGED_MOVEMENT
Definition SmartScriptMgr.h:621
@ SMART_ACTION_ACTIVATE_TAXI
Definition SmartScriptMgr.h:594
@ SMART_ACTION_START_CLOSEST_WAYPOINT
Definition SmartScriptMgr.h:655
@ SMART_ACTION_SUMMON_CREATURE_GROUP
Definition SmartScriptMgr.h:649
@ SMART_ACTION_PLAY_SPELL_VISUAL
Definition SmartScriptMgr.h:716
@ SMART_ACTION_SET_REACT_STATE
Definition SmartScriptMgr.h:550
@ SMART_ACTION_DISABLE_REWARD
Definition SmartScriptMgr.h:725
@ SMART_ACTION_RANDOM_MOVE
Definition SmartScriptMgr.h:631
@ SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT
Definition SmartScriptMgr.h:618
@ SMART_ACTION_TRIGGER_TIMED_EVENT
Definition SmartScriptMgr.h:615
@ SMART_ACTION_REMOVEAURASFROMSPELL
Definition SmartScriptMgr.h:570
@ SMART_ACTION_FLEE
Definition SmartScriptMgr.h:664
@ SMART_ACTION_ZONE_UNDER_ATTACK
Definition SmartScriptMgr.h:700
struct SmartAction::@75::@98 combatMove
struct SmartAction::@75::@100 incEventPhase
struct SmartAction::@75::@106 killedMonster
struct SmartAction::@75::@181 movementSpeed
struct SmartAction::@75::@186 setScale
struct SmartAction::@75::@192 wpDataRandom
struct SmartAction::@75::@82 randomSound
struct SmartAction::@75::@120 summonGO
struct SmartAction::@75::@185 scriptSpawn
struct SmartAction::@75::@163 startClosestWaypoint
struct SmartAction::@75::@164 combatDistance
struct SmartAction::@75::@142 randRangeTimedActionList
struct SmartAction::@75::@180 corpseDelay
struct SmartAction::@75::@194 worldStateScript
struct SmartAction::@75::@111 callHelp
struct SmartAction::@75::@97 autoAttack
struct SmartAction::@75::@105 randomPhaseRange
struct SmartAction::@75::@91 crossCast
struct SmartAction::@75::@160 power
struct SmartAction::@75::@129 setSwim
uint32 quest
Definition SmartScriptMgr.h:817
struct SmartAction::@75::@150 moveToPosTarget
struct SmartAction::@75::@172 orientation
struct SmartAction::@75::@78 simpleTalk
struct SmartAction::@75::@87 questOffer
struct SmartAction::@75::@101 addAura
struct SmartAction::@75::@110 die
struct SmartAction::@75::@151 sendGossipMenu
struct SmartAction::@75::@170 setHover
struct SmartAction::@75::@104 randomPhase
struct SmartAction::@75::@198 setGossipMenu
struct SmartAction::@75::@133 timeEvent
struct SmartAction::@75::@191 wpData
struct SmartAction::@75::@125 item
struct SmartAction::@75::@196 reward
struct SmartAction::@75::@134 movie
struct SmartAction::@75::@94 summonCreature
struct SmartAction::@75::@113 forceDespawn
struct SmartAction::@75::@103 follow
struct SmartAction::@75::@126 installTtemplate
struct SmartAction::@75::@200 groupSpawn
struct SmartAction::@75::@140 timedActionList
struct SmartAction::@75::@117 moveRandom
struct SmartAction::@75::@188 spellVisual
struct SmartAction::@75::@157 goFlag
struct SmartAction::@75::@167 setHomePos
struct SmartAction::@75::@161 gameEventStop
struct SmartAction::@75::@190 orientationTarget
struct SmartAction::@75::@132 storeTargets
struct SmartAction::@75::@114 invincHP
struct SmartAction::@75::@165 sightDistance
struct SmartAction::@75::@199 gameobjectGroup
struct SmartAction::@75::@95 threatPCT
struct SmartAction::@75::@89 randomEmote
struct SmartAction::@75::@162 gameEventStart
uint32 flag
Definition SmartScriptMgr.h:1127
struct SmartAction::@75::@145 jump
struct SmartAction::@75::@131 setCounter
struct SmartAction::@75::@139 delunitByte
struct SmartAction::@75::@90 cast
uint32 animTier
Definition SmartScriptMgr.h:1515
struct SmartAction::@75::@108 setInstanceData64
struct SmartAction::@75::@80 morphOrMount
struct SmartAction::@75::@116 setData
struct SmartAction::@75::@195 raw
struct SmartAction::@75::@147 flee
struct SmartAction::@75::@158 goState
struct SmartAction::@75::@122 wpStart
struct SmartAction::@75::@179 disableEvade
struct SmartAction::@75::@118 visibility
struct SmartAction::@75::@121 taxi
struct SmartAction::@75::@173 stopMotion
struct SmartAction::@75::@152 setGoLootState
struct SmartAction::@75::@112 setSheath
struct SmartAction::@75::@168 loadEquipment
struct SmartAction::@75::@130 teleport
struct SmartAction::@75::@79 faction
struct SmartAction::@75::@135 equip
struct SmartAction::@75::@96 threat
struct SmartAction::@75::@182 setHealthPct
struct SmartAction::@75::@146 movementFlag
struct SmartAction::@75::@183 cinematic
struct SmartAction::@75::@143 interruptSpellCasting
struct SmartAction::@75::@136 unitFlag
struct SmartAction::@75::@88 react
struct SmartAction::@75::@119 setActive
struct SmartAction::@75::@159 creatureGroup
struct SmartAction::@75::@124 wpStop
uint32 sound
Definition SmartScriptMgr.h:778
struct SmartAction::@75::@138 setunitByte
struct SmartAction::@75::@148 RespawnTarget
struct SmartAction::@75::@153 sendTargetToTarget
struct SmartAction::@75::@109 updateTemplate
struct SmartAction::@75::@77 talk
struct SmartAction::@75::@123 wpPause
struct SmartAction::@75::@83 music
struct SmartAction::@75::@169 randomTimedEvent
struct SmartAction::@75::@128 setFly
struct SmartAction::@75::@115 ingamePhaseMask
struct SmartAction::@75::@189 followGroup
SAIBool move
Definition SmartScriptMgr.h:893
struct SmartAction::@75::@178 doAction
struct SmartAction::@75::@144 sendGoCustomAnim
struct SmartAction::@75::@149 moveToPos
struct SmartAction::@75::@127 setRun
struct SmartAction::@75::@187 radialSummon
struct SmartAction::@75::@99 setEventPhase
struct SmartAction::@75::@107 setInstanceData
uint32 emote
Definition SmartScriptMgr.h:812
struct SmartAction::@75::@102 removeAura
struct SmartAction::@75::@155 setHealthRegen
struct SmartAction::@75::@141 randTimedActionList
struct SmartAction::@75::@156 setRoot
struct SmartAction::@75::@154 setRangedMovement
struct SmartAction::@75::@184 setGuid

References SmartScriptHolder::action, SmartAction::addAura, SmartAction::animTier, SmartAction::autoAttack, SmartAction::callHelp, SmartAction::cast, SmartAction::cinematic, SmartAction::combatDistance, SmartAction::combatMove, SmartAction::corpseDelay, SmartAction::creatureGroup, SmartAction::crossCast, SmartAction::delunitByte, SmartAction::die, SmartAction::disableEvade, SmartAction::doAction, SmartAction::emote, SmartScriptHolder::entryOrGuid, SmartAction::equip, SmartScriptHolder::event_id, SmartAction::faction, SmartAction::flag, SmartAction::flee, SmartAction::follow, SmartAction::followGroup, SmartAction::forceDespawn, SmartAction::gameEventStart, SmartAction::gameEventStop, SmartAction::gameobjectGroup, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), SmartAction::goFlag, SmartAction::goState, SmartAction::groupSpawn, SmartAction::incEventPhase, SmartAction::ingamePhaseMask, SmartAction::installTtemplate, SmartAction::interruptSpellCasting, SmartAction::invincHP, SmartAction::item, SmartAction::jump, SmartAction::killedMonster, SmartAction::loadEquipment, LOG_ERROR, LOG_WARN, SmartAction::morphOrMount, SmartAction::move, SmartAction::movementFlag, SmartAction::movementSpeed, SmartAction::moveRandom, SmartAction::moveToPos, SmartAction::moveToPosTarget, SmartAction::movie, SmartAction::music, SmartAction::orientation, SmartAction::orientationTarget, SmartAction::power, SmartAction::quest, SmartAction::questOffer, SmartAction::radialSummon, SmartAction::randomEmote, SmartAction::randomPhase, SmartAction::randomPhaseRange, SmartAction::randomSound, SmartAction::randomTimedEvent, SmartAction::randRangeTimedActionList, SmartAction::randTimedActionList, SmartAction::raw, SmartAction::react, SmartAction::removeAura, SmartAction::RespawnTarget, SmartAction::reward, SmartAction::scriptSpawn, SmartAction::sendGoCustomAnim, SmartAction::sendGossipMenu, SmartAction::sendTargetToTarget, SmartAction::setActive, SmartAction::setCounter, SmartAction::setData, SmartAction::setEventPhase, SmartAction::setFly, SmartAction::setGoLootState, SmartAction::setGossipMenu, SmartAction::setGuid, SmartAction::setHealthPct, SmartAction::setHealthRegen, SmartAction::setHomePos, SmartAction::setHover, SmartAction::setInstanceData, SmartAction::setInstanceData64, SmartAction::setRangedMovement, SmartAction::setRoot, SmartAction::setRun, SmartAction::setScale, SmartAction::setSheath, SmartAction::setSwim, SmartAction::setunitByte, SmartAction::sightDistance, SmartAction::simpleTalk, SMART_ACTION_ACTIVATE_GOBJECT, SMART_ACTION_ACTIVATE_TAXI, SMART_ACTION_ADD_AURA, SMART_ACTION_ADD_DYNAMIC_FLAG, SMART_ACTION_ADD_GO_FLAG, SMART_ACTION_ADD_ITEM, SMART_ACTION_ADD_NPC_FLAG, SMART_ACTION_ADD_POWER, SMART_ACTION_ADD_THREAT, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, SMART_ACTION_ATTACK_START, SMART_ACTION_ATTACK_STOP, SMART_ACTION_AUTO_ATTACK, SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS, SMART_ACTION_CALL_FOR_HELP, SMART_ACTION_CALL_GROUPEVENTHAPPENS, SMART_ACTION_CALL_KILLEDMONSTER, SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST, SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST, SMART_ACTION_CALL_SCRIPT_RESET, SMART_ACTION_CALL_TIMED_ACTIONLIST, SMART_ACTION_CAST, SMART_ACTION_CLOSE_GOSSIP, SMART_ACTION_COMBAT_STOP, SMART_ACTION_CREATE_TIMED_EVENT, SMART_ACTION_CROSS_CAST, SMART_ACTION_DESPAWN_SPAWNGROUP, SMART_ACTION_DIE, SMART_ACTION_DISABLE_EVADE, SMART_ACTION_DISABLE_REWARD, SMART_ACTION_DISMOUNT, SMART_ACTION_DO_ACTION, SMART_ACTION_EQUIP, SMART_ACTION_ESCORT_PAUSE, SMART_ACTION_ESCORT_RESUME, SMART_ACTION_ESCORT_START, SMART_ACTION_ESCORT_STOP, SMART_ACTION_EVADE, SMART_ACTION_EXIT_VEHICLE, SMART_ACTION_FAIL_QUEST, SMART_ACTION_FALL, SMART_ACTION_FLEE, SMART_ACTION_FLEE_FOR_ASSIST, SMART_ACTION_FOLLOW, SMART_ACTION_FOLLOW_GROUP, SMART_ACTION_FORCE_DESPAWN, SMART_ACTION_GAME_EVENT_START, SMART_ACTION_GAME_EVENT_STOP, SMART_ACTION_GO_SET_GO_STATE, SMART_ACTION_GO_SET_LOOT_STATE, SMART_ACTION_INC_DATA, SMART_ACTION_INC_EVENT_PHASE, SMART_ACTION_INSTALL_AI_TEMPLATE, SMART_ACTION_INTERRUPT_SPELL, SMART_ACTION_INVOKER_CAST, SMART_ACTION_JUMP_TO_POS, SMART_ACTION_KILL_UNIT, SMART_ACTION_LOAD_EQUIPMENT, SMART_ACTION_LOAD_GRID, SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL, SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL, SMART_ACTION_MOVE_FORWARD, SMART_ACTION_MOVE_TO_POS, SMART_ACTION_MOVE_TO_POS_TARGET, SMART_ACTION_MOVEMENT_PAUSE, SMART_ACTION_MOVEMENT_RESUME, SMART_ACTION_MOVEMENT_STOP, SMART_ACTION_MUSIC, SMART_ACTION_NO_ENVIRONMENT_UPDATE, SMART_ACTION_NONE, SMART_ACTION_OFFER_QUEST, SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT, SMART_ACTION_PLAY_ANIMKIT, SMART_ACTION_PLAY_CINEMATIC, SMART_ACTION_PLAY_EMOTE, SMART_ACTION_PLAY_SPELL_VISUAL, SMART_ACTION_PLAYMOVIE, SMART_ACTION_RANDOM_EMOTE, SMART_ACTION_RANDOM_MOVE, SMART_ACTION_RANDOM_PHASE, SMART_ACTION_RANDOM_PHASE_RANGE, SMART_ACTION_RANDOM_SOUND, SMART_ACTION_REMOVE_ALL_GAMEOBJECTS, SMART_ACTION_REMOVE_DYNAMIC_FLAG, SMART_ACTION_REMOVE_GO_FLAG, SMART_ACTION_REMOVE_ITEM, SMART_ACTION_REMOVE_NPC_FLAG, SMART_ACTION_REMOVE_POWER, SMART_ACTION_REMOVE_TIMED_EVENT, SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1, SMART_ACTION_REMOVE_UNIT_FLAG, SMART_ACTION_REMOVEAURASFROMSPELL, SMART_ACTION_RESERVED_16, SMART_ACTION_RESET_GOBJECT, SMART_ACTION_RESET_SCRIPT_BASE_OBJECT, SMART_ACTION_RESPAWN_TARGET, SMART_ACTION_RISE_UP, SMART_ACTION_SCENE_CANCEL, SMART_ACTION_SCENE_PLAY, SMART_ACTION_SCRIPTED_SPAWN, SMART_ACTION_SELF_CAST, SMART_ACTION_SEND_GO_CUSTOM_ANIM, SMART_ACTION_SEND_GOSSIP_MENU, SMART_ACTION_SEND_TARGET_TO_TARGET, SMART_ACTION_SET_ACTIVE, SMART_ACTION_SET_ANIM_TIER, SMART_ACTION_SET_COMBAT_DISTANCE, SMART_ACTION_SET_CORPSE_DELAY, SMART_ACTION_SET_COUNTER, SMART_ACTION_SET_DATA, SMART_ACTION_SET_DYNAMIC_FLAG, SMART_ACTION_SET_EMOTE_STATE, SMART_ACTION_SET_EVENT_FLAG_RESET, SMART_ACTION_SET_EVENT_PHASE, SMART_ACTION_SET_FACTION, SMART_ACTION_SET_FLY, SMART_ACTION_SET_GO_FLAG, SMART_ACTION_SET_GOSSIP_MENU, SMART_ACTION_SET_GUID, SMART_ACTION_SET_HEALTH_PCT, SMART_ACTION_SET_HEALTH_REGEN, SMART_ACTION_SET_HOME_POS, SMART_ACTION_SET_HOVER, SMART_ACTION_SET_IN_COMBAT_WITH_ZONE, SMART_ACTION_SET_INGAME_PHASE_MASK, SMART_ACTION_SET_INST_DATA, SMART_ACTION_SET_INST_DATA64, SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL, SMART_ACTION_SET_MOVEMENT_SPEED, SMART_ACTION_SET_NPC_FLAG, SMART_ACTION_SET_ORIENTATION, SMART_ACTION_SET_ORIENTATION_TARGET, SMART_ACTION_SET_POWER, SMART_ACTION_SET_RANGED_MOVEMENT, SMART_ACTION_SET_REACT_STATE, SMART_ACTION_SET_ROOT, SMART_ACTION_SET_RUN, SMART_ACTION_SET_SCALE, SMART_ACTION_SET_SHEATH, SMART_ACTION_SET_SIGHT_DIST, SMART_ACTION_SET_SWIM, SMART_ACTION_SET_UNIT_FIELD_BYTES_1, SMART_ACTION_SET_UNIT_FLAG, SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS, SMART_ACTION_SET_VISIBILITY, SMART_ACTION_SIMPLE_TALK, SMART_ACTION_SOUND, SMART_ACTION_SPAWN_SPAWNGROUP, SMART_ACTION_START_CLOSEST_WAYPOINT, SMART_ACTION_STOP_MOTION, SMART_ACTION_STORE_TARGET_LIST, SMART_ACTION_SUMMON_CREATURE, SMART_ACTION_SUMMON_CREATURE_GROUP, SMART_ACTION_SUMMON_GAMEOBJECT_GROUP, SMART_ACTION_SUMMON_GO, SMART_ACTION_SUMMON_RADIAL, SMART_ACTION_TALK, SMART_ACTION_TELEPORT, SMART_ACTION_THREAT_ALL_PCT, SMART_ACTION_THREAT_SINGLE_PCT, SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT, SMART_ACTION_TRIGGER_TIMED_EVENT, SMART_ACTION_UPDATE_TEMPLATE, SMART_ACTION_WAYPOINT_DATA_RANDOM, SMART_ACTION_WAYPOINT_START, SMART_ACTION_WORLD_SCRIPT, SMART_ACTION_ZONE_UNDER_ATTACK, SmartAction::sound, SmartAction::spellVisual, SmartAction::startClosestWaypoint, SmartAction::stopMotion, SmartAction::storeTargets, SmartAction::summonCreature, SmartAction::summonGO, SmartAction::talk, SmartAction::taxi, SmartAction::teleport, SmartAction::threat, SmartAction::threatPCT, SmartAction::timedActionList, SmartAction::timeEvent, SmartAction::type, SmartAction::unitFlag, SmartAction::updateTemplate, SmartAction::visibility, SmartAction::worldStateScript, SmartAction::wpData, SmartAction::wpDataRandom, SmartAction::wpPause, SmartAction::wpStart, and SmartAction::wpStop.

Referenced by IsEventValid().

◆ CheckUnusedEventParams()

bool SmartAIMgr::CheckUnusedEventParams ( SmartScriptHolder const &  e)
staticprivate
591{
592 std::size_t paramsStructSize = [&]() -> std::size_t
593 {
594 constexpr std::size_t NO_PARAMS = std::size_t(0);
595 switch (e.event.type)
596 {
601 case SMART_EVENT_AGGRO: return NO_PARAMS;
602 case SMART_EVENT_KILL: return sizeof(SmartEvent::kill);
603 case SMART_EVENT_DEATH: return NO_PARAMS;
604 case SMART_EVENT_EVADE: return NO_PARAMS;
605 case SMART_EVENT_SPELLHIT: return sizeof(SmartEvent::spellHit);
606 case SMART_EVENT_RANGE: return sizeof(SmartEvent::minMaxRepeat);
607 case SMART_EVENT_OOC_LOS: return sizeof(SmartEvent::los);
608 case SMART_EVENT_RESPAWN: return sizeof(SmartEvent::respawn);
617 case SMART_EVENT_REWARD_QUEST: return sizeof(SmartEvent::quest);
618 case SMART_EVENT_REACHED_HOME: return NO_PARAMS;
619 case SMART_EVENT_RECEIVE_EMOTE: return sizeof(SmartEvent::emote);
620 case SMART_EVENT_HAS_AURA: return sizeof(SmartEvent::aura);
621 case SMART_EVENT_TARGET_BUFFED: return sizeof(SmartEvent::aura);
622 case SMART_EVENT_RESET: return NO_PARAMS;
623 case SMART_EVENT_IC_LOS: return sizeof(SmartEvent::los);
626 case SMART_EVENT_CHARMED: return sizeof(SmartEvent::charm);
627 case SMART_EVENT_CHARMED_TARGET: return NO_PARAMS;
633 case SMART_EVENT_CORPSE_REMOVED: return NO_PARAMS;
634 case SMART_EVENT_AI_INIT: return NO_PARAMS;
635 case SMART_EVENT_DATA_SET: return sizeof(SmartEvent::dataSet);
638 case SMART_EVENT_TRANSPORT_ADDPLAYER: return NO_PARAMS;
640 case SMART_EVENT_TRANSPORT_REMOVE_PLAYER: return NO_PARAMS;
644 case SMART_EVENT_QUEST_ACCEPTED: return NO_PARAMS;
645 case SMART_EVENT_QUEST_OBJ_COMPLETION: return NO_PARAMS;
646 case SMART_EVENT_QUEST_COMPLETION: return NO_PARAMS;
647 case SMART_EVENT_QUEST_REWARDED: return NO_PARAMS;
648 case SMART_EVENT_QUEST_FAIL: return NO_PARAMS;
649 case SMART_EVENT_TEXT_OVER: return sizeof(SmartEvent::textOver);
651 case SMART_EVENT_JUST_SUMMONED: return NO_PARAMS;
657 case SMART_EVENT_UPDATE: return sizeof(SmartEvent::minMaxRepeat);
658 case SMART_EVENT_LINK: return NO_PARAMS;
660 case SMART_EVENT_JUST_CREATED: return NO_PARAMS;
662 case SMART_EVENT_FOLLOW_COMPLETED: return NO_PARAMS;
671 case SMART_EVENT_ON_SPELLCLICK: return NO_PARAMS;
675 case SMART_EVENT_COUNTER_SET: return sizeof(SmartEvent::counter);
676 //case SMART_EVENT_SCENE_START: return sizeof(SmartEvent::raw);
677 //case SMART_EVENT_SCENE_TRIGGER: return sizeof(SmartEvent::raw);
678 //case SMART_EVENT_SCENE_CANCEL: return sizeof(SmartEvent::raw);
679 //case SMART_EVENT_SCENE_COMPLETE: return sizeof(SmartEvent::raw);
683 case SMART_EVENT_NEAR_UNIT: return sizeof(SmartEvent::nearUnit);
690 default:
691 LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using an event {} with no unused params specified in SmartAIMgr::CheckUnusedEventParams(), please report this.",
692 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetEventType());
693 return sizeof(SmartEvent::raw);
694 }
695 }();
696
697 static std::size_t rawCount = sizeof(SmartEvent::raw) / sizeof(uint32);
698 std::size_t paramsCount = paramsStructSize / sizeof(uint32);
699
700 bool valid = true;
701 for (std::size_t index = paramsCount; index < rawCount; index++)
702 {
703 uint32 value = ((uint32*)&e.event.raw)[index];
704 if (value != 0)
705 {
706 LOG_ERROR("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} has unused event_param{} with value {}, it must be 0, skipped.",
707 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), index + 1, value);
708 valid = false;
709 }
710 }
711
712 return valid;
713}
@ SMART_EVENT_IC_LOS
Definition SmartScriptMgr.h:125
@ SMART_EVENT_EVADE
Definition SmartScriptMgr.h:106
@ SMART_EVENT_ACTION_DONE
Definition SmartScriptMgr.h:171
@ SMART_EVENT_SUMMON_DESPAWNED
Definition SmartScriptMgr.h:134
@ SMART_EVENT_SPELLHIT
Definition SmartScriptMgr.h:107
@ SMART_EVENT_RECEIVE_EMOTE
Definition SmartScriptMgr.h:121
@ SMART_EVENT_FRIENDLY_HEALTH_PCT
Definition SmartScriptMgr.h:173
@ SMART_EVENT_QUEST_FAIL
Definition SmartScriptMgr.h:150
@ SMART_EVENT_DATA_SET
Definition SmartScriptMgr.h:137
@ SMART_EVENT_RECEIVE_HEAL
Definition SmartScriptMgr.h:152
@ SMART_EVENT_TIMED_EVENT_TRIGGERED
Definition SmartScriptMgr.h:158
@ SMART_EVENT_ESCORT_REACHED
Definition SmartScriptMgr.h:139
@ SMART_EVENT_CHARMED_TARGET
Definition SmartScriptMgr.h:129
@ SMART_EVENT_NEAR_PLAYERS_NEGATION
Definition SmartScriptMgr.h:191
@ SMART_EVENT_TARGET_MANA_PCT
Definition SmartScriptMgr.h:117
@ SMART_EVENT_QUEST_COMPLETION
Definition SmartScriptMgr.h:148
@ SMART_EVENT_JUST_CREATED
Definition SmartScriptMgr.h:162
@ SMART_EVENT_HEALTH_PCT
Definition SmartScriptMgr.h:101
@ SMART_EVENT_ESCORT_START
Definition SmartScriptMgr.h:138
@ SMART_EVENT_EVENT_PHASE_CHANGE
Definition SmartScriptMgr.h:165
@ SMART_EVENT_AREA_CASTING
Definition SmartScriptMgr.h:194
@ SMART_EVENT_AREATRIGGER_ONTRIGGER
Definition SmartScriptMgr.h:145
@ SMART_EVENT_DISTANCE_GAMEOBJECT
Definition SmartScriptMgr.h:175
@ SMART_EVENT_ON_SPELLCLICK
Definition SmartScriptMgr.h:172
@ SMART_EVENT_MOVEMENTINFORM
Definition SmartScriptMgr.h:133
@ SMART_EVENT_RANGE
Definition SmartScriptMgr.h:108
@ SMART_EVENT_ESCORT_PAUSED
Definition SmartScriptMgr.h:154
@ SMART_EVENT_ESCORT_RESUMED
Definition SmartScriptMgr.h:155
@ SMART_EVENT_MANA_PCT
Definition SmartScriptMgr.h:102
@ SMART_EVENT_NEAR_UNIT_NEGATION
Definition SmartScriptMgr.h:193
@ SMART_EVENT_PASSENGER_REMOVED
Definition SmartScriptMgr.h:127
@ SMART_EVENT_INSTANCE_PLAYER_ENTER
Definition SmartScriptMgr.h:144
@ SMART_EVENT_LINK
Definition SmartScriptMgr.h:160
@ SMART_EVENT_ESCORT_ENDED
Definition SmartScriptMgr.h:157
@ SMART_EVENT_REACHED_HOME
Definition SmartScriptMgr.h:120
@ SMART_EVENT_TRANSPORT_ADDCREATURE
Definition SmartScriptMgr.h:141
@ SMART_EVENT_REWARD_QUEST
Definition SmartScriptMgr.h:119
@ SMART_EVENT_GO_EVENT_INFORM
Definition SmartScriptMgr.h:170
@ SMART_EVENT_UPDATE_IC
Definition SmartScriptMgr.h:99
@ SMART_EVENT_RESET
Definition SmartScriptMgr.h:124
@ SMART_EVENT_IS_IN_MELEE_RANGE
Definition SmartScriptMgr.h:199
@ SMART_EVENT_JUST_SUMMONED
Definition SmartScriptMgr.h:153
@ SMART_EVENT_CHARMED
Definition SmartScriptMgr.h:128
@ SMART_EVENT_AI_INIT
Definition SmartScriptMgr.h:136
@ SMART_EVENT_AREA_RANGE
Definition SmartScriptMgr.h:195
@ SMART_EVENT_SPELLHIT_TARGET
Definition SmartScriptMgr.h:130
@ SMART_EVENT_GAME_EVENT_START
Definition SmartScriptMgr.h:167
@ SMART_EVENT_KILL
Definition SmartScriptMgr.h:104
@ SMART_EVENT_TRANSPORT_REMOVE_PLAYER
Definition SmartScriptMgr.h:142
@ SMART_EVENT_ESCORT_STOPPED
Definition SmartScriptMgr.h:156
@ SMART_EVENT_GOSSIP_HELLO
Definition SmartScriptMgr.h:163
@ SMART_EVENT_GOSSIP_SELECT
Definition SmartScriptMgr.h:161
@ SMART_EVENT_CORPSE_REMOVED
Definition SmartScriptMgr.h:135
@ SMART_EVENT_SUMMONED_UNIT_EVADE
Definition SmartScriptMgr.h:196
@ SMART_EVENT_PASSENGER_BOARDED
Definition SmartScriptMgr.h:126
@ SMART_EVENT_UPDATE
Definition SmartScriptMgr.h:159
@ SMART_EVENT_TRANSPORT_ADDPLAYER
Definition SmartScriptMgr.h:140
@ SMART_EVENT_WAYPOINT_ENDED
Definition SmartScriptMgr.h:198
@ SMART_EVENT_IS_BEHIND_TARGET
Definition SmartScriptMgr.h:166
@ SMART_EVENT_UPDATE_OOC
Definition SmartScriptMgr.h:100
@ SMART_EVENT_ACCEPTED_QUEST
Definition SmartScriptMgr.h:118
@ SMART_EVENT_COUNTER_SET
Definition SmartScriptMgr.h:176
@ SMART_EVENT_FRIENDLY_MISSING_BUFF
Definition SmartScriptMgr.h:115
@ SMART_EVENT_WAYPOINT_REACHED
Definition SmartScriptMgr.h:197
@ SMART_EVENT_TARGET_BUFFED
Definition SmartScriptMgr.h:123
@ SMART_EVENT_RESPAWN
Definition SmartScriptMgr.h:110
@ SMART_EVENT_QUEST_ACCEPTED
Definition SmartScriptMgr.h:146
@ SMART_EVENT_FRIENDLY_HEALTH
Definition SmartScriptMgr.h:113
@ SMART_EVENT_NEAR_UNIT
Definition SmartScriptMgr.h:192
@ SMART_EVENT_QUEST_REWARDED
Definition SmartScriptMgr.h:149
@ SMART_EVENT_TEXT_OVER
Definition SmartScriptMgr.h:151
@ SMART_EVENT_DEATH
Definition SmartScriptMgr.h:105
@ SMART_EVENT_TRANSPORT_RELOCATE
Definition SmartScriptMgr.h:143
@ SMART_EVENT_GAME_EVENT_END
Definition SmartScriptMgr.h:168
@ SMART_EVENT_DAMAGED
Definition SmartScriptMgr.h:131
@ SMART_EVENT_FOLLOW_COMPLETED
Definition SmartScriptMgr.h:164
@ SMART_EVENT_QUEST_OBJ_COMPLETION
Definition SmartScriptMgr.h:147
@ SMART_EVENT_DISTANCE_CREATURE
Definition SmartScriptMgr.h:174
@ SMART_EVENT_SUMMONED_UNIT_DIES
Definition SmartScriptMgr.h:183
@ SMART_EVENT_FRIENDLY_IS_CC
Definition SmartScriptMgr.h:114
@ SMART_EVENT_GO_STATE_CHANGED
Definition SmartScriptMgr.h:169
@ SMART_EVENT_OOC_LOS
Definition SmartScriptMgr.h:109
@ SMART_EVENT_AGGRO
Definition SmartScriptMgr.h:103
@ SMART_EVENT_NEAR_PLAYERS
Definition SmartScriptMgr.h:190
@ SMART_EVENT_TARGET_HEALTH_PCT
Definition SmartScriptMgr.h:111
@ SMART_EVENT_VICTIM_CASTING
Definition SmartScriptMgr.h:112
@ SMART_EVENT_DAMAGED_TARGET
Definition SmartScriptMgr.h:132
@ SMART_EVENT_HAS_AURA
Definition SmartScriptMgr.h:122
@ SMART_EVENT_SUMMONED_UNIT
Definition SmartScriptMgr.h:116
struct SmartEvent::@30::@69 nearPlayerNegation
struct SmartEvent::@30::@74 raw
struct SmartEvent::@30::@68 nearPlayer
struct SmartEvent::@30::@32 minMaxRepeat
struct SmartEvent::@30::@61 gameEvent
struct SmartEvent::@30::@70 nearUnit
struct SmartEvent::@30::@53 instancePlayerEnter
struct SmartEvent::@30::@51 transportAddCreature
struct SmartEvent::@30::@45 aura
struct SmartEvent::@30::@57 gossipHello
struct SmartEvent::@30::@34 spellHit
struct SmartEvent::@30::@35 los
struct SmartEvent::@30::@49 dataSet
struct SmartEvent::@30::@48 movementInform
uint32 emote
Definition SmartScriptMgr.h:310
struct SmartEvent::@30::@72 nearUnitNegation
struct SmartEvent::@30::@33 kill
struct SmartEvent::@30::@71 meleeRange
struct SmartEvent::@30::@41 missingBuff
struct SmartEvent::@30::@50 waypoint
struct SmartEvent::@30::@42 summoned
struct SmartEvent::@30::@54 areatrigger
struct SmartEvent::@30::@60 eventPhaseChange
struct SmartEvent::@30::@65 friendlyHealthPct
struct SmartEvent::@30::@58 gossip
struct SmartEvent::@30::@64 doAction
struct SmartEvent::@30::@46 charm
struct SmartEvent::@30::@63 eventInform
struct SmartEvent::@30::@38 targetCasting
struct SmartEvent::@30::@52 transportRelocate
struct SmartEvent::@30::@73 wpData
uint32 quest
Definition SmartScriptMgr.h:303
struct SmartEvent::@30::@67 counter
struct SmartEvent::@30::@36 respawn
struct SmartEvent::@30::@56 timedEvent
struct SmartEvent::@30::@39 friendlyHealth
struct SmartEvent::@30::@66 distance
struct SmartEvent::@30::@37 minMax
struct SmartEvent::@30::@55 textOver
struct SmartEvent::@30::@40 friendlyCC
struct SmartEvent::@30::@62 goStateChanged

References SmartEvent::areatrigger, SmartEvent::aura, SmartEvent::charm, SmartEvent::counter, SmartEvent::dataSet, SmartEvent::distance, SmartEvent::doAction, SmartEvent::emote, SmartScriptHolder::entryOrGuid, SmartScriptHolder::event, SmartScriptHolder::event_id, SmartEvent::eventInform, SmartEvent::eventPhaseChange, SmartEvent::friendlyCC, SmartEvent::friendlyHealth, SmartEvent::friendlyHealthPct, SmartEvent::gameEvent, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetEventType(), SmartScriptHolder::GetScriptType(), SmartEvent::gossip, SmartEvent::gossipHello, SmartEvent::goStateChanged, SmartEvent::instancePlayerEnter, SmartEvent::kill, LOG_ERROR, LOG_WARN, SmartEvent::los, SmartEvent::meleeRange, SmartEvent::minMax, SmartEvent::minMaxRepeat, SmartEvent::missingBuff, SmartEvent::movementInform, SmartEvent::nearPlayer, SmartEvent::nearPlayerNegation, SmartEvent::nearUnit, SmartEvent::nearUnitNegation, SmartEvent::quest, SmartEvent::raw, SmartEvent::respawn, SMART_EVENT_ACCEPTED_QUEST, SMART_EVENT_ACTION_DONE, SMART_EVENT_AGGRO, SMART_EVENT_AI_INIT, SMART_EVENT_AREA_CASTING, SMART_EVENT_AREA_RANGE, SMART_EVENT_AREATRIGGER_ONTRIGGER, SMART_EVENT_CHARMED, SMART_EVENT_CHARMED_TARGET, SMART_EVENT_CORPSE_REMOVED, SMART_EVENT_COUNTER_SET, SMART_EVENT_DAMAGED, SMART_EVENT_DAMAGED_TARGET, SMART_EVENT_DATA_SET, SMART_EVENT_DEATH, SMART_EVENT_DISTANCE_CREATURE, SMART_EVENT_DISTANCE_GAMEOBJECT, SMART_EVENT_ESCORT_ENDED, SMART_EVENT_ESCORT_PAUSED, SMART_EVENT_ESCORT_REACHED, SMART_EVENT_ESCORT_RESUMED, SMART_EVENT_ESCORT_START, SMART_EVENT_ESCORT_STOPPED, SMART_EVENT_EVADE, SMART_EVENT_EVENT_PHASE_CHANGE, SMART_EVENT_FOLLOW_COMPLETED, SMART_EVENT_FRIENDLY_HEALTH, SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_EVENT_FRIENDLY_IS_CC, SMART_EVENT_FRIENDLY_MISSING_BUFF, SMART_EVENT_GAME_EVENT_END, SMART_EVENT_GAME_EVENT_START, SMART_EVENT_GO_EVENT_INFORM, SMART_EVENT_GO_STATE_CHANGED, SMART_EVENT_GOSSIP_HELLO, SMART_EVENT_GOSSIP_SELECT, SMART_EVENT_HAS_AURA, SMART_EVENT_HEALTH_PCT, SMART_EVENT_IC_LOS, SMART_EVENT_INSTANCE_PLAYER_ENTER, SMART_EVENT_IS_BEHIND_TARGET, SMART_EVENT_IS_IN_MELEE_RANGE, SMART_EVENT_JUST_CREATED, SMART_EVENT_JUST_SUMMONED, SMART_EVENT_KILL, SMART_EVENT_LINK, SMART_EVENT_MANA_PCT, SMART_EVENT_MOVEMENTINFORM, SMART_EVENT_NEAR_PLAYERS, SMART_EVENT_NEAR_PLAYERS_NEGATION, SMART_EVENT_NEAR_UNIT, SMART_EVENT_NEAR_UNIT_NEGATION, SMART_EVENT_ON_SPELLCLICK, SMART_EVENT_OOC_LOS, SMART_EVENT_PASSENGER_BOARDED, SMART_EVENT_PASSENGER_REMOVED, SMART_EVENT_QUEST_ACCEPTED, SMART_EVENT_QUEST_COMPLETION, SMART_EVENT_QUEST_FAIL, SMART_EVENT_QUEST_OBJ_COMPLETION, SMART_EVENT_QUEST_REWARDED, SMART_EVENT_RANGE, SMART_EVENT_REACHED_HOME, SMART_EVENT_RECEIVE_EMOTE, SMART_EVENT_RECEIVE_HEAL, SMART_EVENT_RESET, SMART_EVENT_RESPAWN, SMART_EVENT_REWARD_QUEST, SMART_EVENT_SPELLHIT, SMART_EVENT_SPELLHIT_TARGET, SMART_EVENT_SUMMON_DESPAWNED, SMART_EVENT_SUMMONED_UNIT, SMART_EVENT_SUMMONED_UNIT_DIES, SMART_EVENT_SUMMONED_UNIT_EVADE, SMART_EVENT_TARGET_BUFFED, SMART_EVENT_TARGET_HEALTH_PCT, SMART_EVENT_TARGET_MANA_PCT, SMART_EVENT_TEXT_OVER, SMART_EVENT_TIMED_EVENT_TRIGGERED, SMART_EVENT_TRANSPORT_ADDCREATURE, SMART_EVENT_TRANSPORT_ADDPLAYER, SMART_EVENT_TRANSPORT_RELOCATE, SMART_EVENT_TRANSPORT_REMOVE_PLAYER, SMART_EVENT_UPDATE, SMART_EVENT_UPDATE_IC, SMART_EVENT_UPDATE_OOC, SMART_EVENT_VICTIM_CASTING, SMART_EVENT_WAYPOINT_ENDED, SMART_EVENT_WAYPOINT_REACHED, SmartEvent::spellHit, SmartEvent::summoned, SmartEvent::targetCasting, SmartEvent::textOver, SmartEvent::timedEvent, SmartEvent::transportAddCreature, SmartEvent::transportRelocate, SmartEvent::type, SmartEvent::waypoint, and SmartEvent::wpData.

Referenced by IsEventValid().

◆ CheckUnusedTargetParams()

bool SmartAIMgr::CheckUnusedTargetParams ( SmartScriptHolder const &  e)
staticprivate
924{
925 std::size_t paramsStructSize = [&]() -> std::size_t
926 {
927 constexpr std::size_t NO_PARAMS = std::size_t(0);
928 switch (e.target.type)
929 {
930 case SMART_TARGET_NONE: return NO_PARAMS;
931 case SMART_TARGET_SELF: return NO_PARAMS;
932 case SMART_TARGET_VICTIM: return NO_PARAMS;
937 case SMART_TARGET_ACTION_INVOKER: return NO_PARAMS;
938 case SMART_TARGET_POSITION: return NO_PARAMS; //uses x,y,z,o
942 case SMART_TARGET_STORED: return sizeof(SmartTarget::stored);
952 case SMART_TARGET_ACTION_INVOKER_VEHICLE: return NO_PARAMS;
957 case SMART_TARGET_LOOT_RECIPIENTS: return NO_PARAMS;
958 case SMART_TARGET_FARTHEST: return sizeof(SmartTarget::farthest);
960 // case SMART_TARGET_CLOSEST_UNSPAWNED_GAMEOBJECT: return sizeof(SmartTarget::goClosest);
966 default:
967 LOG_WARN("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} is using a target {} with no unused params specified in SmartAIMgr::CheckUnusedTargetParams(), please report this.",
968 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetTargetType());
969 return sizeof(SmartTarget::raw);
970 }
971 }();
972
973 static std::size_t rawCount = sizeof(SmartTarget::raw) / sizeof(uint32);
974 std::size_t paramsCount = paramsStructSize / sizeof(uint32);
975
976 bool valid = true;
977 for (std::size_t index = paramsCount; index < rawCount; index++)
978 {
979 uint32 value = ((uint32*)&e.target.raw)[index];
980 if (value != 0)
981 {
982 LOG_ERROR("sql.sql", "SmartAIMgr: entryorguid {} source_type {} id {} action_type {} has unused target_param{} with value {}, it must be 0, skipped.",
983 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), index + 1, value);
984 valid = false;
985 }
986 }
987
988 return valid;
989}
@ SMART_TARGET_LOOT_RECIPIENTS
Definition SmartScriptMgr.h:1577
@ SMART_TARGET_CLOSEST_CREATURE
Definition SmartScriptMgr.h:1569
@ SMART_TARGET_CREATURE_DISTANCE
Definition SmartScriptMgr.h:1561
@ SMART_TARGET_HOSTILE_RANDOM_NOT_TOP
Definition SmartScriptMgr.h:1556
@ SMART_TARGET_INVOKER_PARTY
Definition SmartScriptMgr.h:1566
@ SMART_TARGET_FORMATION
Definition SmartScriptMgr.h:1592
@ SMART_TARGET_CLOSEST_FRIENDLY
Definition SmartScriptMgr.h:1576
@ SMART_TARGET_CLOSEST_GAMEOBJECT
Definition SmartScriptMgr.h:1570
@ SMART_TARGET_VEHICLE_PASSENGER
Definition SmartScriptMgr.h:1579
@ SMART_TARGET_GAMEOBJECT_RANGE
Definition SmartScriptMgr.h:1563
@ SMART_TARGET_CREATURE_GUID
Definition SmartScriptMgr.h:1560
@ SMART_TARGET_PLAYER_RANGE
Definition SmartScriptMgr.h:1567
@ SMART_TARGET_SUMMONED_CREATURES
Definition SmartScriptMgr.h:1590
@ SMART_TARGET_VICTIM
Definition SmartScriptMgr.h:1552
@ SMART_TARGET_GAMEOBJECT_DISTANCE
Definition SmartScriptMgr.h:1565
@ SMART_TARGET_CREATURE_RANGE
Definition SmartScriptMgr.h:1559
@ SMART_TARGET_CLOSEST_PLAYER
Definition SmartScriptMgr.h:1571
@ SMART_TARGET_HOSTILE_RANDOM
Definition SmartScriptMgr.h:1555
@ SMART_TARGET_GAMEOBJECT_GUID
Definition SmartScriptMgr.h:1564
@ SMART_TARGET_HOSTILE_SECOND_AGGRO
Definition SmartScriptMgr.h:1553
@ SMART_TARGET_OWNER_OR_SUMMONER
Definition SmartScriptMgr.h:1573
@ SMART_TARGET_SELF
Definition SmartScriptMgr.h:1551
@ SMART_TARGET_PLAYER_WITH_AURA
Definition SmartScriptMgr.h:1587
@ SMART_TARGET_ACTION_INVOKER
Definition SmartScriptMgr.h:1557
@ SMART_TARGET_POSITION
Definition SmartScriptMgr.h:1558
@ SMART_TARGET_HOSTILE_LAST_AGGRO
Definition SmartScriptMgr.h:1554
@ SMART_TARGET_ACTION_INVOKER_VEHICLE
Definition SmartScriptMgr.h:1572
@ SMART_TARGET_INSTANCE_STORAGE
Definition SmartScriptMgr.h:1591
@ SMART_TARGET_FARTHEST
Definition SmartScriptMgr.h:1578
@ SMART_TARGET_THREAT_LIST
Definition SmartScriptMgr.h:1574
@ SMART_TARGET_CLOSEST_ENEMY
Definition SmartScriptMgr.h:1575
@ SMART_TARGET_RANDOM_POINT
Definition SmartScriptMgr.h:1588
@ SMART_TARGET_NONE
Definition SmartScriptMgr.h:1550
@ SMART_TARGET_PLAYER_DISTANCE
Definition SmartScriptMgr.h:1568
@ SMART_TARGET_STORED
Definition SmartScriptMgr.h:1562
struct SmartTarget::@201::@226 instanceStorage
struct SmartTarget::@201::@205 unitRange
struct SmartTarget::@201::@218 threatList
struct SmartTarget::@201::@224 summonedCreatures
struct SmartTarget::@201::@214 goDistance
struct SmartTarget::@201::@211 stored
struct SmartTarget::@201::@223 playerWithAura
struct SmartTarget::@201::@216 owner
struct SmartTarget::@201::@210 playerRange
struct SmartTarget::@201::@215 unitClosest
struct SmartTarget::@201::@203 hostileRandom
struct SmartTarget::@201::@219 goClosest
struct SmartTarget::@201::@212 goRange
struct SmartTarget::@201::@228 invokerParty
struct SmartTarget::@201::@204 farthest
struct SmartTarget::@201::@220 closestAttackable
struct SmartTarget::@201::@217 vehicle
struct SmartTarget::@201::@221 closestFriendly
struct SmartTarget::@201::@227 formation
struct SmartTarget::@201::@222 randomPoint
struct SmartTarget::@201::@225 raw
struct SmartTarget::@201::@213 goGUID
struct SmartTarget::@201::@209 playerDistance
struct SmartTarget::@201::@208 unitDistance
struct SmartTarget::@201::@206 unitGUID

References SmartTarget::closestAttackable, SmartTarget::closestFriendly, SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartTarget::farthest, SmartTarget::formation, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), SmartScriptHolder::GetTargetType(), SmartTarget::goClosest, SmartTarget::goDistance, SmartTarget::goGUID, SmartTarget::goRange, SmartTarget::hostileRandom, SmartTarget::instanceStorage, SmartTarget::invokerParty, LOG_ERROR, LOG_WARN, SmartTarget::owner, SmartTarget::playerDistance, SmartTarget::playerRange, SmartTarget::playerWithAura, SmartTarget::randomPoint, SmartTarget::raw, SMART_TARGET_ACTION_INVOKER, SMART_TARGET_ACTION_INVOKER_VEHICLE, SMART_TARGET_CLOSEST_CREATURE, SMART_TARGET_CLOSEST_ENEMY, SMART_TARGET_CLOSEST_FRIENDLY, SMART_TARGET_CLOSEST_GAMEOBJECT, SMART_TARGET_CLOSEST_PLAYER, SMART_TARGET_CREATURE_DISTANCE, SMART_TARGET_CREATURE_GUID, SMART_TARGET_CREATURE_RANGE, SMART_TARGET_FARTHEST, SMART_TARGET_FORMATION, SMART_TARGET_GAMEOBJECT_DISTANCE, SMART_TARGET_GAMEOBJECT_GUID, SMART_TARGET_GAMEOBJECT_RANGE, SMART_TARGET_HOSTILE_LAST_AGGRO, SMART_TARGET_HOSTILE_RANDOM, SMART_TARGET_HOSTILE_RANDOM_NOT_TOP, SMART_TARGET_HOSTILE_SECOND_AGGRO, SMART_TARGET_INSTANCE_STORAGE, SMART_TARGET_INVOKER_PARTY, SMART_TARGET_LOOT_RECIPIENTS, SMART_TARGET_NONE, SMART_TARGET_OWNER_OR_SUMMONER, SMART_TARGET_PLAYER_DISTANCE, SMART_TARGET_PLAYER_RANGE, SMART_TARGET_PLAYER_WITH_AURA, SMART_TARGET_POSITION, SMART_TARGET_RANDOM_POINT, SMART_TARGET_SELF, SMART_TARGET_STORED, SMART_TARGET_SUMMONED_CREATURES, SMART_TARGET_THREAT_LIST, SMART_TARGET_VEHICLE_PASSENGER, SMART_TARGET_VICTIM, SmartTarget::stored, SmartTarget::summonedCreatures, SmartScriptHolder::target, SmartTarget::threatList, SmartTarget::type, SmartTarget::unitClosest, SmartTarget::unitDistance, SmartTarget::unitGUID, SmartTarget::unitRange, and SmartTarget::vehicle.

Referenced by IsTargetValid().

◆ EventHasInvoker()

bool SmartAIMgr::EventHasInvoker ( SMART_EVENT  event)
staticprivate
399{
400 switch (event)
401 { // white list of events that actually have an invoker passed to them
404 case SMART_EVENT_KILL:
447 return true;
448 default:
449 return false;
450 }
451}

References SMART_EVENT_ACCEPTED_QUEST, SMART_EVENT_ACTION_DONE, SMART_EVENT_AGGRO, SMART_EVENT_AREA_CASTING, SMART_EVENT_AREA_RANGE, SMART_EVENT_AREATRIGGER_ONTRIGGER, SMART_EVENT_DAMAGED, SMART_EVENT_DAMAGED_TARGET, SMART_EVENT_DATA_SET, SMART_EVENT_DEATH, SMART_EVENT_DISTANCE_CREATURE, SMART_EVENT_FOLLOW_COMPLETED, SMART_EVENT_FRIENDLY_HEALTH, SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_EVENT_FRIENDLY_IS_CC, SMART_EVENT_FRIENDLY_MISSING_BUFF, SMART_EVENT_GO_STATE_CHANGED, SMART_EVENT_GOSSIP_HELLO, SMART_EVENT_GOSSIP_SELECT, SMART_EVENT_IC_LOS, SMART_EVENT_INSTANCE_PLAYER_ENTER, SMART_EVENT_IS_BEHIND_TARGET, SMART_EVENT_IS_IN_MELEE_RANGE, SMART_EVENT_JUST_SUMMONED, SMART_EVENT_KILL, SMART_EVENT_NEAR_PLAYERS, SMART_EVENT_ON_SPELLCLICK, SMART_EVENT_OOC_LOS, SMART_EVENT_PASSENGER_BOARDED, SMART_EVENT_PASSENGER_REMOVED, SMART_EVENT_RANGE, SMART_EVENT_RECEIVE_EMOTE, SMART_EVENT_RECEIVE_HEAL, SMART_EVENT_REWARD_QUEST, SMART_EVENT_SPELLHIT, SMART_EVENT_SPELLHIT_TARGET, SMART_EVENT_SUMMON_DESPAWNED, SMART_EVENT_SUMMONED_UNIT, SMART_EVENT_SUMMONED_UNIT_DIES, SMART_EVENT_SUMMONED_UNIT_EVADE, SMART_EVENT_TARGET_BUFFED, SMART_EVENT_TARGET_HEALTH_PCT, SMART_EVENT_TARGET_MANA_PCT, SMART_EVENT_TRANSPORT_ADDCREATURE, and SMART_EVENT_VICTIM_CASTING.

Referenced by IsEventValid(), and IsTargetValid().

◆ GetScript()

SmartAIEventList SmartAIMgr::GetScript ( int32  entry,
SmartScriptType  type 
)
inline
2112 {
2113 SmartAIEventList temp;
2114 if (mEventMap[uint32(type)].find(entry) != mEventMap[uint32(type)].end())
2115 return mEventMap[uint32(type)][entry];
2116 else
2117 {
2118 if (entry > 0) //first search is for guid (negative), do not drop error if not found
2119 LOG_DEBUG("sql.sql", "SmartAIMgr::GetScript: Could not load Script for Entry {} ScriptType {}.", entry, uint32(type));
2120 return temp;
2121 }
2122 }
#define LOG_DEBUG(filterType__,...)
Definition Log.h:157
std::vector< SmartScriptHolder > SmartAIEventList
Definition SmartScriptMgr.h:2094

References LOG_DEBUG, and mEventMap.

◆ instance()

SmartAIMgr * SmartAIMgr::instance ( )
static
112{
113 static SmartAIMgr instance;
114 return &instance;
115}
Definition SmartScriptMgr.h:2101
static SmartAIMgr * instance()
Definition SmartScriptMgr.cpp:111

References instance().

Referenced by instance().

◆ IsAreaTriggerValid()

bool SmartAIMgr::IsAreaTriggerValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2244 {
2245 if (!sObjectMgr->GetAreaTrigger(entry))
2246 {
2247 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent AreaTrigger entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2248 return false;
2249 }
2250 return true;
2251 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sObjectMgr.

Referenced by IsEventValid().

◆ IsCreatureValid()

bool SmartAIMgr::IsCreatureValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2174 {
2175 if (!sObjectMgr->GetCreatureTemplate(entry))
2176 {
2177 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Creature entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2178 return false;
2179 }
2180 return true;
2181 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sObjectMgr.

Referenced by IsEventValid(), and IsTargetValid().

◆ IsEmoteValid()

bool SmartAIMgr::IsEmoteValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2234 {
2235 if (!sEmotesStore.LookupEntry(entry))
2236 {
2237 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Emote entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2238 return false;
2239 }
2240 return true;
2241 }
DBCStorage< EmotesEntry > sEmotesStore(EmotesEntryfmt)

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sEmotesStore.

Referenced by IsEventValid().

◆ IsEventValid()

bool SmartAIMgr::IsEventValid ( SmartScriptHolder e)
private
992{
994 {
995 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has invalid event type ({}), skipped.", e.entryOrGuid, e.event_id, e.GetEventType());
996 return false;
997 }
998 // in SMART_SCRIPT_TYPE_TIMED_ACTIONLIST all event types are overriden by core
1000 {
1001 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {}, event type {} can not be used for Script type {}", e.entryOrGuid, e.GetEventType(), e.GetScriptType());
1002 return false;
1003 }
1004 if (e.action.type <= 0
1007 {
1008 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has an invalid action type ({}), skipped.", e.entryOrGuid, e.event_id, e.GetActionType());
1009 return false;
1010 }
1011 switch (e.action.type)
1012 {
1017 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has an action type that is not supported on 3.3.5a ({}), skipped.",
1019 return false;
1024 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has an action type that is not yet supported on AzerothCore ({}), skipped.",
1026 return false;
1029 {
1030 if (!sObjectMgr->GetSpawnGroupData(e.action.groupSpawn.groupId))
1031 {
1032 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has action type {} with invalid spawn group id {}.",
1034 return false;
1035 }
1036 break;
1037 }
1038 default:
1039 break;
1040 }
1042 {
1043 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has an invalid target type ({}), skipped.",
1045 return false;
1046 }
1048 {
1049 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has a target type that is not yet supported on AzerothCore ({}), skipped.",
1051 return false;
1052 }
1054 {
1055 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has invalid phase mask ({}), skipped.", e.entryOrGuid, e.event_id, e.event.event_phase_mask);
1056 return false;
1057 }
1059 {
1060 LOG_ERROR("sql.sql", "SmartAIMgr: EntryOrGuid {} using event({}) has invalid event flags ({}), skipped.", e.entryOrGuid, e.event_id, e.event.event_flags);
1061 return false;
1062 }
1064 {
1065 e.event.type = SMART_EVENT_UPDATE_OOC;//force default OOC, can change when calling the script!
1067 return false;
1068
1070 return false;
1071 }
1072 else
1073 {
1074 uint32 type = e.event.type;
1075 switch (type)
1076 {
1077 case SMART_EVENT_UPDATE:
1087 return false;
1088
1090 return false;
1091 break;
1093 if (e.event.minMaxRepeat.rangeMin) // health check mode
1094 {
1095 if (e.event.minMaxRepeat.rangeMin > 100)
1096 {
1097 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid health pct value ({}), must be between 1 and 100, skipped.",
1099 return false;
1100 }
1101 }
1102 else // normal mode
1103 {
1105 return false;
1106
1108 return false;
1109 }
1110 break;
1114 case SMART_EVENT_RANGE:
1117 return false;
1118
1120 return false;
1121
1123 return false;
1124
1125 break;
1128 if (e.event.spellHit.spell)
1129 {
1130 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(e.event.spellHit.spell);
1131 if (!spellInfo)
1132 {
1133 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Spell entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.spellHit.spell);
1134 return false;
1135 }
1136 if (e.event.spellHit.school && (e.event.spellHit.school & spellInfo->SchoolMask) != spellInfo->SchoolMask)
1137 {
1138 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses Spell entry {} with invalid school mask, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.spellHit.spell);
1139 return false;
1140 }
1141 }
1143 return false;
1144 break;
1146 case SMART_EVENT_IC_LOS:
1148 return false;
1149
1151 {
1152 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses hostilityMode with invalid value {} (max allowed value {}), skipped.",
1154 return false;
1155 }
1156
1157 return IsSAIBoolValid(e, e.event.los.playerOnly);
1160 {
1161 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Map entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.respawn.map);
1162 return false;
1163 }
1165 {
1166 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Area entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.respawn.area);
1167 return false;
1168 }
1169 break;
1172 return false;
1173
1175 return false;
1176 break;
1179 return false;
1180 break;
1182 {
1184 return false;
1185
1186 if (!NotNULL(e, e.event.missingBuff.radius))
1187 return false;
1188
1190 return false;
1191 break;
1192 }
1193 case SMART_EVENT_KILL:
1195 return false;
1196
1198 return false;
1199
1200 return IsSAIBoolValid(e, e.event.kill.playerOnly);
1202 if (e.event.targetCasting.spellId > 0 && !sSpellMgr->GetSpellInfo(e.event.targetCasting.spellId))
1203 {
1204 LOG_ERROR("scripts.ai.sai", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Spell entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.spellHit.spell);
1205 return false;
1206 }
1207
1209 return false;
1210 break;
1214 return false;
1215 break;
1221 return false;
1222
1224 return false;
1225 break;
1228 if (e.event.quest.quest && !IsQuestValid(e, e.event.quest.quest))
1229 return false;
1230
1231 if (!IsMinMaxValid(e, e.event.quest.cooldownMin, e.event.quest.cooldownMax))
1232 return false;
1233 break;
1235 {
1236 if (e.event.emote.emote && !IsTextEmoteValid(e, e.event.emote.emote))
1237 return false;
1238
1239 if (!IsMinMaxValid(e, e.event.emote.cooldownMin, e.event.emote.cooldownMax))
1240 return false;
1241 break;
1242 }
1245 {
1246 if (!IsSpellValid(e, e.event.aura.spell))
1247 return false;
1248
1250 return false;
1251 break;
1252 }
1254 {
1256 return false;
1257 break;
1258 }
1260 {
1262 {
1263 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid Motion type {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.movementInform.type);
1264 return false;
1265 }
1266 break;
1267 }
1269 {
1271 return false;
1272 break;
1273 }
1275 {
1277 return false;
1278 break;
1279 }
1281 //if (e.event.textOver.textGroupID && !IsTextValid(e, e.event.textOver.textGroupID)) return false;// 0 is a valid text group!
1282 break;
1283 case SMART_EVENT_LINK:
1284 {
1285 if (e.link && e.link == e.event_id)
1286 {
1287 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {}, Event {}, Link Event is linking self (infinite loop), skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id);
1288 return false;
1289 }
1290 break;
1291 }
1293 {
1295 {
1296 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has no param set, event won't be executed!.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1297 return false;
1298 }
1299
1301 {
1302 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid phasemask {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.eventPhaseChange.phasemask);
1303 return false;
1304 }
1305
1307 {
1308 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses event phasemask {} and incompatible event_param1 {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.event_phase_mask, e.event.eventPhaseChange.phasemask);
1309 return false;
1310 }
1311 break;
1312 }
1315 {
1316 GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap();
1317 if (e.event.gameEvent.gameEventId >= events.size() || !events[e.event.gameEvent.gameEventId].isValid())
1318 return false;
1319 break;
1320 }
1322 {
1324 {
1325 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid event id {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.doAction.eventId);
1326 return false;
1327 }
1328 break;
1329 }
1332 return false;
1333
1335 return false;
1336
1337 if (e.event.friendlyHealthPct.hpPct > 100)
1338 {
1339 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has pct value above 100, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1340 return false;
1341 }
1342
1343 switch (e.GetTargetType())
1344 {
1352 break;
1353 case SMART_TARGET_SELF:
1356 {
1357 return false;
1358 }
1359 break;
1360 default:
1361 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid target_type {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.GetTargetType());
1362 return false;
1363 }
1364 break;
1366 if (e.event.distance.guid == 0 && e.event.distance.entry == 0)
1367 {
1368 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE did not provide creature guid or entry, skipped.");
1369 return false;
1370 }
1371
1372 if (e.event.distance.guid != 0 && e.event.distance.entry != 0)
1373 {
1374 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE provided both an entry and guid, skipped.");
1375 return false;
1376 }
1377
1378 if (e.event.distance.guid != 0 && !sObjectMgr->GetCreatureData(e.event.distance.guid))
1379 {
1380 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE using invalid creature guid {}, skipped.", e.event.distance.guid);
1381 return false;
1382 }
1383
1384 if (e.event.distance.entry != 0 && !sObjectMgr->GetCreatureTemplate(e.event.distance.entry))
1385 {
1386 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_CREATURE using invalid creature entry {}, skipped.", e.event.distance.entry);
1387 return false;
1388 }
1389 break;
1391 if (e.event.distance.guid == 0 && e.event.distance.entry == 0)
1392 {
1393 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT did not provide gameobject guid or entry, skipped.");
1394 return false;
1395 }
1396
1397 if (e.event.distance.guid != 0 && e.event.distance.entry != 0)
1398 {
1399 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT provided both an entry and guid, skipped.");
1400 return false;
1401 }
1402
1403 if (e.event.distance.guid != 0 && !sObjectMgr->GetGameObjectData(e.event.distance.guid))
1404 {
1405 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT using invalid gameobject guid {}, skipped.", e.event.distance.guid);
1406 return false;
1407 }
1408
1409 if (e.event.distance.entry != 0 && !sObjectMgr->GetGameObjectTemplate(e.event.distance.entry))
1410 {
1411 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_DISTANCE_GAMEOBJECT using invalid gameobject entry {}, skipped.", e.event.distance.entry);
1412 return false;
1413 }
1414 break;
1417 return false;
1418
1419 if (e.event.counter.id == 0)
1420 {
1421 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_COUNTER_SET using invalid counter id {}, skipped.", e.event.counter.id);
1422 return false;
1423 }
1424
1425 if (e.event.counter.value == 0)
1426 {
1427 LOG_ERROR("sql.sql", "SmartAIMgr: Event SMART_EVENT_COUNTER_SET using invalid value {}, skipped.", e.event.counter.value);
1428 return false;
1429 }
1430 break;
1433 return false;
1434 break;
1437 return false;
1438 break;
1452 case SMART_EVENT_AGGRO:
1453 case SMART_EVENT_DEATH:
1454 case SMART_EVENT_EVADE:
1456 case SMART_EVENT_RESET:
1476 break;
1477 default:
1478 LOG_ERROR("sql.sql", "SmartAIMgr: Not handled event_type({}), Entry {} SourceType {} Event {} Action {}, skipped.", e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1479 return false;
1480 }
1481 }
1482
1483 if (!CheckUnusedEventParams(e))
1484 {
1485 return false;
1486 }
1487
1488 switch (e.GetActionType())
1489 {
1492 {
1493 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Faction {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.faction.factionID);
1494 return false;
1495 }
1496 break;
1500 {
1501 if (e.action.morphOrMount.creature > 0 && !sObjectMgr->GetCreatureTemplate(e.action.morphOrMount.creature))
1502 {
1503 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Creature entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.morphOrMount.creature);
1504 return false;
1505 }
1506
1508 {
1510 {
1511 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has ModelID set with also set CreatureId, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1512 return false;
1513 }
1514 else if (!sCreatureDisplayInfoStore.LookupEntry(e.action.morphOrMount.model))
1515 {
1516 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Model id {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.morphOrMount.model);
1517 return false;
1518 }
1519 }
1520 }
1521 break;
1522 case SMART_ACTION_SOUND:
1523 if (!IsSoundValid(e, e.action.sound.sound))
1524 return false;
1525 return IsSAIBoolValid(e, e.action.sound.onlySelf);
1528 return false;
1529
1531 return false;
1532
1534 return false;
1535
1537 return false;
1538 break;
1539 case SMART_ACTION_MUSIC:
1540 if (!IsSoundValid(e, e.action.music.sound))
1541 return false;
1542 break;
1545 return false;
1546
1548 return false;
1549
1551 return false;
1552
1554 return false;
1555 break;
1558 if (!IsEmoteValid(e, e.action.emote.emote))
1559 return false;
1560 break;
1563 return false;
1564
1567 if (!IsQuestValid(e, e.action.quest.quest))
1568 return false;
1569 break;
1571 {
1572 if (!sTaxiPathStore.LookupEntry(e.action.taxi.id))
1573 {
1574 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid Taxi path ID {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.taxi.id);
1575 return false;
1576 }
1577 break;
1578 }
1580 {
1581 if (std::all_of(e.action.randomEmote.emotes.begin(), e.action.randomEmote.emotes.end(), [](uint32 emote) { return emote == 0; }))
1582 {
1583 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero emote",
1585 return false;
1586 }
1587
1588 for (uint32 emote : e.action.randomEmote.emotes)
1589 if (emote && !IsEmoteValid(e, emote))
1590 return false;
1591 break;
1592 }
1594 {
1595 if (std::all_of(e.action.randTimedActionList.actionLists.begin(), e.action.randTimedActionList.actionLists.end(), [](uint32 actionList) { return actionList == 0; }))
1596 {
1597 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero action list",
1599 return false;
1600 }
1601 break;
1602 }
1604 {
1606 {
1607 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid pathId1 or pathId2, it must be greater than 0 and pathId1 > pathId2",
1609 return false;
1610 }
1612 {
1613 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid forcedMovement ({}) or repeat ({}) parameter, must be 0 or 1.",
1616 return false;
1617 }
1618 break;
1619 }
1622 {
1623 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invoker cast action, but event does not provide any invoker!", e.entryOrGuid, e.GetScriptType(), e.GetEventType(), e.GetActionType());
1624 return false;
1625 }
1626 break;
1627 case SMART_ACTION_CAST:
1630 return false;
1631 break;
1634 return false;
1635 break;
1637 if (!IsSpellValid(e, e.action.addAura.spell))
1638 return false;
1639 break;
1642 if (Quest const* qid = sObjectMgr->GetQuestTemplate(e.action.quest.quest))
1643 {
1644 if (!qid->HasSpecialFlag(QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT))
1645 {
1646 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} SpecialFlags for Quest entry {} does not include FLAGS_EXPLORATION_OR_EVENT(2), skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.quest.quest);
1647 return false;
1648 }
1649 }
1650 else
1651 {
1652 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Quest entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.quest.quest);
1653 return false;
1654 }
1655 break;
1658 {
1659 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to set phase {}. Phase mask cannot be used past phase {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.setEventPhase.phase, SMART_EVENT_PHASE_MAX - 1);
1660 return false;
1661 }
1662 break;
1665 {
1666 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} is incrementing phase by 0, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1667 return false;
1668 }
1670 {
1671 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to increment phase by too large value, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1672 return false;
1673 }
1674 break;
1677 return false;
1678 break;
1680 {
1681 if (std::all_of(e.action.randomPhase.phases.begin(), e.action.randomPhase.phases.end(), [](uint32 phase) { return phase == 0; }))
1682 {
1683 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} does not have any non-zero phase",
1685 return false;
1686 }
1687
1688 if (std::any_of(e.action.randomPhase.phases.begin(), e.action.randomPhase.phases.end(), [](uint32 phase) { return phase >= SMART_EVENT_PHASE_MAX; }))
1689 {
1690 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1691 return false;
1692 }
1693 break;
1694 }
1695 case SMART_ACTION_RANDOM_PHASE_RANGE: //PhaseMin, PhaseMax
1696 {
1699 {
1700 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} attempts to set invalid phase, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1701 return false;
1702 }
1703
1705 return false;
1706 break;
1707 }
1710 return false;
1712 {
1713 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses incorrect TempSummonType {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.summonCreature.type);
1714 return false;
1715 }
1716
1720 return false;
1721 break;
1724 return false;
1728 {
1729 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses incorrect Sheath state {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.setSheath.sheath);
1730 return false;
1731 }
1732 break;
1734 {
1736 {
1737 LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses invalid React State {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.react.state);
1738 return false;
1739 }
1740 break;
1741 }
1744 return false;
1745 break;
1748 if (!IsItemValid(e, e.action.item.entry))
1749 return false;
1750
1751 if (!NotNULL(e, e.action.item.count))
1752 return false;
1753 break;
1755 if (!sMapStore.LookupEntry(e.action.teleport.mapID))
1756 {
1757 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Map entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.teleport.mapID);
1758 return false;
1759 }
1760 break;
1763 {
1764 LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses non-existent AI template id {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.installTtemplate.id);
1765 return false;
1766 }
1767 break;
1770 return false;
1771 return IsSAIBoolValid(e, e.action.wpStop.fail);
1773 {
1774 if (!sSmartWaypointMgr->GetPath(e.action.wpStart.pathID))
1775 {
1776 LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses non-existent WaypointPath id {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.wpStart.pathID);
1777 return false;
1778 }
1780 return false;
1781
1782 // Allow "invalid" value 3 for a while to allow cleanup the values stored in the db for SMART_ACTION_WP_START.
1783 // Remember to remove this once the clean is complete.
1784 constexpr uint32 TEMPORARY_EXTRA_VALUE_FOR_DB_CLEANUP = 1;
1785
1786 if (e.action.wpStart.reactState > (REACT_AGGRESSIVE + TEMPORARY_EXTRA_VALUE_FOR_DB_CLEANUP))
1787 {
1788 LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses invalid React State {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.wpStart.reactState);
1789 return false;
1790 }
1791
1793 {
1794 LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses invalid forcedMovement {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.wpStart.forcedMovement);
1795 return false;
1796 }
1797
1798 return IsSAIBoolValid(e, e.action.wpStart.repeat);
1799 }
1801 {
1803 return false;
1804
1806 return false;
1807 break;
1808 }
1810 {
1812 return false;
1813 break;
1814 }
1819 {
1820 LOG_ERROR("scripts.ai.sai", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Power {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.power.powerType);
1821 return false;
1822 }
1823 break;
1825 {
1826 uint32 eventId = e.action.gameEventStop.id;
1827
1828 GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap();
1829 if (eventId < 1 || eventId >= events.size())
1830 {
1831 LOG_ERROR("scripts.ai.sai", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent event, eventId {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.gameEventStop.id);
1832 return false;
1833 }
1834
1835 GameEventData const& eventData = events[eventId];
1836 if (!eventData.isValid())
1837 {
1838 LOG_ERROR("scripts.ai.sai", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent event, eventId {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.gameEventStop.id);
1839 return false;
1840 }
1841 break;
1842 }
1844 {
1845 uint32 eventId = e.action.gameEventStart.id;
1846
1847 GameEventMgr::GameEventDataMap const& events = sGameEventMgr->GetEventMap();
1848 if (eventId < 1 || eventId >= events.size())
1849 {
1850 LOG_ERROR("scripts.ai.sai", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent event, eventId {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.gameEventStart.id);
1851 return false;
1852 }
1853
1854 GameEventData const& eventData = events[eventId];
1855 if (!eventData.isValid())
1856 {
1857 LOG_ERROR("scripts.ai.sai", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent event, eventId {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.gameEventStart.id);
1858 return false;
1859 }
1860 break;
1861 }
1862 case SMART_ACTION_EQUIP:
1863 {
1865 {
1866 if (int8 equipId = static_cast<int8>(e.action.equip.entry))
1867 {
1868 EquipmentInfo const* eInfo = sObjectMgr->GetEquipmentInfo(e.entryOrGuid, equipId);
1869 if (!eInfo)
1870 {
1871 LOG_ERROR("scripts.ai.sai", "SmartScript: SMART_ACTION_EQUIP uses non-existent equipment info id {} for creature {}, skipped.", equipId, e.entryOrGuid);
1872 return false;
1873 }
1874 }
1875 }
1876 break;
1877 }
1879 {
1881 {
1882 LOG_ERROR("scripts.ai.sai", "SmartScript: SMART_ACTION_LOAD_GRID uses invalid map coords: {}, skipped.", e.entryOrGuid);
1883 return false;
1884 }
1885 break;
1886 }
1888 {
1890 {
1891 LOG_ERROR("sql.sql", "SmartScript: action_type {} is not allowed with source_type {}. Entry {}, skipped.", e.GetActionType(), e.GetScriptType(), e.entryOrGuid);
1892 return false;
1893 }
1894 break;
1895 }
1897 {
1898 if (e.action.setInstanceData.type == 1)
1899 {
1901 {
1902 LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_SET_INST_DATA with type 1 (bossState) uses invalid encounter state {}. Source entry {}, type {}", e.action.setInstanceData.data, e.entryOrGuid, e.GetScriptType());
1903 return false;
1904 }
1905 }
1906 else if (e.action.setInstanceData.type > 1)
1907 {
1908 LOG_ERROR("sql.sql", "SmartScript: SMART_ACTION_SET_INST_DATA uses unsupported data type {}. Source entry {}, type {}", e.action.setInstanceData.type, e.entryOrGuid, e.GetScriptType());
1909 return false;
1910 }
1911 break;
1912 }
1914 {
1916 {
1917 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} is trying to set invalid HP percent {}, skipped.",
1919 return false;
1920 }
1921 break;
1922 }
1924 {
1926 {
1927 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid movementType {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.movementSpeed.movementType);
1928 return false;
1929 }
1930
1932 {
1933 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses speed 0, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
1934 return false;
1935 }
1936 break;
1937 }
1939 if (e.action.animTier.animTier >= uint32(AnimTier::Max))
1940 {
1941 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses invalid animtier %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.animTier.animTier);
1942 return false;
1943 }
1944 break;
1948 return IsSAIBoolValid(e, e.action.combatMove.move);
1954 return IsSAIBoolValid(e, e.action.setRun.run);
1956 return IsSAIBoolValid(e, e.action.setFly.fly);
1958 return IsSAIBoolValid(e, e.action.setSwim.swim);
1965 return IsSAIBoolValid(e, e.action.setRoot.root);
1970 case SMART_ACTION_TALK:
1972 return false;
1976 return false;
1977 break;
1983 return IsSAIBoolValid(e, e.action.reward.reputation) &&
1987 case SMART_ACTION_EVADE:
1993 case SMART_ACTION_DIE:
2047 case SMART_ACTION_FLEE:
2054 case SMART_ACTION_FALL:
2085 break;
2086 default:
2087 LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type({}), event_type({}), Entry {} SourceType {} Event {}, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
2088 return false;
2089 }
2090
2092 return false;
2093
2094 return true;
2095}
DBCStorage< CreatureDisplayInfoEntry > sCreatureDisplayInfoStore(CreatureDisplayInfofmt)
DBCStorage< FactionTemplateEntry > sFactionTemplateStore(FactionTemplateEntryfmt)
DBCStorage< TaxiPathEntry > sTaxiPathStore(TaxiPathEntryfmt)
DBCStorage< MapEntry > sMapStore(MapEntryfmt)
DBCStorage< AreaTableEntry > sAreaTableStore(AreaTableEntryfmt)
std::int8_t int8
Definition Define.h:105
#define sGameEventMgr
Definition GameEventMgr.h:201
@ TO_BE_DECIDED
Definition InstanceScript.h:63
@ NULL_MOTION_TYPE
Definition MotionMaster.h:59
@ FORCED_MOVEMENT_MAX
Definition MotionMaster.h:90
@ TEMPSUMMON_MANUAL_DESPAWN
Definition Object.h:56
@ TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
Definition Object.h:49
@ QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT
Definition QuestDef.h:161
@ MAX_POWERS
Definition SharedDefines.h:264
@ EVENT_CHARGE
Definition SharedDefines.h:3560
@ SMART_SCRIPT_TYPE_TIMED_ACTIONLIST
Definition SmartScriptMgr.h:1803
@ SMARTAI_TEMPLATE_END
Definition SmartScriptMgr.h:1545
@ SMART_EVENT_FLAGS_ALL
Definition SmartScriptMgr.h:1964
@ SMART_TARGET_AC_END
Definition SmartScriptMgr.h:1594
@ SMART_TARGET_AC_START
Definition SmartScriptMgr.h:1585
@ SMART_TARGET_TC_END
Definition SmartScriptMgr.h:1581
const uint32 SmartAIEventMask[SMART_EVENT_AC_END][2]
Definition SmartScriptMgr.h:1835
#define sSmartWaypointMgr
Definition SmartScriptMgr.h:2271
@ SMART_SCRIPT_RESPAWN_CONDITION_AREA
Definition SmartScriptMgr.h:536
@ SMART_SCRIPT_RESPAWN_CONDITION_MAP
Definition SmartScriptMgr.h:535
@ SMART_ACTION_TC_END
Definition SmartScriptMgr.h:682
@ SMART_ACTION_AC_START
Definition SmartScriptMgr.h:685
@ SMART_ACTION_CONE_SUMMON
Definition SmartScriptMgr.h:706
@ SMART_ACTION_REMOVE_AURAS_BY_TYPE
Definition SmartScriptMgr.h:662
@ SMART_ACTION_VORTEX_SUMMON
Definition SmartScriptMgr.h:708
@ SMART_ACTION_RANDOM_MUSIC
Definition SmartScriptMgr.h:703
@ SMART_ACTION_ADD_IMMUNITY
Definition SmartScriptMgr.h:694
@ SMART_ACTION_CUSTOM_CAST
Definition SmartScriptMgr.h:705
@ SMART_ACTION_CU_ENCOUNTER_START
Definition SmartScriptMgr.h:709
@ SMART_ACTION_AC_END
Definition SmartScriptMgr.h:731
@ SMART_ACTION_PLAYER_TALK
Definition SmartScriptMgr.h:707
@ SMART_ACTION_RESPAWN_BY_SPAWNID
Definition SmartScriptMgr.h:675
@ SMART_ACTION_REMOVE_MOVEMENT
Definition SmartScriptMgr.h:669
@ SMART_ACTION_SET_CAN_FLY
Definition SmartScriptMgr.h:661
@ SMART_ACTION_REMOVE_IMMUNITY
Definition SmartScriptMgr.h:695
@ SMART_EVENT_AC_START
Definition SmartScriptMgr.h:188
@ SMART_EVENT_TC_END
Definition SmartScriptMgr.h:185
@ SMART_EVENT_AC_END
Definition SmartScriptMgr.h:201
@ SMART_EVENT_PHASE_ALL
Definition SmartScriptMgr.h:78
@ SMART_EVENT_PHASE_MAX
Definition SmartScriptMgr.h:58
const uint32 SmartAITypeMask[SMART_SCRIPT_TYPE_MAX][2]
Definition SmartScriptMgr.h:1821
#define sSpellMgr
Definition SpellMgr.h:847
#define MAX_MOVE_TYPE
Definition UnitDefines.h:367
#define MAX_SHEATH_STATE
Definition UnitDefines.h:134
@ REACT_AGGRESSIVE
Definition Unit.h:568
constexpr std::underlying_type< E >::type AsUnderlyingType(E enumValue)
Definition Util.h:610
events
Definition boss_sartura.cpp:43
std::vector< GameEventData > GameEventDataMap
Definition GameEventMgr.h:107
Definition QuestDef.h:210
bool IsTextEmoteValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2223
bool NotNULL(SmartScriptHolder const &e, uint32 data)
Definition SmartScriptMgr.h:2163
bool IsSoundValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2253
bool IsGameObjectValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2193
bool IsMinMaxValid(SmartScriptHolder const &e, uint32 min, uint32 max)
Definition SmartScriptMgr.h:2143
static bool EventHasInvoker(SMART_EVENT event)
Definition SmartScriptMgr.cpp:398
bool IsQuestValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2183
bool IsCreatureValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2173
bool IsAreaTriggerValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2243
static bool IsTextValid(SmartScriptHolder const &e, uint32 id)
Definition SmartScriptMgr.cpp:2097
static bool CheckUnusedEventParams(SmartScriptHolder const &e)
Definition SmartScriptMgr.cpp:590
static bool IsSAIBoolValid(SmartScriptHolder const &e, SAIBool value)
Definition SmartScriptMgr.cpp:30
static bool CheckUnusedActionParams(SmartScriptHolder const &e)
Definition SmartScriptMgr.cpp:715
bool IsItemValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2213
bool IsEmoteValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2233
bool IsSpellValid(SmartScriptHolder const &e, uint32 entry)
Definition SmartScriptMgr.h:2203
Definition SpellInfo.h:340
uint32 SchoolMask
Definition SpellInfo.h:416
bool IsValidMapCoord(float c)
Definition GridDefines.h:210
Definition CreatureData.h:360
Definition GameEventMgr.h:57
bool isValid() const
Definition GameEventMgr.h:73
std::array< uint32, SMART_ACTION_PARAM_COUNT > emotes
Definition SmartScriptMgr.h:833
uint32 forcedMovement
Definition SmartScriptMgr.h:1032
uint32 repeatMax
Definition SmartScriptMgr.h:1109
uint32 phaseMin
Definition SmartScriptMgr.h:935
SAIBool reset
Definition SmartScriptMgr.h:1094
std::array< uint32, SMART_ACTION_PARAM_COUNT > actionLists
Definition SmartScriptMgr.h:1157
SAIBool root
Definition SmartScriptMgr.h:1245
SAIBool disable
Definition SmartScriptMgr.h:1392
uint32 spell
Definition SmartScriptMgr.h:838
SAIBool force
Definition SmartScriptMgr.h:1314
SAIBool loot
Definition SmartScriptMgr.h:1510
uint32 data
Definition SmartScriptMgr.h:947
uint32 powerType
Definition SmartScriptMgr.h:1267
SAIBool regenHealth
Definition SmartScriptMgr.h:1240
uint32 entry
Definition SmartScriptMgr.h:922
SAIBool allowOverride
Definition SmartScriptMgr.h:1152
uint32 min
Definition SmartScriptMgr.h:1106
SAIBool withDelayed
Definition SmartScriptMgr.h:1168
SAIBool withInstant
Definition SmartScriptMgr.h:1170
uint32 percent
Definition SmartScriptMgr.h:988
uint32 dec
Definition SmartScriptMgr.h:904
struct SmartAction::@75::@84 randomMusic
uint32 mapID
Definition SmartScriptMgr.h:1087
uint32 model
Definition SmartScriptMgr.h:773
SAIBool attackInvoker
Definition SmartScriptMgr.h:869
SAIBool useTalkTarget
Definition SmartScriptMgr.h:755
SAIBool run
Definition SmartScriptMgr.h:1070
struct SmartAction::@75::@176 castCustom
SAIBool swim
Definition SmartScriptMgr.h:1082
uint32 sound2
Definition SmartScriptMgr.h:786
uint32 pathId2
Definition SmartScriptMgr.h:1284
uint32 creature
Definition SmartScriptMgr.h:772
uint32 sound3
Definition SmartScriptMgr.h:787
uint32 state
Definition SmartScriptMgr.h:828
uint32 sound1
Definition SmartScriptMgr.h:785
SAIBool updateLevel
Definition SmartScriptMgr.h:959
SMART_ACTION type
Definition SmartScriptMgr.h:747
uint32 sound4
Definition SmartScriptMgr.h:788
SAIBool attack
Definition SmartScriptMgr.h:888
uint32 repeatMin
Definition SmartScriptMgr.h:1108
SAIBool fly
Definition SmartScriptMgr.h:1075
uint32 textGroupID
Definition SmartScriptMgr.h:753
std::array< uint32, SMART_ACTION_PARAM_COUNT > phases
Definition SmartScriptMgr.h:930
SAIBool repeat
Definition SmartScriptMgr.h:1034
uint32 pathId1
Definition SmartScriptMgr.h:1283
uint32 count
Definition SmartScriptMgr.h:1055
uint32 inc
Definition SmartScriptMgr.h:903
uint32 phaseMax
Definition SmartScriptMgr.h:936
SAIBool withEmote
Definition SmartScriptMgr.h:970
uint32 max
Definition SmartScriptMgr.h:1107
uint32 speedFraction
Definition SmartScriptMgr.h:1404
SAIBool fail
Definition SmartScriptMgr.h:1049
SAIBool directAdd
Definition SmartScriptMgr.h:823
SAIBool reputation
Definition SmartScriptMgr.h:1509
uint32 reactState
Definition SmartScriptMgr.h:1037
uint32 speedInteger
Definition SmartScriptMgr.h:1403
uint32 factionID
Definition SmartScriptMgr.h:767
uint32 groupId
Definition SmartScriptMgr.h:1530
uint32 movementType
Definition SmartScriptMgr.h:1402
uint32 questID
Definition SmartScriptMgr.h:822
uint32 pathID
Definition SmartScriptMgr.h:1033
uint32 id
Definition SmartScriptMgr.h:1027
uint32 phase
Definition SmartScriptMgr.h:898
uint32 sheath
Definition SmartScriptMgr.h:975
uint32 map
Definition SmartScriptMgr.h:253
uint32 event_flags
Definition SmartScriptMgr.h:209
uint32 event_phase_mask
Definition SmartScriptMgr.h:207
uint32 entry
Definition SmartScriptMgr.h:447
uint32 id
Definition SmartScriptMgr.h:339
uint32 cooldownMax
Definition SmartScriptMgr.h:225
uint32 min
Definition SmartScriptMgr.h:214
uint32 radius
Definition SmartScriptMgr.h:273
uint32 school
Definition SmartScriptMgr.h:233
uint32 rangeMin
Definition SmartScriptMgr.h:218
uint32 eventId
Definition SmartScriptMgr.h:424
uint32 guid
Definition SmartScriptMgr.h:446
uint32 spellId
Definition SmartScriptMgr.h:267
uint32 hpPct
Definition SmartScriptMgr.h:440
uint32 hostilityMode
Hostility mode of the event. 0: hostile, 1: not hostile, 2: any.
Definition SmartScriptMgr.h:243
uint32 repeatMin
Definition SmartScriptMgr.h:216
uint32 area
Definition SmartScriptMgr.h:254
uint32 value
Definition SmartScriptMgr.h:346
SAIBool playerOnly
Definition SmartScriptMgr.h:226
uint32 spell
Definition SmartScriptMgr.h:232
uint32 repeatMax
Definition SmartScriptMgr.h:217
uint32 max
Definition SmartScriptMgr.h:215
uint32 gameEventId
Definition SmartScriptMgr.h:414
uint32 cooldownMin
Definition SmartScriptMgr.h:224
uint32 rangeMax
Definition SmartScriptMgr.h:219
SMART_EVENT type
Definition SmartScriptMgr.h:206
uint32 creature
Definition SmartScriptMgr.h:227
uint32 phasemask
Definition SmartScriptMgr.h:409
uint32 link
Definition SmartScriptMgr.h:2005
uint32 event_id
Definition SmartScriptMgr.h:2004
int32 entryOrGuid
Definition SmartScriptMgr.h:2002
uint32 GetScriptType() const
Definition SmartScriptMgr.h:2012
uint32 GetEventType() const
Definition SmartScriptMgr.h:2013
uint32 GetTargetType() const
Definition SmartScriptMgr.h:2015
SmartAction action
Definition SmartScriptMgr.h:2008
SmartEvent event
Definition SmartScriptMgr.h:2007
uint32 GetActionType() const
Definition SmartScriptMgr.h:2014
SmartTarget target
Definition SmartScriptMgr.h:2009
float x
Definition SmartScriptMgr.h:1612
float y
Definition SmartScriptMgr.h:1612
SMARTAI_TARGETS type
Definition SmartScriptMgr.h:1611

References SmartScriptHolder::action, SmartAction::actionLists, SmartAction::addAura, SmartAction::allowOverride, SmartAction::animTier, SmartEvent::area, SmartEvent::areatrigger, AsUnderlyingType(), SmartAction::attack, SmartAction::attackInvoker, SmartEvent::aura, SmartAction::autoAttack, SmartAction::callHelp, SmartAction::castCustom, CheckUnusedActionParams(), CheckUnusedEventParams(), SmartAction::combatMove, SmartEvent::cooldownMax, SmartEvent::cooldownMin, SmartAction::count, SmartEvent::counter, SmartEvent::creature, SmartAction::creature, SmartAction::crossCast, SmartAction::data, SmartEvent::dataSet, SmartAction::dec, SmartAction::directAdd, SmartAction::disable, SmartAction::disableEvade, SmartEvent::distance, SmartEvent::doAction, SmartEvent::emote, SmartAction::emote, SmartAction::emotes, SmartEvent::End, SmartEvent::entry, SmartAction::entry, SmartScriptHolder::entryOrGuid, SmartAction::equip, SmartScriptHolder::event, EVENT_CHARGE, SmartEvent::event_flags, SmartScriptHolder::event_id, SmartEvent::event_phase_mask, EventHasInvoker(), SmartEvent::eventId, SmartEvent::eventPhaseChange, SmartAction::faction, SmartAction::factionID, SmartAction::fail, SmartAction::fly, SmartAction::force, FORCED_MOVEMENT_MAX, SmartAction::forcedMovement, SmartEvent::friendlyCC, SmartEvent::friendlyHealth, SmartEvent::friendlyHealthPct, SmartEvent::gameEvent, SmartEvent::gameEventId, SmartAction::gameEventStart, SmartAction::gameEventStop, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetEventType(), SmartScriptHolder::GetScriptType(), SmartScriptHolder::GetTargetType(), SmartAction::groupId, SmartAction::groupSpawn, SmartEvent::guid, SmartEvent::hostilityMode, SmartEvent::hpPct, SmartEvent::id, SmartAction::id, SmartAction::inc, SmartAction::incEventPhase, SmartAction::installTtemplate, SmartAction::interruptSpellCasting, IsAreaTriggerValid(), IsCreatureValid(), IsEmoteValid(), IsGameObjectValid(), IsItemValid(), IsMinMaxValid(), IsQuestValid(), IsSAIBoolValid(), IsSoundValid(), IsSpellValid(), IsTextEmoteValid(), IsTextValid(), GameEventData::isValid(), Acore::IsValidMapCoord(), SmartAction::item, SmartEvent::kill, SmartAction::killedMonster, SmartScriptHolder::link, SmartAction::loadEquipment, LOG_ERROR, SmartAction::loot, SmartEvent::los, SmartEvent::map, SmartAction::mapID, SmartEvent::max, SmartAction::max, Max, MAX_MOVE_TYPE, MAX_POWERS, MAX_SHEATH_STATE, SmartEvent::min, SmartAction::min, SmartEvent::minMax, SmartEvent::minMaxRepeat, SmartEvent::missingBuff, SmartAction::model, SmartAction::morphOrMount, SmartAction::move, SmartEvent::movementInform, SmartAction::movementSpeed, SmartAction::movementType, SmartAction::music, SmartEvent::nearPlayer, SmartEvent::nearPlayerNegation, NotNULL(), NULL_MOTION_TYPE, SmartAction::pathID, SmartAction::pathId1, SmartAction::pathId2, SmartAction::percent, SmartAction::phase, SmartEvent::phasemask, SmartAction::phaseMax, SmartAction::phaseMin, SmartAction::phases, SmartEvent::playerOnly, SmartAction::power, SmartAction::powerType, SmartEvent::quest, SmartAction::quest, QUEST_SPECIAL_FLAGS_EXPLORATION_OR_EVENT, SmartAction::questID, SmartAction::questOffer, SmartEvent::radius, SmartAction::randomEmote, SmartAction::randomMusic, SmartAction::randomPhase, SmartAction::randomPhaseRange, SmartAction::randomSound, SmartAction::randTimedActionList, SmartEvent::rangeMax, SmartEvent::rangeMin, SmartAction::react, REACT_AGGRESSIVE, SmartAction::reactState, SmartAction::regenHealth, SmartAction::removeAura, SmartAction::repeat, SmartEvent::repeatMax, SmartAction::repeatMax, SmartEvent::repeatMin, SmartAction::repeatMin, SmartAction::reputation, SmartAction::reset, SmartEvent::respawn, SmartAction::reward, SmartAction::root, SmartAction::run, sAreaTableStore, SmartEvent::school, SpellInfo::SchoolMask, sCreatureDisplayInfoStore, SmartAction::setCounter, SmartAction::setEventPhase, SmartAction::setFly, SmartAction::setHealthPct, SmartAction::setHealthRegen, SmartAction::setInstanceData, SmartAction::setRoot, SmartAction::setRun, SmartAction::setSheath, SmartAction::setSwim, sFactionTemplateStore, sGameEventMgr, SmartAction::sheath, SmartAction::simpleTalk, sMapStore, SMART_ACTION_AC_END, SMART_ACTION_AC_START, SMART_ACTION_ACTIVATE_GOBJECT, SMART_ACTION_ACTIVATE_TAXI, SMART_ACTION_ADD_AURA, SMART_ACTION_ADD_DYNAMIC_FLAG, SMART_ACTION_ADD_GO_FLAG, SMART_ACTION_ADD_IMMUNITY, SMART_ACTION_ADD_ITEM, SMART_ACTION_ADD_NPC_FLAG, SMART_ACTION_ADD_POWER, SMART_ACTION_ADD_THREAT, SMART_ACTION_ALLOW_COMBAT_MOVEMENT, SMART_ACTION_ATTACK_START, SMART_ACTION_ATTACK_STOP, SMART_ACTION_AUTO_ATTACK, SMART_ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS, SMART_ACTION_CALL_FOR_HELP, SMART_ACTION_CALL_GROUPEVENTHAPPENS, SMART_ACTION_CALL_KILLEDMONSTER, SMART_ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST, SMART_ACTION_CALL_RANDOM_TIMED_ACTIONLIST, SMART_ACTION_CALL_SCRIPT_RESET, SMART_ACTION_CALL_TIMED_ACTIONLIST, SMART_ACTION_CAST, SMART_ACTION_CLOSE_GOSSIP, SMART_ACTION_COMBAT_STOP, SMART_ACTION_CONE_SUMMON, SMART_ACTION_CREATE_TIMED_EVENT, SMART_ACTION_CROSS_CAST, SMART_ACTION_CU_ENCOUNTER_START, SMART_ACTION_CUSTOM_CAST, SMART_ACTION_DESPAWN_SPAWNGROUP, SMART_ACTION_DIE, SMART_ACTION_DISABLE_EVADE, SMART_ACTION_DISABLE_REWARD, SMART_ACTION_DISMOUNT, SMART_ACTION_DO_ACTION, SMART_ACTION_EQUIP, SMART_ACTION_ESCORT_PAUSE, SMART_ACTION_ESCORT_RESUME, SMART_ACTION_ESCORT_START, SMART_ACTION_ESCORT_STOP, SMART_ACTION_EVADE, SMART_ACTION_EXIT_VEHICLE, SMART_ACTION_FAIL_QUEST, SMART_ACTION_FALL, SMART_ACTION_FLEE, SMART_ACTION_FLEE_FOR_ASSIST, SMART_ACTION_FOLLOW, SMART_ACTION_FOLLOW_GROUP, SMART_ACTION_FORCE_DESPAWN, SMART_ACTION_GAME_EVENT_START, SMART_ACTION_GAME_EVENT_STOP, SMART_ACTION_GO_SET_GO_STATE, SMART_ACTION_GO_SET_LOOT_STATE, SMART_ACTION_INC_DATA, SMART_ACTION_INC_EVENT_PHASE, SMART_ACTION_INSTALL_AI_TEMPLATE, SMART_ACTION_INTERRUPT_SPELL, SMART_ACTION_INVOKER_CAST, SMART_ACTION_JUMP_TO_POS, SMART_ACTION_KILL_UNIT, SMART_ACTION_LOAD_EQUIPMENT, SMART_ACTION_LOAD_GRID, SMART_ACTION_MORPH_TO_ENTRY_OR_MODEL, SMART_ACTION_MOUNT_TO_ENTRY_OR_MODEL, SMART_ACTION_MOVE_FORWARD, SMART_ACTION_MOVE_TO_POS, SMART_ACTION_MOVE_TO_POS_TARGET, SMART_ACTION_MOVEMENT_PAUSE, SMART_ACTION_MOVEMENT_RESUME, SMART_ACTION_MOVEMENT_STOP, SMART_ACTION_MUSIC, SMART_ACTION_NO_ENVIRONMENT_UPDATE, SMART_ACTION_OFFER_QUEST, SMART_ACTION_OVERRIDE_SCRIPT_BASE_OBJECT, SMART_ACTION_PLAY_ANIMKIT, SMART_ACTION_PLAY_CINEMATIC, SMART_ACTION_PLAY_EMOTE, SMART_ACTION_PLAY_SPELL_VISUAL, SMART_ACTION_PLAYER_TALK, SMART_ACTION_PLAYMOVIE, SMART_ACTION_RANDOM_EMOTE, SMART_ACTION_RANDOM_MOVE, SMART_ACTION_RANDOM_MUSIC, SMART_ACTION_RANDOM_PHASE, SMART_ACTION_RANDOM_PHASE_RANGE, SMART_ACTION_RANDOM_SOUND, SMART_ACTION_REMOVE_ALL_GAMEOBJECTS, SMART_ACTION_REMOVE_AURAS_BY_TYPE, SMART_ACTION_REMOVE_DYNAMIC_FLAG, SMART_ACTION_REMOVE_GO_FLAG, SMART_ACTION_REMOVE_IMMUNITY, SMART_ACTION_REMOVE_ITEM, SMART_ACTION_REMOVE_MOVEMENT, SMART_ACTION_REMOVE_NPC_FLAG, SMART_ACTION_REMOVE_POWER, SMART_ACTION_REMOVE_TIMED_EVENT, SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1, SMART_ACTION_REMOVE_UNIT_FLAG, SMART_ACTION_REMOVEAURASFROMSPELL, SMART_ACTION_RESERVED_16, SMART_ACTION_RESET_GOBJECT, SMART_ACTION_RESET_SCRIPT_BASE_OBJECT, SMART_ACTION_RESPAWN_BY_SPAWNID, SMART_ACTION_RESPAWN_TARGET, SMART_ACTION_RISE_UP, SMART_ACTION_SCENE_CANCEL, SMART_ACTION_SCENE_PLAY, SMART_ACTION_SCRIPTED_SPAWN, SMART_ACTION_SEND_GO_CUSTOM_ANIM, SMART_ACTION_SEND_GOSSIP_MENU, SMART_ACTION_SEND_TARGET_TO_TARGET, SMART_ACTION_SET_ACTIVE, SMART_ACTION_SET_ANIM_TIER, SMART_ACTION_SET_CAN_FLY, SMART_ACTION_SET_COMBAT_DISTANCE, SMART_ACTION_SET_CORPSE_DELAY, SMART_ACTION_SET_COUNTER, SMART_ACTION_SET_DATA, SMART_ACTION_SET_DYNAMIC_FLAG, SMART_ACTION_SET_EMOTE_STATE, SMART_ACTION_SET_EVENT_FLAG_RESET, SMART_ACTION_SET_EVENT_PHASE, SMART_ACTION_SET_FACTION, SMART_ACTION_SET_FLY, SMART_ACTION_SET_GO_FLAG, SMART_ACTION_SET_GOSSIP_MENU, SMART_ACTION_SET_GUID, SMART_ACTION_SET_HEALTH_PCT, SMART_ACTION_SET_HEALTH_REGEN, SMART_ACTION_SET_HOME_POS, SMART_ACTION_SET_HOVER, SMART_ACTION_SET_IN_COMBAT_WITH_ZONE, SMART_ACTION_SET_INGAME_PHASE_MASK, SMART_ACTION_SET_INST_DATA, SMART_ACTION_SET_INST_DATA64, SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL, SMART_ACTION_SET_MOVEMENT_SPEED, SMART_ACTION_SET_NPC_FLAG, SMART_ACTION_SET_ORIENTATION, SMART_ACTION_SET_ORIENTATION_TARGET, SMART_ACTION_SET_POWER, SMART_ACTION_SET_RANGED_MOVEMENT, SMART_ACTION_SET_REACT_STATE, SMART_ACTION_SET_ROOT, SMART_ACTION_SET_RUN, SMART_ACTION_SET_SCALE, SMART_ACTION_SET_SHEATH, SMART_ACTION_SET_SIGHT_DIST, SMART_ACTION_SET_SWIM, SMART_ACTION_SET_UNIT_FIELD_BYTES_1, SMART_ACTION_SET_UNIT_FLAG, SMART_ACTION_SET_UNIT_MOVEMENT_FLAGS, SMART_ACTION_SET_VISIBILITY, SMART_ACTION_SIMPLE_TALK, SMART_ACTION_SOUND, SMART_ACTION_SPAWN_SPAWNGROUP, SMART_ACTION_START_CLOSEST_WAYPOINT, SMART_ACTION_STOP_MOTION, SMART_ACTION_STORE_TARGET_LIST, SMART_ACTION_SUMMON_CREATURE, SMART_ACTION_SUMMON_CREATURE_GROUP, SMART_ACTION_SUMMON_GAMEOBJECT_GROUP, SMART_ACTION_SUMMON_GO, SMART_ACTION_SUMMON_RADIAL, SMART_ACTION_TALK, SMART_ACTION_TC_END, SMART_ACTION_TELEPORT, SMART_ACTION_THREAT_ALL_PCT, SMART_ACTION_THREAT_SINGLE_PCT, SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT, SMART_ACTION_TRIGGER_TIMED_EVENT, SMART_ACTION_UPDATE_TEMPLATE, SMART_ACTION_VORTEX_SUMMON, SMART_ACTION_WAYPOINT_DATA_RANDOM, SMART_ACTION_WAYPOINT_START, SMART_ACTION_WORLD_SCRIPT, SMART_ACTION_ZONE_UNDER_ATTACK, SMART_EVENT_AC_END, SMART_EVENT_AC_START, SMART_EVENT_ACCEPTED_QUEST, SMART_EVENT_ACTION_DONE, SMART_EVENT_AGGRO, SMART_EVENT_AI_INIT, SMART_EVENT_AREA_CASTING, SMART_EVENT_AREA_RANGE, SMART_EVENT_AREATRIGGER_ONTRIGGER, SMART_EVENT_CHARMED, SMART_EVENT_CHARMED_TARGET, SMART_EVENT_CORPSE_REMOVED, SMART_EVENT_COUNTER_SET, SMART_EVENT_DAMAGED, SMART_EVENT_DAMAGED_TARGET, SMART_EVENT_DATA_SET, SMART_EVENT_DEATH, SMART_EVENT_DISTANCE_CREATURE, SMART_EVENT_DISTANCE_GAMEOBJECT, SMART_EVENT_ESCORT_ENDED, SMART_EVENT_ESCORT_PAUSED, SMART_EVENT_ESCORT_REACHED, SMART_EVENT_ESCORT_RESUMED, SMART_EVENT_ESCORT_START, SMART_EVENT_ESCORT_STOPPED, SMART_EVENT_EVADE, SMART_EVENT_EVENT_PHASE_CHANGE, SMART_EVENT_FLAGS_ALL, SMART_EVENT_FOLLOW_COMPLETED, SMART_EVENT_FRIENDLY_HEALTH, SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_EVENT_FRIENDLY_IS_CC, SMART_EVENT_FRIENDLY_MISSING_BUFF, SMART_EVENT_GAME_EVENT_END, SMART_EVENT_GAME_EVENT_START, SMART_EVENT_GO_EVENT_INFORM, SMART_EVENT_GO_STATE_CHANGED, SMART_EVENT_GOSSIP_HELLO, SMART_EVENT_GOSSIP_SELECT, SMART_EVENT_HAS_AURA, SMART_EVENT_HEALTH_PCT, SMART_EVENT_IC_LOS, SMART_EVENT_INSTANCE_PLAYER_ENTER, SMART_EVENT_IS_BEHIND_TARGET, SMART_EVENT_IS_IN_MELEE_RANGE, SMART_EVENT_JUST_CREATED, SMART_EVENT_JUST_SUMMONED, SMART_EVENT_KILL, SMART_EVENT_LINK, SMART_EVENT_MANA_PCT, SMART_EVENT_MOVEMENTINFORM, SMART_EVENT_NEAR_PLAYERS, SMART_EVENT_NEAR_PLAYERS_NEGATION, SMART_EVENT_NEAR_UNIT, SMART_EVENT_NEAR_UNIT_NEGATION, SMART_EVENT_ON_SPELLCLICK, SMART_EVENT_OOC_LOS, SMART_EVENT_PASSENGER_BOARDED, SMART_EVENT_PASSENGER_REMOVED, SMART_EVENT_PHASE_ALL, SMART_EVENT_PHASE_MAX, SMART_EVENT_QUEST_ACCEPTED, SMART_EVENT_QUEST_COMPLETION, SMART_EVENT_QUEST_FAIL, SMART_EVENT_QUEST_OBJ_COMPLETION, SMART_EVENT_QUEST_REWARDED, SMART_EVENT_RANGE, SMART_EVENT_REACHED_HOME, SMART_EVENT_RECEIVE_EMOTE, SMART_EVENT_RECEIVE_HEAL, SMART_EVENT_RESET, SMART_EVENT_RESPAWN, SMART_EVENT_REWARD_QUEST, SMART_EVENT_SPELLHIT, SMART_EVENT_SPELLHIT_TARGET, SMART_EVENT_SUMMON_DESPAWNED, SMART_EVENT_SUMMONED_UNIT, SMART_EVENT_SUMMONED_UNIT_DIES, SMART_EVENT_SUMMONED_UNIT_EVADE, SMART_EVENT_TARGET_BUFFED, SMART_EVENT_TARGET_HEALTH_PCT, SMART_EVENT_TARGET_MANA_PCT, SMART_EVENT_TC_END, SMART_EVENT_TEXT_OVER, SMART_EVENT_TIMED_EVENT_TRIGGERED, SMART_EVENT_TRANSPORT_ADDCREATURE, SMART_EVENT_TRANSPORT_ADDPLAYER, SMART_EVENT_TRANSPORT_RELOCATE, SMART_EVENT_TRANSPORT_REMOVE_PLAYER, SMART_EVENT_UPDATE, SMART_EVENT_UPDATE_IC, SMART_EVENT_UPDATE_OOC, SMART_EVENT_VICTIM_CASTING, SMART_EVENT_WAYPOINT_ENDED, SMART_EVENT_WAYPOINT_REACHED, SMART_SCRIPT_RESPAWN_CONDITION_AREA, SMART_SCRIPT_RESPAWN_CONDITION_MAP, SMART_SCRIPT_TYPE_CREATURE, SMART_SCRIPT_TYPE_GAMEOBJECT, SMART_SCRIPT_TYPE_TIMED_ACTIONLIST, SMART_TARGET_AC_END, SMART_TARGET_AC_START, SMART_TARGET_ACTION_INVOKER, SMART_TARGET_CLOSEST_CREATURE, SMART_TARGET_CLOSEST_PLAYER, SMART_TARGET_CREATURE_DISTANCE, SMART_TARGET_CREATURE_GUID, SMART_TARGET_CREATURE_RANGE, SMART_TARGET_LOOT_RECIPIENTS, SMART_TARGET_PLAYER_DISTANCE, SMART_TARGET_PLAYER_RANGE, SMART_TARGET_SELF, SMART_TARGET_TC_END, SMARTAI_TEMPLATE_END, SmartAIEventMask, SmartAITypeMask, sObjectMgr, SmartAction::sound, SmartAction::sound1, SmartAction::sound2, SmartAction::sound3, SmartAction::sound4, SmartAction::speedFraction, SmartAction::speedInteger, SmartEvent::spell, SmartAction::spell, SmartEvent::spellHit, SmartEvent::spellId, sSmartWaypointMgr, sSpellMgr, SmartAction::startClosestWaypoint, SmartAction::state, sTaxiPathStore, SmartAction::summonCreature, SmartEvent::summoned, SmartAction::summonGO, SmartAction::swim, SmartAction::talk, SmartScriptHolder::target, SmartEvent::targetCasting, SmartAction::taxi, SmartAction::teleport, TEMPSUMMON_MANUAL_DESPAWN, TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, SmartAction::textGroupID, SmartAction::timedActionList, SmartAction::timeEvent, TO_BE_DECIDED, SmartEvent::transportAddCreature, SmartEvent::type, SmartAction::type, SmartTarget::type, SmartAction::updateLevel, SmartAction::updateTemplate, SmartAction::useTalkTarget, SmartEvent::value, SmartAction::visibility, SmartAction::withDelayed, SmartAction::withEmote, SmartAction::withInstant, SmartAction::wpStart, SmartAction::wpStop, SmartTarget::x, and SmartTarget::y.

Referenced by LoadSmartAIFromDB().

◆ IsGameObjectValid()

bool SmartAIMgr::IsGameObjectValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2194 {
2195 if (!sObjectMgr->GetGameObjectTemplate(entry))
2196 {
2197 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent GameObject entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2198 return false;
2199 }
2200 return true;
2201 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sObjectMgr.

Referenced by IsEventValid(), and IsTargetValid().

◆ IsItemValid()

bool SmartAIMgr::IsItemValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2214 {
2215 if (!sItemStore.LookupEntry(entry))
2216 {
2217 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Item entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2218 return false;
2219 }
2220 return true;
2221 }
DBCStorage< ItemEntry > sItemStore(Itemfmt)

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sItemStore.

Referenced by IsEventValid().

◆ IsMinMaxValid()

bool SmartAIMgr::IsMinMaxValid ( SmartScriptHolder const &  e,
uint32  min,
uint32  max 
)
inlineprivate
2144 {
2145 if (max < min)
2146 {
2147 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses min/max params wrong ({}/{}), skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), min, max);
2148 return false;
2149 }
2150 return true;
2151 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), and LOG_ERROR.

Referenced by IsEventValid().

◆ IsQuestValid()

bool SmartAIMgr::IsQuestValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2184 {
2185 if (!sObjectMgr->GetQuestTemplate(entry))
2186 {
2187 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Quest entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2188 return false;
2189 }
2190 return true;
2191 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sObjectMgr.

Referenced by IsEventValid().

◆ IsSAIBoolValid()

bool SmartAIMgr::IsSAIBoolValid ( SmartScriptHolder const &  e,
SAIBool  value 
)
staticprivate
31{
32 if (value != 0 && value != 1)
33 {
34 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses param {} of type Boolean with value {}, valid values are 0 or 1, skipped.",
35 e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), STRINGIZE(value), value);
36 return false;
37 }
38 return true;
39}
#define STRINGIZE(a)
Definition Common.h:41

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and STRINGIZE.

Referenced by IsEventValid(), and IsTargetValid().

◆ IsSoundValid()

bool SmartAIMgr::IsSoundValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2254 {
2255 if (!sSoundEntriesStore.LookupEntry(entry))
2256 {
2257 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Sound entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2258 return false;
2259 }
2260 return true;
2261 }
DBCStorage< SoundEntriesEntry > sSoundEntriesStore(SoundEntriesfmt)

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sSoundEntriesStore.

Referenced by IsEventValid().

◆ IsSpellValid()

bool SmartAIMgr::IsSpellValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2204 {
2205 if (!sSpellMgr->GetSpellInfo(entry))
2206 {
2207 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Spell entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2208 return false;
2209 }
2210 return true;
2211 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sSpellMgr.

Referenced by IsEventValid().

◆ IsTargetValid()

bool SmartAIMgr::IsTargetValid ( SmartScriptHolder const &  e)
private
454{
455 if (e.GetActionType() == SMART_ACTION_INSTALL_AI_TEMPLATE)
456 return true; // AI template has special handling
457 switch (e.GetTargetType())
458 {
461 {
462 if (e.target.unitDistance.creature && !sObjectMgr->GetCreatureTemplate(e.target.unitDistance.creature))
463 {
464 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Creature entry {} as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.target.unitDistance.creature);
465 return false;
466 }
467 break;
468 }
471 {
472 if (e.target.goDistance.entry && !sObjectMgr->GetGameObjectTemplate(e.target.goDistance.entry))
473 {
474 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent GameObject entry {} as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.target.goDistance.entry);
475 return false;
476 }
477 break;
478 }
480 {
481 if (e.target.unitGUID.entry && !IsCreatureValid(e, e.target.unitGUID.entry))
482 return false;
483 break;
484 }
486 {
487 if (e.target.goGUID.entry && !IsGameObjectValid(e, e.target.goGUID.entry))
488 return false;
489 break;
490 }
493 {
494 if (e.target.playerDistance.dist == 0)
495 {
496 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has maxDist 0 as target_param1, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
497 return false;
498 }
499 break;
500 }
504 if (e.GetScriptType() != SMART_SCRIPT_TYPE_TIMED_ACTIONLIST && e.GetEventType() != SMART_EVENT_LINK && !EventHasInvoker(e.event.type))
505 {
506 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invoker target, but event does not provide any invoker!", e.entryOrGuid, e.GetScriptType(), e.GetEventType(), e.GetActionType());
507 return false;
508 }
509 break;
511 {
512 if (e.target.summonedCreatures.entry && !IsCreatureValid(e, e.target.summonedCreatures.entry))
513 {
514 return false;
515 }
516 break;
517 }
519 {
520 if (e.target.instanceStorage.type != 1 && e.target.instanceStorage.type != 2)
521 {
522 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid instance storage type as target ({}).",
523 e.entryOrGuid, e.GetScriptType(), e.GetEventType(), e.GetActionType(), e.target.instanceStorage.type);
524 return false;
525 }
526 break;
527 }
529 {
530 if (e.target.formation.type > 2)
531 {
532 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid formation target type ({}, must be 0-2).",
533 e.entryOrGuid, e.GetScriptType(), e.GetEventType(), e.GetActionType(), e.target.formation.type);
534 return false;
535 }
536 if (e.target.formation.entry && !IsCreatureValid(e, e.target.formation.entry))
537 return false;
538 return IsSAIBoolValid(e, e.target.formation.excludeSelf);
539 }
544 return IsSAIBoolValid(e, e.target.hostileRandom.playerOnly);
546 return IsSAIBoolValid(e, e.target.farthest.playerOnly) &&
547 IsSAIBoolValid(e, e.target.farthest.isInLos);
548 break;
550 return IsSAIBoolValid(e, e.target.unitClosest.dead);
551 break;
553 return IsSAIBoolValid(e, e.target.closestAttackable.playerOnly);
554 break;
556 return IsSAIBoolValid(e, e.target.closestFriendly.playerOnly);
557 break;
559 return IsSAIBoolValid(e, e.target.owner.useCharmerOrOwner);
560 break;
576 break;
577 default:
578 LOG_ERROR("sql.sql", "SmartAIMgr: Not handled target_type({}), Entry {} SourceType {} Event {} Action {}, skipped.", e.GetTargetType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
579 return false;
580 }
581
583 {
584 return false;
585 }
586
587 return true;
588}
@ SMART_TARGET_ROLE_SELECTION
Definition SmartScriptMgr.h:1589
static bool CheckUnusedTargetParams(SmartScriptHolder const &e)
Definition SmartScriptMgr.cpp:923

References CheckUnusedTargetParams(), SmartTarget::closestAttackable, SmartTarget::closestFriendly, SmartTarget::creature, SmartTarget::dead, SmartTarget::dist, SmartTarget::entry, SmartScriptHolder::entryOrGuid, SmartScriptHolder::event, SmartScriptHolder::event_id, EventHasInvoker(), SmartTarget::excludeSelf, SmartTarget::farthest, SmartTarget::formation, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetEventType(), SmartScriptHolder::GetScriptType(), SmartScriptHolder::GetTargetType(), SmartTarget::goDistance, SmartTarget::goGUID, SmartTarget::hostileRandom, SmartTarget::instanceStorage, IsCreatureValid(), IsGameObjectValid(), SmartTarget::isInLos, IsSAIBoolValid(), LOG_ERROR, SmartTarget::owner, SmartTarget::playerDistance, SmartTarget::playerOnly, SMART_ACTION_INSTALL_AI_TEMPLATE, SMART_EVENT_LINK, SMART_EVENT_SUMMONED_UNIT_DIES, SMART_EVENT_SUMMONED_UNIT_EVADE, SMART_SCRIPT_TYPE_TIMED_ACTIONLIST, SMART_TARGET_ACTION_INVOKER, SMART_TARGET_ACTION_INVOKER_VEHICLE, SMART_TARGET_CLOSEST_CREATURE, SMART_TARGET_CLOSEST_ENEMY, SMART_TARGET_CLOSEST_FRIENDLY, SMART_TARGET_CLOSEST_GAMEOBJECT, SMART_TARGET_CLOSEST_PLAYER, SMART_TARGET_CREATURE_DISTANCE, SMART_TARGET_CREATURE_GUID, SMART_TARGET_CREATURE_RANGE, SMART_TARGET_FARTHEST, SMART_TARGET_FORMATION, SMART_TARGET_GAMEOBJECT_DISTANCE, SMART_TARGET_GAMEOBJECT_GUID, SMART_TARGET_GAMEOBJECT_RANGE, SMART_TARGET_HOSTILE_LAST_AGGRO, SMART_TARGET_HOSTILE_RANDOM, SMART_TARGET_HOSTILE_RANDOM_NOT_TOP, SMART_TARGET_HOSTILE_SECOND_AGGRO, SMART_TARGET_INSTANCE_STORAGE, SMART_TARGET_INVOKER_PARTY, SMART_TARGET_LOOT_RECIPIENTS, SMART_TARGET_NONE, SMART_TARGET_OWNER_OR_SUMMONER, SMART_TARGET_PLAYER_DISTANCE, SMART_TARGET_PLAYER_RANGE, SMART_TARGET_PLAYER_WITH_AURA, SMART_TARGET_POSITION, SMART_TARGET_RANDOM_POINT, SMART_TARGET_ROLE_SELECTION, SMART_TARGET_SELF, SMART_TARGET_STORED, SMART_TARGET_SUMMONED_CREATURES, SMART_TARGET_THREAT_LIST, SMART_TARGET_VEHICLE_PASSENGER, SMART_TARGET_VICTIM, sObjectMgr, SmartTarget::summonedCreatures, SmartScriptHolder::target, SmartEvent::type, SmartTarget::type, SmartTarget::unitClosest, SmartTarget::unitDistance, SmartTarget::unitGUID, and SmartTarget::useCharmerOrOwner.

Referenced by LoadSmartAIFromDB().

◆ IsTextEmoteValid()

bool SmartAIMgr::IsTextEmoteValid ( SmartScriptHolder const &  e,
uint32  entry 
)
inlineprivate
2224 {
2225 if (!sEmotesTextStore.LookupEntry(entry))
2226 {
2227 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} uses non-existent Text Emote entry {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), entry);
2228 return false;
2229 }
2230 return true;
2231 }
DBCStorage< EmotesTextEntry > sEmotesTextStore(EmotesTextEntryfmt)

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), LOG_ERROR, and sEmotesTextStore.

Referenced by IsEventValid().

◆ IsTextValid()

bool SmartAIMgr::IsTextValid ( SmartScriptHolder const &  e,
uint32  id 
)
staticprivate
2098{
2099 if (e.GetScriptType() != SMART_SCRIPT_TYPE_CREATURE)
2100 return true;
2101
2102 uint32 entry = 0;
2103
2104 if (e.GetEventType() == SMART_EVENT_TEXT_OVER)
2105 {
2106 entry = e.event.textOver.creatureEntry;
2107 }
2108 else
2109 {
2110 switch (e.GetTargetType())
2111 {
2115 return true; // ignore
2116 default:
2117 if (e.entryOrGuid < 0)
2118 {
2119 ObjectGuid::LowType guid = ObjectGuid::LowType(-e.entryOrGuid);
2120 CreatureData const* data = sObjectMgr->GetCreatureData(guid);
2121 if (!data)
2122 {
2123 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} using non-existent Creature guid {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), guid);
2124 return false;
2125 }
2126 else
2127 entry = data->id;
2128 }
2129 else
2130 entry = uint32(e.entryOrGuid);
2131 break;
2132 }
2133 }
2134
2135 if (!entry || !sCreatureTextMgr->TextExist(entry, uint8(id)))
2136 {
2137 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} using non-existent Text id {}, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), id);
2138 return false;
2139 }
2140
2141 return true;
2142}
#define sCreatureTextMgr
Definition CreatureTextMgr.h:110
std::uint8_t uint8
Definition Define.h:109
uint32 LowType
Definition ObjectGuid.h:122
Definition CreatureData.h:370
uint32 id
Definition CreatureData.h:372

References SmartEvent::creatureEntry, SmartScriptHolder::entryOrGuid, SmartScriptHolder::event, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetEventType(), SmartScriptHolder::GetScriptType(), SmartScriptHolder::GetTargetType(), CreatureData::id, LOG_ERROR, sCreatureTextMgr, SMART_EVENT_TEXT_OVER, SMART_SCRIPT_TYPE_CREATURE, SMART_TARGET_CLOSEST_CREATURE, SMART_TARGET_CREATURE_DISTANCE, SMART_TARGET_CREATURE_RANGE, sObjectMgr, and SmartEvent::textOver.

Referenced by IsEventValid().

◆ LoadSmartAIFromDB()

void SmartAIMgr::LoadSmartAIFromDB ( )
118{
119 uint32 oldMSTime = getMSTime();
120
121 for (uint8 i = 0; i < SMART_SCRIPT_TYPE_MAX; i++)
122 mEventMap[i].clear(); //Drop Existing SmartAI List
123
125 PreparedQueryResult result = WorldDatabase.Query(stmt);
126
127 if (!result)
128 {
129 LOG_WARN("server.loading", ">> Loaded 0 SmartAI scripts. DB table `smart_scripts` is empty.");
130 LOG_INFO("server.loading", " ");
131 return;
132 }
133
134 uint32 count = 0;
135
136 do
137 {
138 Field* fields = result->Fetch();
139
141
142 temp.entryOrGuid = fields[0].Get<int32>();
143 if (!temp.entryOrGuid)
144 {
145 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: invalid entryorguid (0), skipped loading.");
146 continue;
147 }
148
149 SmartScriptType source_type = (SmartScriptType)fields[1].Get<uint8>();
150 if (source_type >= SMART_SCRIPT_TYPE_MAX)
151 {
152 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: invalid source_type ({}), skipped loading.", uint32(source_type));
153 continue;
154 }
155 if (temp.entryOrGuid >= 0)
156 {
157 switch (source_type)
158 {
160 {
161 if (!sObjectMgr->GetCreatureTemplate((uint32)temp.entryOrGuid))
162 {
163 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: Creature entry ({}) does not exist, skipped loading.", uint32(temp.entryOrGuid));
164 continue;
165 }
166 break;
167 }
169 {
170 if (!sObjectMgr->GetGameObjectTemplate((uint32)temp.entryOrGuid))
171 {
172 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: GameObject entry ({}) does not exist, skipped loading.", uint32(temp.entryOrGuid));
173 continue;
174 }
175 break;
176 }
178 {
179 if (!sObjectMgr->GetAreaTrigger((uint32)temp.entryOrGuid))
180 {
181 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: AreaTrigger entry ({}) does not exist, skipped loading.", uint32(temp.entryOrGuid));
182 continue;
183 }
184 break;
185 }
187 break;//nothing to check, really
188 default:
189 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: not yet implemented source_type {}", (uint32)source_type);
190 continue;
191 }
192 }
193 else
194 {
195 switch (source_type)
196 {
198 {
199 if (!sObjectMgr->GetCreatureData(uint32(std::abs(temp.entryOrGuid))))
200 {
201 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: Creature guid ({}) does not exist, skipped loading.", uint32(std::abs(temp.entryOrGuid)));
202 continue;
203 }
204 break;
205 }
207 {
208 if (!sObjectMgr->GetGameObjectData(uint32(std::abs(temp.entryOrGuid))))
209 {
210 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: GameObject guid ({}) does not exist, skipped loading.", uint32(temp.entryOrGuid));
211 continue;
212 }
213 break;
214 }
215 default:
216 LOG_ERROR("sql.sql", "SmartAIMgr::LoadSmartAIFromDB: not yet implemented source_type {}", (uint32)source_type);
217 continue;
218 }
219 }
220
221 temp.source_type = source_type;
222 temp.event_id = fields[2].Get<uint16>();
223 temp.link = fields[3].Get<uint16>();
224 temp.event.type = (SMART_EVENT)fields[4].Get<uint8>();
225 temp.event.event_phase_mask = fields[5].Get<uint16>();
226 temp.event.event_chance = fields[6].Get<uint8>();
227 temp.event.event_flags = fields[7].Get<uint16>();
228
229 temp.event.raw.param1 = fields[8].Get<uint32>();
230 temp.event.raw.param2 = fields[9].Get<uint32>();
231 temp.event.raw.param3 = fields[10].Get<uint32>();
232 temp.event.raw.param4 = fields[11].Get<uint32>();
233 temp.event.raw.param5 = fields[12].Get<uint32>();
234 temp.event.raw.param6 = fields[13].Get<uint32>();
235
236 temp.action.type = (SMART_ACTION)fields[14].Get<uint8>();
237 temp.action.raw.param1 = fields[15].Get<uint32>();
238 temp.action.raw.param2 = fields[16].Get<uint32>();
239 temp.action.raw.param3 = fields[17].Get<uint32>();
240 temp.action.raw.param4 = fields[18].Get<uint32>();
241 temp.action.raw.param5 = fields[19].Get<uint32>();
242 temp.action.raw.param6 = fields[20].Get<uint32>();
243
244 temp.target.type = (SMARTAI_TARGETS)fields[21].Get<uint8>();
245 temp.target.raw.param1 = fields[22].Get<uint32>();
246 temp.target.raw.param2 = fields[23].Get<uint32>();
247 temp.target.raw.param3 = fields[24].Get<uint32>();
248 temp.target.raw.param4 = fields[25].Get<uint32>();
249 temp.target.x = fields[26].Get<float>();
250 temp.target.y = fields[27].Get<float>();
251 temp.target.z = fields[28].Get<float>();
252 temp.target.o = fields[29].Get<float>();
253
254 //check target
255 if (!IsTargetValid(temp))
256 continue;
257
258 // check all event and action params
259 if (!IsEventValid(temp))
260 continue;
261
262 // xinef: specific check for timed events, fix db makers
263 switch (temp.event.type)
264 {
282 if (temp.event.minMaxRepeat.repeatMin == 0 && temp.event.minMaxRepeat.repeatMax == 0)
284 break;
286 // health check mode stays below the threshold on every following hit, so force one-shot;
287 // normal mode keeps repeatMin/repeatMax as a cooldown (0 = fire on every hit), so leave it repeatable.
288 if (temp.event.minMaxRepeat.rangeMin)
290 break;
293 if (temp.event.friendlyCC.repeatMin == 0 && temp.event.friendlyCC.repeatMax == 0)
295 break;
296 default:
297 break;
298 }
299
301 if (temp.target.type == SMART_TARGET_SELF && (std::fabs(temp.target.x) > 200.0f || std::fabs(temp.target.y) > 200.0f || std::fabs(temp.target.z) > 200.0f))
303
304 // creature entry / guid not found in storage, create empty event list for it and increase counters
305 if (mEventMap[source_type].find(temp.entryOrGuid) == mEventMap[source_type].end())
306 {
307 ++count;
308 SmartAIEventList eventList;
309 mEventMap[source_type][temp.entryOrGuid] = eventList;
310 }
311 // store the new event
312 mEventMap[source_type][temp.entryOrGuid].push_back(temp);
313 } while (result->NextRow());
314
316
317 LOG_INFO("server.loading", ">> Loaded {} SmartAI scripts in {} ms", count, GetMSTimeDiffToNow(oldMSTime));
318 LOG_INFO("server.loading", " ");
319}
std::shared_ptr< PreparedResultSet > PreparedQueryResult
Definition DatabaseEnvFwd.h:45
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
std::int32_t int32
Definition Define.h:103
std::uint16_t uint16
Definition Define.h:108
#define LOG_INFO(filterType__,...)
Definition Log.h:153
SmartScriptType
Definition SmartScriptMgr.h:1793
@ SMART_SCRIPT_TYPE_MAX
Definition SmartScriptMgr.h:1804
@ SMART_EVENT_FLAG_NOT_REPEATABLE
Definition SmartScriptMgr.h:1952
SMARTAI_TARGETS
Definition SmartScriptMgr.h:1549
SMART_ACTION
Definition SmartScriptMgr.h:541
SMART_EVENT
Definition SmartScriptMgr.h:98
uint32 GetMSTimeDiffToNow(uint32 oldMSTime)
Definition Timer.h:131
uint32 getMSTime()
Definition Timer.h:103
@ WORLD_SEL_SMART_SCRIPTS
Definition WorldDatabase.h:35
Class used to access individual fields of database query result.
Definition Field.h:98
std::enable_if_t< std::is_arithmetic_v< T >, T > Get() const
Definition Field.h:112
Definition PreparedStatement.h:157
bool IsTargetValid(SmartScriptHolder const &e)
Definition SmartScriptMgr.cpp:453
bool IsEventValid(SmartScriptHolder &e)
Definition SmartScriptMgr.cpp:991
void CheckIfSmartAIInDatabaseExists()
Definition SmartScriptMgr.cpp:321
uint32 param3
Definition SmartScriptMgr.h:1063
uint32 param5
Definition SmartScriptMgr.h:1065
uint32 param1
Definition SmartScriptMgr.h:1061
uint32 param4
Definition SmartScriptMgr.h:1064
uint32 param6
Definition SmartScriptMgr.h:1504
uint32 param2
Definition SmartScriptMgr.h:1062
uint32 param1
Definition SmartScriptMgr.h:514
uint32 param2
Definition SmartScriptMgr.h:515
uint32 param4
Definition SmartScriptMgr.h:517
uint32 param3
Definition SmartScriptMgr.h:516
uint32 param6
Definition SmartScriptMgr.h:519
uint32 event_chance
Definition SmartScriptMgr.h:208
uint32 param5
Definition SmartScriptMgr.h:518
Definition SmartScriptMgr.h:1997
SmartScriptType source_type
Definition SmartScriptMgr.h:2003
uint32 param4
Definition SmartScriptMgr.h:1762
float o
Definition SmartScriptMgr.h:1612
uint32 param1
Definition SmartScriptMgr.h:1759
uint32 param3
Definition SmartScriptMgr.h:1761
float z
Definition SmartScriptMgr.h:1612
uint32 param2
Definition SmartScriptMgr.h:1760

References SmartScriptHolder::action, CheckIfSmartAIInDatabaseExists(), SmartScriptHolder::entryOrGuid, SmartScriptHolder::event, SmartEvent::event_chance, SmartEvent::event_flags, SmartScriptHolder::event_id, SmartEvent::event_phase_mask, SmartEvent::friendlyCC, Field::Get(), getMSTime(), GetMSTimeDiffToNow(), IsEventValid(), IsTargetValid(), SmartScriptHolder::link, LOG_ERROR, LOG_INFO, LOG_WARN, mEventMap, SmartEvent::minMaxRepeat, SmartTarget::o, SmartEvent::param1, SmartAction::param1, SmartTarget::param1, SmartEvent::param2, SmartAction::param2, SmartTarget::param2, SmartEvent::param3, SmartAction::param3, SmartTarget::param3, SmartEvent::param4, SmartAction::param4, SmartTarget::param4, SmartEvent::param5, SmartAction::param5, SmartEvent::param6, SmartAction::param6, SmartEvent::rangeMin, SmartEvent::raw, SmartAction::raw, SmartTarget::raw, SmartEvent::repeatMax, SmartEvent::repeatMin, SMART_ACTION_MOVE_TO_POS, SMART_EVENT_AREA_CASTING, SMART_EVENT_AREA_RANGE, SMART_EVENT_DAMAGED, SMART_EVENT_FLAG_NOT_REPEATABLE, SMART_EVENT_FRIENDLY_HEALTH, SMART_EVENT_FRIENDLY_HEALTH_PCT, SMART_EVENT_FRIENDLY_IS_CC, SMART_EVENT_FRIENDLY_MISSING_BUFF, SMART_EVENT_HAS_AURA, SMART_EVENT_HEALTH_PCT, SMART_EVENT_IS_BEHIND_TARGET, SMART_EVENT_IS_IN_MELEE_RANGE, SMART_EVENT_MANA_PCT, SMART_EVENT_RANGE, SMART_EVENT_TARGET_BUFFED, SMART_EVENT_TARGET_HEALTH_PCT, SMART_EVENT_TARGET_MANA_PCT, SMART_EVENT_UPDATE, SMART_EVENT_UPDATE_IC, SMART_EVENT_UPDATE_OOC, SMART_EVENT_VICTIM_CASTING, SMART_SCRIPT_TYPE_AREATRIGGER, SMART_SCRIPT_TYPE_CREATURE, SMART_SCRIPT_TYPE_GAMEOBJECT, SMART_SCRIPT_TYPE_MAX, SMART_SCRIPT_TYPE_TIMED_ACTIONLIST, SMART_TARGET_POSITION, SMART_TARGET_SELF, sObjectMgr, SmartScriptHolder::source_type, SmartScriptHolder::target, SmartEvent::type, SmartAction::type, SmartTarget::type, WORLD_SEL_SMART_SCRIPTS, WorldDatabase, SmartTarget::x, SmartTarget::y, and SmartTarget::z.

◆ NotNULL()

bool SmartAIMgr::NotNULL ( SmartScriptHolder const &  e,
uint32  data 
)
inlineprivate
2164 {
2165 if (!data)
2166 {
2167 LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} Parameter can not be nullptr, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
2168 return false;
2169 }
2170 return true;
2171 }

References SmartScriptHolder::entryOrGuid, SmartScriptHolder::event_id, SmartScriptHolder::GetActionType(), SmartScriptHolder::GetScriptType(), and LOG_ERROR.

Referenced by IsEventValid().

Member Data Documentation

◆ mEventMap


The documentation for this class was generated from the following files: