From bd7e50fc9b79227d59ef6a05adf99b14c2791020 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Mon, 25 May 2026 13:31:00 +0100 Subject: [PATCH 1/3] Added missing SAI from aowow --- .../components/SmartAI/SmartAction.class.php | 84 ++++++++++++++++++- .../components/SmartAI/SmartEvent.class.php | 24 +++++- .../components/SmartAI/SmartTarget.class.php | 16 +++- localization/locale_enus.php | 63 +++++++++++++- 4 files changed, 182 insertions(+), 5 deletions(-) diff --git a/includes/components/SmartAI/SmartAction.class.php b/includes/components/SmartAI/SmartAction.class.php index 0e2d0711..757b81b9 100644 --- a/includes/components/SmartAI/SmartAction.class.php +++ b/includes/components/SmartAI/SmartAction.class.php @@ -162,6 +162,47 @@ class SmartAction public const ACTION_TRIGGER_GAME_EVENT = 150; // [RESERVED] public const ACTION_DO_ACTION = 151; // [RESERVED] + public const ACTION_MOVE_TO_POS_TARGET = 201; // pointId + public const ACTION_EXIT_VEHICLE = 203; // none + public const ACTION_SET_UNIT_MOVEMENT_FLAGS = 204; // flags + public const ACTION_SET_COMBAT_DISTANCE = 205; // combatDistance + public const ACTION_DISMOUNT = 206; // none + public const ACTION_AC_SET_HOVER = 207; // 0/1 + public const ACTION_ADD_IMMUNITY = 208; // type, id, value + public const ACTION_REMOVE_IMMUNITY = 209; // type, id, value + public const ACTION_FALL = 210; // none + public const ACTION_SET_EVENT_FLAG_RESET = 211; // 0/1 + public const ACTION_STOP_MOTION = 212; // stopMoving, movementExpired + public const ACTION_NO_ENVIRONMENT_UPDATE = 213; // none + public const ACTION_ZONE_UNDER_ATTACK = 214; // none + public const ACTION_LOAD_GRID = 215; // none + public const ACTION_MUSIC = 216; // SoundId, onlySelf, type + public const ACTION_RANDOM_MUSIC = 217; // SoundId1, SoundId2, SoundId3, SoundId4, onlySelf, type + public const ACTION_CUSTOM_CAST = 218; // spellId, castflag, bp0, bp1, bp2 + public const ACTION_CONE_SUMMON = 219; // entry, duration, dist between rings, dist between summons, cone length, cone width + public const ACTION_PLAYER_TALK = 220; // acore_string.entry, yell (0/1) + public const ACTION_VORTEX_SUMMON = 221; // entry, duration, spiral scaling, spiral appearance, range max, phi_delta + public const ACTION_CU_ENCOUNTER_START = 222; // Resets cooldowns on all targets and removes Heroism debuff(s) + public const ACTION_AC_DO_ACTION = 223; // ActionId + public const ACTION_ATTACK_STOP = 224; // none + public const ACTION_SET_GUID = 225; // Sends invoker's or base object's ObjectGuid to target + public const ACTION_SCRIPTED_SPAWN = 226; // state, spawnTimerMin, spawnTimerMax, respawnDelay, corpseDelay, dontDespawn + public const ACTION_SET_SCALE = 227; // scale + public const ACTION_SUMMON_RADIAL = 228; // summonEntry, summonDuration, repetitions, startAngle, stepAngle, dist + public const ACTION_PLAY_SPELL_VISUAL = 229; // visualId, visualIdImpact + public const ACTION_FOLLOW_GROUP = 230; // followState, followType, dist + public const ACTION_SET_ORIENTATION_TARGET = 231; // type, target_type, target_param1-4 + public const ACTION_WAYPOINT_START = 232; // pathId, repeat, pathSource + public const ACTION_WAYPOINT_DATA_RANDOM = 233; // pathId1, pathId2, repeat + public const ACTION_MOVEMENT_STOP = 234; // none + public const ACTION_MOVEMENT_PAUSE = 235; // timer + public const ACTION_MOVEMENT_RESUME = 236; // timerOverride + public const ACTION_WORLD_SCRIPT = 237; // eventId, param + public const ACTION_DISABLE_REWARD = 238; // reputation 0/1, loot 0/1 + public const ACTION_SET_ANIM_TIER = 239; // animtier + public const ACTION_SET_GOSSIP_MENU = 240; // gossipMenuId + public const ACTION_SUMMON_GAMEOBJECT_GROUP = 241; // group + public const ACTION_ALL_SPELLCASTS = [self::ACTION_CAST, self::ACTION_ADD_AURA, self::ACTION_INVOKER_CAST, self::ACTION_SELF_CAST, self::ACTION_CROSS_CAST]; public const ACTION_ALL_TIMED_ACTION_LISTS = [self::ACTION_CALL_TIMED_ACTIONLIST, self::ACTION_CALL_RANDOM_TIMED_ACTIONLIST, self::ACTION_CALL_RANDOM_RANGE_TIMED_ACTIONLIST]; @@ -320,7 +361,48 @@ class SmartAction self::ACTION_ADD_TO_STORED_TARGET_LIST => [null, null, null, null, null, null, 0], // varID self::ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER => [null, null, null, null, null, null, 2], // don't use on 3.3.5a self::ACTION_TRIGGER_GAME_EVENT => [null, null, null, null, null, null, 2], // eventId, useSaiTargetAsGameEventSource (RESERVED, PENDING CHERRYPICK) - self::ACTION_DO_ACTION => [null, null, null, null, null, null, 2] // actionId (RESERVED, PENDING CHERRYPICK) + self::ACTION_DO_ACTION => [null, null, null, null, null, null, 2], // actionId (RESERVED, PENDING CHERRYPICK) + + self::ACTION_MOVE_TO_POS_TARGET => [null, null, null, null, null, null, 0], // pointId + self::ACTION_EXIT_VEHICLE => [null, null, null, null, null, null, 0], // none + self::ACTION_SET_UNIT_MOVEMENT_FLAGS => [null, null, null, null, null, null, 0], // flags + self::ACTION_SET_COMBAT_DISTANCE => [null, null, null, null, null, null, 0], // combatDistance + self::ACTION_DISMOUNT => [null, null, null, null, null, null, 0], // none + self::ACTION_AC_SET_HOVER => [null, null, null, null, null, null, 0], // 0/1 + self::ACTION_ADD_IMMUNITY => [null, null, null, null, null, null, 0], // type, id, value + self::ACTION_REMOVE_IMMUNITY => [null, null, null, null, null, null, 0], // type, id, value + self::ACTION_FALL => [null, null, null, null, null, null, 0], // none + self::ACTION_SET_EVENT_FLAG_RESET => [null, null, null, null, null, null, 0], // 0/1 + self::ACTION_STOP_MOTION => [null, null, null, null, null, null, 0], // stopMoving, movementExpired + self::ACTION_NO_ENVIRONMENT_UPDATE => [null, null, null, null, null, null, 0], // none + self::ACTION_ZONE_UNDER_ATTACK => [null, null, null, null, null, null, 0], // none + self::ACTION_LOAD_GRID => [null, null, null, null, null, null, 0], // none + self::ACTION_MUSIC => [Type::SOUND, null, null, null, null, null, 0], // SoundId, onlySelf, type + self::ACTION_RANDOM_MUSIC => [Type::SOUND, Type::SOUND, Type::SOUND, Type::SOUND, null, null, 0], // SoundId1-4, onlySelf, type + self::ACTION_CUSTOM_CAST => [Type::SPELL, null, null, null, null, null, 0], // spellId, castflag, bp0, bp1, bp2 + self::ACTION_CONE_SUMMON => [Type::NPC, ['formatTime', 10, false], null, null, null, null, 0], // entry, duration, dist rings, dist summons, cone length, cone width + self::ACTION_PLAYER_TALK => [null, null, null, null, null, null, 0], // acore_string.entry, yell (0/1) + self::ACTION_VORTEX_SUMMON => [Type::NPC, ['formatTime', 10, false], null, null, null, null, 0], // entry, duration, spiral scaling, spiral appearance, range max, phi_delta + self::ACTION_CU_ENCOUNTER_START => [null, null, null, null, null, null, 0], // none + self::ACTION_AC_DO_ACTION => [null, null, null, null, null, null, 0], // ActionId + self::ACTION_ATTACK_STOP => [null, null, null, null, null, null, 0], // none + self::ACTION_SET_GUID => [null, null, null, null, null, null, 0], // none + self::ACTION_SCRIPTED_SPAWN => [null, ['formatTime', 10, true], ['formatTime', 11, true], ['formatTime', 12, true], null, null, 0], // state, spawnTimerMin, spawnTimerMax, respawnDelay, corpseDelay, dontDespawn + self::ACTION_SET_SCALE => [null, null, null, null, null, null, 0], // scale + self::ACTION_SUMMON_RADIAL => [Type::NPC, ['formatTime', 10, false], null, null, null, null, 0], // entry, duration, repetitions, startAngle, stepAngle, dist + self::ACTION_PLAY_SPELL_VISUAL => [null, null, null, null, null, null, 0], // visualId, visualIdImpact + self::ACTION_FOLLOW_GROUP => [null, null, null, null, null, null, 0], // followState, followType, dist + self::ACTION_SET_ORIENTATION_TARGET => [null, null, null, null, null, null, 0], // type, target_type, params + self::ACTION_WAYPOINT_START => [null, null, null, null, null, null, 0], // pathId, repeat, pathSource + self::ACTION_WAYPOINT_DATA_RANDOM => [null, null, null, null, null, null, 0], // pathId1, pathId2, repeat + self::ACTION_MOVEMENT_STOP => [null, null, null, null, null, null, 0], // none + self::ACTION_MOVEMENT_PAUSE => [['formatTime', 10, true], null, null, null, null, null, 0], // timer + self::ACTION_MOVEMENT_RESUME => [null, null, null, null, null, null, 0], // timerOverride + self::ACTION_WORLD_SCRIPT => [null, null, null, null, null, null, 0], // eventId, param + self::ACTION_DISABLE_REWARD => [null, null, null, null, null, null, 0], // reputation 0/1, loot 0/1 + self::ACTION_SET_ANIM_TIER => [null, null, null, null, null, null, 0], // animtier + self::ACTION_SET_GOSSIP_MENU => [null, null, null, null, null, null, 0], // gossipMenuId + self::ACTION_SUMMON_GAMEOBJECT_GROUP => [null, null, null, null, null, null, 0], // group ); private array $jsGlobals = []; diff --git a/includes/components/SmartAI/SmartEvent.class.php b/includes/components/SmartAI/SmartEvent.class.php index 92694845..e196b189 100644 --- a/includes/components/SmartAI/SmartEvent.class.php +++ b/includes/components/SmartAI/SmartEvent.class.php @@ -97,6 +97,17 @@ class SmartEvent public const EVENT_ON_SPELL_START = 85; // On Spell::prapare public const EVENT_ON_DESPAWN = 86; // On before creature removed + public const EVENT_NEAR_PLAYERS = 101; // min, radius, first timer, repeatMin, repeatMax + public const EVENT_NEAR_PLAYERS_NEGATION = 102; // max, radius, first timer, repeatMin, repeatMax + public const EVENT_NEAR_UNIT = 103; // type (0: creature 1: gob), entry, count, range, timer + public const EVENT_NEAR_UNIT_NEGATION = 104; // type (0: creature 1: gob), entry, count, range, timer + public const EVENT_AREA_CASTING = 105; // min, max, repeatMin, repeatMax, rangeMin, rangeMax + public const EVENT_AREA_RANGE = 106; // min, max, repeatMin, repeatMax, rangeMin, rangeMax + public const EVENT_SUMMONED_UNIT_EVADE = 107; // CreatureId(0 all), CooldownMin, CooldownMax + public const EVENT_AC_WAYPOINT_REACHED = 108; // PointId (0: any), pathId (0: any) + public const EVENT_AC_WAYPOINT_ENDED = 109; // PointId (0: any), pathId (0: any) + public const EVENT_IS_IN_MELEE_RANGE = 110; // min, max, repeatMin, repeatMax, dist, invert (0: false, 1: true) + public const FLAG_NO_REPEAT = 0x0001; public const FLAG_DIFFICULTY_0 = 0x0002; public const FLAG_DIFFICULTY_1 = 0x0004; @@ -196,7 +207,18 @@ class SmartEvent self::EVENT_ON_SPELL_CAST => [Type::SPELL, ['numRange', -1, true], null, null, null, 0], // SpellID, CooldownMin, CooldownMax self::EVENT_ON_SPELL_FAILED => [Type::SPELL, ['numRange', -1, true], null, null, null, 0], // SpellID, CooldownMin, CooldownMax self::EVENT_ON_SPELL_START => [Type::SPELL, ['numRange', -1, true], null, null, null, 0], // SpellID, CooldownMin, CooldownMax - self::EVENT_ON_DESPAWN => [null, null, null, null, null, 0] // NONE + self::EVENT_ON_DESPAWN => [null, null, null, null, null, 0], // NONE + + self::EVENT_NEAR_PLAYERS => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, radius, firstTimer, repeatMin, repeatMax + self::EVENT_NEAR_PLAYERS_NEGATION => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // max, radius, firstTimer, repeatMin, repeatMax + self::EVENT_NEAR_UNIT => [null, Type::NPC, null, ['numRange', -1, true], null, 0], // type (0: creature 1: gob), entry, count, range, timer + self::EVENT_NEAR_UNIT_NEGATION => [null, Type::NPC, null, ['numRange', -1, true], null, 0], // type (0: creature 1: gob), entry, count, range, timer + self::EVENT_AREA_CASTING => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, max, repeatMin, repeatMax, rangeMin, rangeMax + self::EVENT_AREA_RANGE => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, max, repeatMin, repeatMax, rangeMin, rangeMax + self::EVENT_SUMMONED_UNIT_EVADE => [Type::NPC, ['numRange', -1, true], null, null, null, 0], // CreatureId(0 all), CooldownMin, CooldownMax + self::EVENT_AC_WAYPOINT_REACHED => [null, null, null, null, null, 0], // PointId(0 any), pathId(0 any) + self::EVENT_AC_WAYPOINT_ENDED => [null, null, null, null, null, 0], // PointId(0 any), pathId(0 any) + self::EVENT_IS_IN_MELEE_RANGE => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, max, repeatMin, repeatMax, dist, invert ); private array $jsGlobals = []; diff --git a/includes/components/SmartAI/SmartTarget.class.php b/includes/components/SmartAI/SmartTarget.class.php index ca476c68..9cf44af9 100644 --- a/includes/components/SmartAI/SmartTarget.class.php +++ b/includes/components/SmartAI/SmartTarget.class.php @@ -41,6 +41,13 @@ class SmartTarget public const TARGET_VEHICLE_PASSENGER = 29; // Vehicle can target unit in given seat public const TARGET_CLOSEST_UNSPAWNED_GO = 30; // entry(0any), maxDist + public const TARGET_PLAYER_WITH_AURA = 201; // spellId, negation, MaxDist, MinDist + public const TARGET_RANDOM_POINT = 202; // range, amount, self as middle (0/1) + public const TARGET_ROLE_SELECTION = 203; // Range Max, TargetMask (Tanks=1, Healer=2, Damage=4) + public const TARGET_SUMMONED_CREATURES = 204; // Entry + public const TARGET_INSTANCE_STORAGE = 205; // Instance data index, Type (creature=1, gameobject=2) + public const TARGET_FORMATION = 206; // Type (0: members only, 1: leader only, 2: all), CreatureEntry (0: any), ExcludeSelf (0/1) + private const TARGET_TPL = '[tooltip name=t-#rowIdx#]%1$s[/tooltip][span class=tip tooltip=t-#rowIdx#]%2$s[/span]'; private array $targets = array( @@ -74,7 +81,14 @@ class SmartTarget self::TARGET_LOOT_RECIPIENTS => [null, null, null, null], // all players that have tagged this creature (for kill credit) self::TARGET_FARTHEST => [null, null, null, null], // maxDist, playerOnly, isInLos self::TARGET_VEHICLE_PASSENGER => [null, null, null, null], // seatMask (0 - all seats) - self::TARGET_CLOSEST_UNSPAWNED_GO => [Type::OBJECT, null, null, null] // entry(0any), maxDist + self::TARGET_CLOSEST_UNSPAWNED_GO => [Type::OBJECT, null, null, null], // entry(0any), maxDist + + self::TARGET_PLAYER_WITH_AURA => [Type::SPELL, null, null, null], // spellId, negation, MaxDist, MinDist + self::TARGET_RANDOM_POINT => [null, null, null, null], // range, amount, self as middle (0/1) + self::TARGET_ROLE_SELECTION => [null, null, null, null], // Range Max, TargetMask (Tanks=1, Healer=2, Damage=4) + self::TARGET_SUMMONED_CREATURES => [Type::NPC, null, null, null], // Entry + self::TARGET_INSTANCE_STORAGE => [null, null, null, null], // Instance data index, Type (creature=1, gameobject=2) + self::TARGET_FORMATION => [Type::NPC, null, null, null], // Type (0: members, 1: leader, 2: all), CreatureEntry, ExcludeSelf ); private array $jsGlobals = []; diff --git a/localization/locale_enus.php b/localization/locale_enus.php index 7697b541..b7d870c3 100644 --- a/localization/locale_enus.php +++ b/localization/locale_enus.php @@ -634,6 +634,17 @@ SmartEvent::EVENT_ON_SPELL_FAILED => ['On [spell=%1$d] cast failed', 'Cooldown: %s'], SmartEvent::EVENT_ON_SPELL_START => ['On [spell=%1$d] cast start', 'Cooldown: %s'], SmartEvent::EVENT_ON_DESPAWN => ['On despawn', ''], + +/*101*/ SmartEvent::EVENT_NEAR_PLAYERS => ['(%1$d)?At least %1$d:Any; player(%1$d != 1)?s:; within %2$dm', 'Repeat every %s'], + SmartEvent::EVENT_NEAR_PLAYERS_NEGATION => ['Fewer than (%1$d)?%1$d:any; player(%1$d != 1)?s:; within %2$dm', 'Repeat every %s'], + SmartEvent::EVENT_NEAR_UNIT => ['(%1$d)?At least %3$d [npc=%2$d]:any unit; within %4$dm', 'Repeat every %s'], + SmartEvent::EVENT_NEAR_UNIT_NEGATION => ['Fewer than (%3$d)?%3$d:any; (%2$d)?[npc=%2$d]:unit; within %4$dm', 'Repeat every %s'], +/*105*/ SmartEvent::EVENT_AREA_CASTING => ['When %11$s targets in area are casting', 'Repeat every %s'], + SmartEvent::EVENT_AREA_RANGE => ['When %11$s targets are in area', 'Repeat every %s'], + SmartEvent::EVENT_SUMMONED_UNIT_EVADE => ['My summoned (%1$d)?[npc=%1$d]:NPC; evaded', 'Cooldown: %s'], + SmartEvent::EVENT_AC_WAYPOINT_REACHED => ['Reaching (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_AC_WAYPOINT_ENDED => ['Ending path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? at path #[b]%2$d[/b]:;', ''], +/*110*/ SmartEvent::EVENT_IS_IN_MELEE_RANGE => ['(%6$d)?Not in:In; melee range', 'Repeat every %s'], ), 'eventFlags' => array( SmartEvent::FLAG_NO_REPEAT => 'No Repeat', @@ -799,7 +810,48 @@ SmartAction::ACTION_ADD_TO_STORED_TARGET_LIST => ['Add #target# as target to list #%1$d.', ''], SmartAction::ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER => null, /*150*/ SmartAction::ACTION_TRIGGER_GAME_EVENT => null, - SmartAction::ACTION_DO_ACTION => null + SmartAction::ACTION_DO_ACTION => null, + +/*201*/ SmartAction::ACTION_MOVE_TO_POS_TARGET => ['Move #target# to waypoint #[b]%1$d[/b].', ''], + SmartAction::ACTION_EXIT_VEHICLE => ['#target# exits vehicle.', ''], + SmartAction::ACTION_SET_UNIT_MOVEMENT_FLAGS => ['Set movement flags of #target# to [b]%1$d[/b].', ''], +/*204*/ SmartAction::ACTION_SET_COMBAT_DISTANCE => ['Set combat distance of #target# to [b]%1$d[/b].', ''], + SmartAction::ACTION_DISMOUNT => ['Dismount #target#.', ''], + SmartAction::ACTION_AC_SET_HOVER => ['(%1$d)?Enable:Disable; hovering of #target#.', ''], + SmartAction::ACTION_ADD_IMMUNITY => ['Add immunity to #target#: type [b]%1$d[/b] id [b]%2$d[/b] value [b]%3$d[/b].', ''], + SmartAction::ACTION_REMOVE_IMMUNITY => ['Remove immunity from #target#: type [b]%1$d[/b] id [b]%2$d[/b] value [b]%3$d[/b].', ''], +/*209*/ SmartAction::ACTION_FALL => ['#target# falls.', ''], +/*211*/ SmartAction::ACTION_SET_EVENT_FLAG_RESET => ['(%1$d)?Enable:Disable; event flag reset.', ''], + SmartAction::ACTION_STOP_MOTION => ['Stop #target# motion.', '(%1$d)?Stop moving:; (%2$d)?Expire movement:;'], + SmartAction::ACTION_NO_ENVIRONMENT_UPDATE => ['Suppress environment update.', ''], + SmartAction::ACTION_ZONE_UNDER_ATTACK => ['Trigger zone-under-attack for #target#.', ''], +/*215*/ SmartAction::ACTION_LOAD_GRID => ['Load grid for #target#.', ''], + SmartAction::ACTION_MUSIC => ['Play music [sound=%1$d](%2$d)? on self:; type [b]%3$d[/b].', ''], + SmartAction::ACTION_RANDOM_MUSIC => ['Play random music (%1$d)?[sound=%1$d]:;(%2$d)? / [sound=%2$d]:;(%3$d)? / [sound=%3$d]:;(%4$d)? / [sound=%4$d]:;.', ''], + SmartAction::ACTION_CUSTOM_CAST => ['Custom cast [spell=%1$d] on #target#.', ''], + SmartAction::ACTION_CONE_SUMMON => ['Summon [npc=%1$d] in a cone.(%2$d)? (disappears after %11$s):;', ''], +/*220*/ SmartAction::ACTION_PLAYER_TALK => ['Players say text #[b]%1$d[/b](%2$d)? as yell:.;', ''], + SmartAction::ACTION_VORTEX_SUMMON => ['Summon [npc=%1$d] in a vortex.(%2$d)? (disappears after %11$s):;', ''], + SmartAction::ACTION_CU_ENCOUNTER_START => ['Reset encounter (cooldowns + Heroism debuffs).', ''], + SmartAction::ACTION_AC_DO_ACTION => ['Do action #[b]%1$d[/b].', ''], + SmartAction::ACTION_ATTACK_STOP => ['#target# stops attacking.', ''], +/*225*/ SmartAction::ACTION_SET_GUID => ['Send GUID of invoker/base-object to #target#.', ''], + SmartAction::ACTION_SCRIPTED_SPAWN => ['Scripted spawn.', ''], + SmartAction::ACTION_SET_SCALE => ['Set scale of #target# to [b]%1$d[/b].', ''], + SmartAction::ACTION_SUMMON_RADIAL => ['Summon [npc=%1$d] in a ring.(%2$d)? (disappears after %11$s):;', ''], + SmartAction::ACTION_PLAY_SPELL_VISUAL => ['Play spell visual [b]%1$d[/b](%2$d)? with impact [b]%2$d[/b]:; on #target#.', ''], +/*230*/ SmartAction::ACTION_FOLLOW_GROUP => ['Formation follow. State [b]%1$d[/b], type [b]%2$d[/b].', ''], + SmartAction::ACTION_SET_ORIENTATION_TARGET => ['Face #target# toward target type [b]%1$d[/b].', ''], + SmartAction::ACTION_WAYPOINT_START => ['Start waypoint path [b]%1$d[/b](%2$d)? (repeat):; on #target#.', ''], + SmartAction::ACTION_WAYPOINT_DATA_RANDOM => ['Start random waypoint path [b]%1$d[/b] – [b]%2$d[/b](%3$d)? (repeat):; on #target#.', ''], + SmartAction::ACTION_MOVEMENT_STOP => ['Stop movement of #target#.', ''], +/*235*/ SmartAction::ACTION_MOVEMENT_PAUSE => ['Pause movement of #target# for %11$s.', ''], + SmartAction::ACTION_MOVEMENT_RESUME => ['Resume movement of #target#.', ''], + SmartAction::ACTION_WORLD_SCRIPT => ['Fire world script event [b]%1$d[/b](%2$d)? param [b]%2$d[/b]:.;', ''], + SmartAction::ACTION_DISABLE_REWARD => ['Disable reward for #target#.', '(%1$d)?No reputation:; (%2$d)?No loot:;'], + SmartAction::ACTION_SET_ANIM_TIER => ['Set anim tier of #target# to [b]%1$d[/b].', ''], +/*240*/ SmartAction::ACTION_SET_GOSSIP_MENU => ['Set gossip menu of #target# to [b]%1$d[/b].', ''], + SmartAction::ACTION_SUMMON_GAMEOBJECT_GROUP => ['Spawn gameobject group [b]%1$d[/b].', ''], ), 'targetUNK' => '[span class=q10]unknown target #[b class=q1]%d[/b][/span]', 'targetTT' => '[b class=q1]TargetType %d[/b][br][table][tr][td]Param1[/td][td=header]%d[/td][/tr][tr][td]Param2[/td][td=header]%d[/td][/tr][tr][td]Param3[/td][td=header]%d[/td][/tr][tr][td]Param4[/td][td=header]%d[/td][/tr][tr][td]X[/td][td=header]%17$.2f[/td][/tr][tr][td]Y[/td][td=header]%18$.2f[/td][/tr][tr][td]Z[/td][td=header]%19$.2f[/td][/tr][tr][td]O[/td][td=header]%20$.2f[/td][/tr][/table]', @@ -834,7 +886,14 @@ SmartTarget::TARGET_LOOT_RECIPIENTS => 'all players eligible for loot', SmartTarget::TARGET_FARTHEST => 'furthest engaged (%2$d)?player:unit; within %1$dm(%3$d)? and line of sight:;', SmartTarget::TARGET_VEHICLE_PASSENGER => 'vehicle accessory in (%1$d)?seat %11$s:all seats;', -/*30*/ SmartTarget::TARGET_CLOSEST_UNSPAWNED_GO => 'closest unspawned (%1$d)?[object=%1$d]:, gameobject; within %11$sm' +/*30*/ SmartTarget::TARGET_CLOSEST_UNSPAWNED_GO => 'closest unspawned (%1$d)?[object=%1$d]:, gameobject; within %11$sm', + +/*201*/ SmartTarget::TARGET_PLAYER_WITH_AURA => 'player(%2$d)? without:; [spell=%1$d](%3$d)? within %3$dm:;', + SmartTarget::TARGET_RANDOM_POINT => 'random point within %1$dm', + SmartTarget::TARGET_ROLE_SELECTION => 'role-selected units within %1$dm', + SmartTarget::TARGET_SUMMONED_CREATURES => 'summoned (%1$d)?[npc=%1$d]:creatures;', +/*205*/ SmartTarget::TARGET_INSTANCE_STORAGE => 'instance storage index [b]%1$d[/b]', + SmartTarget::TARGET_FORMATION => 'formation (%2$d)?[npc=%2$d]:members;', ), 'castFlags' => array( SmartAI::CAST_FLAG_INTERRUPT_PREV => 'Interrupt current cast', From a3623677e67560dab97224f06eb75600e994a953 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Mon, 25 May 2026 13:39:13 +0100 Subject: [PATCH 2/3] Added missing and updated Conditions --- .../Conditions/Conditions.class.php | 22 ++++++++++++++++--- static/js/locale_dede.js | 8 ++++++- static/js/locale_enus.js | 8 ++++++- static/js/locale_eses.js | 8 ++++++- static/js/locale_frfr.js | 8 ++++++- static/js/locale_ruru.js | 8 ++++++- static/js/locale_zhcn.js | 8 ++++++- 7 files changed, 61 insertions(+), 9 deletions(-) diff --git a/includes/components/Conditions/Conditions.class.php b/includes/components/Conditions/Conditions.class.php index 5830157e..aac155bd 100644 --- a/includes/components/Conditions/Conditions.class.php +++ b/includes/components/Conditions/Conditions.class.php @@ -52,8 +52,8 @@ class Conditions // public const SRC_SPELL_TERRAIN_SWAP = 25; // - ❌ reserved for TC master // public const SRC_SPELL_PHASE = 26; // - ❌ reserved for TC master // public const SRC_SPELL_GRAVEYARD = 27; // - ❌ reserved for TC master -// public const SRC_SPELL_AREATRIGGER = 28; // - ❌ reserved for TC master -// public const SRC_SPELL_CONVERSATION_LINE = 29; // - ❌ reserved for TC master + public const SRC_PLAYER_LOOT_TEMPLATE = 28; // tplEntry, itemId, null + public const SRC_CREATURE_RESPAWN = 29; // null, npcId, null public const SRC_AREATRIGGER_CLIENT = 30; // null, atId, null // public const SRC_SPELL_TRAINER_SPELL = 31; // - ❌ reserved for TC master // public const SRC_SPELL_OBJECT_VISIBILITY = 32; // - ❌ reserved for TC master @@ -117,6 +117,13 @@ class Conditions // public const SCENE_IN_PROGRESS = 55; // ❌ reserved for TC master // public const PLAYER_CONDITION = 56; // ❌ reserved for TC master + public const QUEST_SATISFY_EXCLUSIVE = 101; // quest_id satisfied exclusive group: questId, NULL, NULL + public const HAS_AURA_TYPE = 102; // has aura type: auraType, NULL, NULL + public const WORLD_SCRIPT = 103; // WorldState::IsConditionFulfilled: conditionId, state, NULL + public const AI_DATA = 104; // AI::GetData returns value: dataId, value, NULL + public const PLAYER_QUEUED_RANDOM_DUNGEON = 105; // queued for RDF: checkDiff?, difficulty, NULL + public const UNIT_IN_COMBAT = 106; // unit is engaged in combat: NULL, NULL, NULL + private const IDX_SRC_GROUP = 0; private const IDX_SRC_ENTRY = 1; private const IDX_SRC_ID = 2; @@ -148,6 +155,8 @@ class Conditions self::SRC_SMART_EVENT => [true, true, true, null], self::SRC_NPC_VENDOR => [Type::NPC, Type::ITEM, null, null], self::SRC_SPELL_PROC => [null, Type::SPELL, null, null], + self::SRC_PLAYER_LOOT_TEMPLATE => [null, Type::ITEM, null, null], + self::SRC_CREATURE_RESPAWN => [null, Type::NPC, null, null], self::SRC_AREATRIGGER_CLIENT => [null, Type::AREATRIGGER, null, null] ); @@ -206,7 +215,14 @@ class Conditions self::QUESTSTATE => [Type::QUEST, true, null, null], self::QUEST_OBJECTIVE_PROGRESS => [Type::QUEST, true, true, null], self::DIFFICULTY_ID => [true, null, null, null], - self::GAMEMASTER => [true, null, null, null] + self::GAMEMASTER => [true, null, null, null], + + self::QUEST_SATISFY_EXCLUSIVE => [Type::QUEST, null, null, null], + self::HAS_AURA_TYPE => [true, null, null, null], + self::WORLD_SCRIPT => [true, true, null, null], + self::AI_DATA => [true, true, null, null], + self::PLAYER_QUEUED_RANDOM_DUNGEON => [true, true, null, null], + self::UNIT_IN_COMBAT => [null, null, null, null] ); private $jsGlobals = []; diff --git a/static/js/locale_dede.js b/static/js/locale_dede.js index fc698256..7de976c2 100644 --- a/static/js/locale_dede.js +++ b/static/js/locale_dede.js @@ -2517,7 +2517,13 @@ var g_conditions = { 47: 'Der Spieler hat [quest=$1]$N: nicht; $2', 48: 'Der Questfortschritt für Ziel #$2 von [quest=$1] ist$N: nicht; $3', 49: 'Der aktuelle Schwierigkeitsgrad für diese Instanz ist #$1', - 50: 'Der Spieler $C$1kann$N: nicht; Gamemaster sein:ist $Nein:kein; Gamemaster;' + 50: 'Der Spieler $C$1kann$N: nicht; Gamemaster sein:ist $Nein:kein; Gamemaster;', + 101: 'The Player $Nhas:has not; satisfied the exclusive group for [quest=$1]', + 102: 'The unit $Nhas:does not have; an aura of type #$1', + 103: 'World script condition #$1 is$N: not; fulfilled with state #$2', + 104: 'AI data index #$1 is$N: not; equal to $2', + 105: 'The Player is$N: not; queued for a random dungeon via RDF', + 106: 'The unit is$N: not; in combat' }; /* end aowow custom */ diff --git a/static/js/locale_enus.js b/static/js/locale_enus.js index 05aec4be..9f76a86f 100644 --- a/static/js/locale_enus.js +++ b/static/js/locale_enus.js @@ -2565,7 +2565,13 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 101: 'The Player $Nhas:has not; satisfied the exclusive group for [quest=$1]', + 102: 'The unit $Nhas:does not have; an aura of type #$1', + 103: 'World script condition #$1 is$N: not; fulfilled with state #$2', + 104: 'AI data index #$1 is$N: not; equal to $2', + 105: 'The Player is$N: not; queued for a random dungeon via RDF', + 106: 'The unit is$N: not; in combat' }; /* end aowow custom */ diff --git a/static/js/locale_eses.js b/static/js/locale_eses.js index da535214..e85f2d19 100644 --- a/static/js/locale_eses.js +++ b/static/js/locale_eses.js @@ -2517,7 +2517,13 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 101: 'The Player $Nhas:has not; satisfied the exclusive group for [quest=$1]', + 102: 'The unit $Nhas:does not have; an aura of type #$1', + 103: 'World script condition #$1 is$N: not; fulfilled with state #$2', + 104: 'AI data index #$1 is$N: not; equal to $2', + 105: 'The Player is$N: not; queued for a random dungeon via RDF', + 106: 'The unit is$N: not; in combat' }; /* end aowow custom */ diff --git a/static/js/locale_frfr.js b/static/js/locale_frfr.js index 4da5f779..1c4c7fe2 100644 --- a/static/js/locale_frfr.js +++ b/static/js/locale_frfr.js @@ -2517,7 +2517,13 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 101: 'The Player $Nhas:has not; satisfied the exclusive group for [quest=$1]', + 102: 'The unit $Nhas:does not have; an aura of type #$1', + 103: 'World script condition #$1 is$N: not; fulfilled with state #$2', + 104: 'AI data index #$1 is$N: not; equal to $2', + 105: 'The Player is$N: not; queued for a random dungeon via RDF', + 106: 'The unit is$N: not; in combat' }; /* end aowow custom */ diff --git a/static/js/locale_ruru.js b/static/js/locale_ruru.js index 6a8c4a8c..cfca4366 100644 --- a/static/js/locale_ruru.js +++ b/static/js/locale_ruru.js @@ -2517,7 +2517,13 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 101: 'The Player $Nhas:has not; satisfied the exclusive group for [quest=$1]', + 102: 'The unit $Nhas:does not have; an aura of type #$1', + 103: 'World script condition #$1 is$N: not; fulfilled with state #$2', + 104: 'AI data index #$1 is$N: not; equal to $2', + 105: 'The Player is$N: not; queued for a random dungeon via RDF', + 106: 'The unit is$N: not; in combat' }; /* end aowow custom */ diff --git a/static/js/locale_zhcn.js b/static/js/locale_zhcn.js index 56fa4a0f..1f4b81c3 100644 --- a/static/js/locale_zhcn.js +++ b/static/js/locale_zhcn.js @@ -2564,7 +2564,13 @@ var g_conditions = { 47: 'The Player has$N: not; $2 [quest=$1]', 48: 'The Player has$N: not; collected $3 towards objective #$2 of [quest=$1]', 49: 'The current map difficulty is #$1', - 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster' + 50: 'The Player $C$1$Ncan:can\'t; be:is$N: not;; a Gamemaster', + 101: 'The Player $Nhas:has not; satisfied the exclusive group for [quest=$1]', + 102: 'The unit $Nhas:does not have; an aura of type #$1', + 103: 'World script condition #$1 is$N: not; fulfilled with state #$2', + 104: 'AI data index #$1 is$N: not; equal to $2', + 105: 'The Player is$N: not; queued for a random dungeon via RDF', + 106: 'The unit is$N: not; in combat' }; /* end aowow custom */ From c16b83cca05c41edd1b0f0ef26cdfdeda39f7d09 Mon Sep 17 00:00:00 2001 From: FlyingArowana Date: Mon, 25 May 2026 21:51:41 +0100 Subject: [PATCH 3/3] Updated Conditions and SAI commnets for un-used or different names --- .../Conditions/Conditions.class.php | 2 +- .../components/SmartAI/SmartAction.class.php | 94 +++++++++---------- .../components/SmartAI/SmartEvent.class.php | 60 ++++++------ .../components/SmartAI/SmartTarget.class.php | 2 +- localization/locale_enus.php | 16 ++-- 5 files changed, 87 insertions(+), 87 deletions(-) diff --git a/includes/components/Conditions/Conditions.class.php b/includes/components/Conditions/Conditions.class.php index aac155bd..0f1ecb4f 100644 --- a/includes/components/Conditions/Conditions.class.php +++ b/includes/components/Conditions/Conditions.class.php @@ -109,7 +109,7 @@ class Conditions public const QUESTSTATE = 47; // questId, stateMask, NULL public const QUEST_OBJECTIVE_PROGRESS = 48; // questId, objectiveIdx, count public const DIFFICULTY_ID = 49; // map has difficulty id: difficulty, NULL, NULL - public const GAMEMASTER = 50; // player is GM: canBeGM?, NULL, NULL + public const GAMEMASTER = 50; // player is GM: canBeGM?, NULL, NULL - Un-used TrinityCore, doesn't exist or works different in AzerothCore // public const OBJECT_ENTRY_GUID_MASTER = 51; // ❌ reserved for TC master // public const TYPE_MASK_MASTER = 52; // ❌ reserved for TC master // public const BATTLE_PET_COUNT = 53; // ❌ reserved for TC master diff --git a/includes/components/SmartAI/SmartAction.class.php b/includes/components/SmartAI/SmartAction.class.php index 757b81b9..e45e2c3c 100644 --- a/includes/components/SmartAI/SmartAction.class.php +++ b/includes/components/SmartAI/SmartAction.class.php @@ -146,21 +146,21 @@ class SmartAction public const ACTION_INVOKER_CAST = 134; // spellID, castFlags public const ACTION_PLAY_CINEMATIC = 135; // cinematic public const ACTION_SET_MOVEMENT_SPEED = 136; // movementType, speedInteger, speedFraction - public const ACTION_PLAY_SPELL_VISUAL_KIT = 137; // [RESERVED] spellVisualKitId - public const ACTION_OVERRIDE_LIGHT = 138; // zoneId, areaLightId, overrideLightID, transitionMilliseconds - public const ACTION_OVERRIDE_WEATHER = 139; // zoneId, weatherId, intensity - public const ACTION_SET_AI_ANIM_KIT = 140; // [RESERVED] - public const ACTION_SET_HOVER = 141; // Enable/Disable hover for target units. + public const ACTION_PLAY_SPELL_VISUAL_KIT = 137; // spellVisualKitId - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_OVERRIDE_LIGHT = 138; // zoneId, areaLightId, overrideLightID, transitionMilliseconds - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_OVERRIDE_WEATHER = 139; // zoneId, weatherId, intensity - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_SET_AI_ANIM_KIT = 140; // Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_SET_HOVER = 141; // Enable/Disable hover (use ACTION_AC_SET_HOVER=207 instead) - Un-used TrinityCore, doesn't exist or works different in AzerothCore public const ACTION_SET_HEALTH_PCT = 142; // Set current health percentage of target units. - public const ACTION_CREATE_CONVERSATION = 143; // [RESERVED] - public const ACTION_SET_IMMUNE_PC = 144; // Enable/Disable immunity to players of target units. - public const ACTION_SET_IMMUNE_NPC = 145; // Enable/Disable immunity to creatures of target units. - public const ACTION_SET_UNINTERACTIBLE = 146; // Make/Reset target units uninteractible. - public const ACTION_ACTIVATE_GAMEOBJECT = 147; // Activate target gameobjects, using given action. - public const ACTION_ADD_TO_STORED_TARGET_LIST = 148; // Add selected targets to varID for later use. - public const ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER = 149; // [RESERVED] - public const ACTION_TRIGGER_GAME_EVENT = 150; // [RESERVED] - public const ACTION_DO_ACTION = 151; // [RESERVED] + public const ACTION_CREATE_CONVERSATION = 143; // Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_SET_IMMUNE_PC = 144; // Enable/Disable immunity to players of target units. - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_SET_IMMUNE_NPC = 145; // Enable/Disable immunity to creatures of target units. - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_SET_UNINTERACTIBLE = 146; // Make/Reset target units uninteractible. - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_ACTIVATE_GAMEOBJECT = 147; // Activate target gameobjects, using given action. - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_ADD_TO_STORED_TARGET_LIST = 148; // Add selected targets to varID for later use. - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER = 149; // Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_TRIGGER_GAME_EVENT = 150; // Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const ACTION_DO_ACTION = 151; // (use ACTION_AC_DO_ACTION=223 instead) - Un-used TrinityCore, doesn't exist or works different in AzerothCore public const ACTION_MOVE_TO_POS_TARGET = 201; // pointId public const ACTION_EXIT_VEHICLE = 203; // none @@ -228,8 +228,8 @@ class SmartAction self::ACTION_CALL_AREAEXPLOREDOREVENTHAPPENS => [Type::QUEST, null, null, null, null, null, 0], // QuestID self::ACTION_SET_INGAME_PHASE_ID => [null, null, null, null, null, null, 2], // used on 4.3.4 and higher scripts self::ACTION_SET_EMOTE_STATE => [null, null, null, null, null, null, 0], // emoteID - self::ACTION_SET_UNIT_FLAG => [['unitFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_REMOVE_UNIT_FLAG => [['unitFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_SET_UNIT_FLAG => [['unitFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_REMOVE_UNIT_FLAG => [['unitFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_AUTO_ATTACK => [null, null, null, null, null, null, 0], // AllowAttackState (0 = stop attack, anything else means continue attacking) self::ACTION_ALLOW_COMBAT_MOVEMENT => [null, null, null, null, null, null, 0], // AllowCombatMovement (0 = stop combat based movement, anything else continue attacking) self::ACTION_SET_EVENT_PHASE => [null, null, null, null, null, null, 0], // Phase @@ -268,10 +268,10 @@ class SmartAction self::ACTION_WP_STOP => [['formatTime', 10, true], Type::QUEST, null, null, null, null, 0], // despawnTime, quest, fail? self::ACTION_ADD_ITEM => [Type::ITEM, null, null, null, null, null, 0], // itemID, count self::ACTION_REMOVE_ITEM => [Type::ITEM, null, null, null, null, null, 0], // itemID, count - self::ACTION_INSTALL_AI_TEMPLATE => [['aiTemplate', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_INSTALL_AI_TEMPLATE => [['aiTemplate', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_SET_RUN => [null, null, null, null, null, null, 0], // 0/1 self::ACTION_SET_DISABLE_GRAVITY => [null, null, null, null, null, null, 0], // 0/1 - self::ACTION_SET_SWIM => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_SET_SWIM => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_TELEPORT => [null, null, null, null, null, null, 0], // mapID, self::ACTION_SET_COUNTER => [null, null, null, null, null, null, 0], // id, value, reset (0/1) self::ACTION_STORE_TARGET_LIST => [null, null, null, null, null, null, 0], // varID, @@ -285,9 +285,9 @@ class SmartAction self::ACTION_CLOSE_GOSSIP => [null, null, null, null, null, null, 0], // none self::ACTION_TRIGGER_TIMED_EVENT => [null, null, null, null, null, null, 0], // id(>1) self::ACTION_REMOVE_TIMED_EVENT => [null, null, null, null, null, null, 0], // id(>1) - self::ACTION_ADD_AURA => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_OVERRIDE_SCRIPT_BASE_OBJECT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_RESET_SCRIPT_BASE_OBJECT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_ADD_AURA => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_OVERRIDE_SCRIPT_BASE_OBJECT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_RESET_SCRIPT_BASE_OBJECT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_CALL_SCRIPT_RESET => [null, null, null, null, null, null, 0], // none self::ACTION_SET_RANGED_MOVEMENT => [null, null, null, null, null, null, 0], // Distance, angle self::ACTION_CALL_TIMED_ACTIONLIST => [null, null, null, null, null, null, 0], // ID (overwrites already running actionlist), stop after combat?(0/1), timer update type(0-OOC, 1-IC, 2-ALWAYS) @@ -303,10 +303,10 @@ class SmartAction self::ACTION_SET_UNIT_FIELD_BYTES_1 => [['unitFieldBytes1', 10, false], null, null, null, null, null, 0], // bytes, target self::ACTION_REMOVE_UNIT_FIELD_BYTES_1 => [['unitFieldBytes1', 10, false], null, null, null, null, null, 0], // bytes, target self::ACTION_INTERRUPT_SPELL => [null, Type::SPELL, null, null, null, null, 0], // - self::ACTION_SEND_GO_CUSTOM_ANIM => [['dynFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_SET_DYNAMIC_FLAG => [['dynFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_ADD_DYNAMIC_FLAG => [['dynFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_REMOVE_DYNAMIC_FLAG => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_SEND_GO_CUSTOM_ANIM => [['dynFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_DYNAMIC_FLAG => [['dynFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_ADD_DYNAMIC_FLAG => [['dynFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_REMOVE_DYNAMIC_FLAG => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_JUMP_TO_POS => [null, null, null, null, null, null, 0], // speedXY, speedZ, targetX, targetY, targetZ self::ACTION_SEND_GOSSIP_MENU => [null, null, null, null, null, null, 0], // menuId, optionId self::ACTION_GO_SET_LOOT_STATE => [['lootState', 10, false], null, null, null, null, null, 0], // state @@ -314,9 +314,9 @@ class SmartAction self::ACTION_SET_HOME_POS => [null, null, null, null, null, null, 0], // none self::ACTION_SET_HEALTH_REGEN => [null, null, null, null, null, null, 0], // 0/1 self::ACTION_SET_ROOT => [null, null, null, null, null, null, 0], // off/on - self::ACTION_SET_GO_FLAG => [['goFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_ADD_GO_FLAG => [['goFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_REMOVE_GO_FLAG => [['goFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_SET_GO_FLAG => [['goFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_ADD_GO_FLAG => [['goFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_REMOVE_GO_FLAG => [['goFlags', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_SUMMON_CREATURE_GROUP => [null, null, null, null, null, null, 0], // Group, attackInvoker self::ACTION_SET_POWER => [['powerType', 10, false], null, null, null, null, null, 0], // PowerType, newPower self::ACTION_ADD_POWER => [['powerType', 10, false], null, null, null, null, null, 0], // PowerType, newPower @@ -329,14 +329,14 @@ class SmartAction self::ACTION_SET_CORPSE_DELAY => [['formatTime', 10, false], null, null, null, null, null, 0], // timer self::ACTION_DISABLE_EVADE => [null, null, null, null, null, null, 0], // 0/1 (1 = disabled, 0 = enabled) self::ACTION_GO_SET_GO_STATE => [null, null, null, null, null, null, 0], // state - self::ACTION_SET_CAN_FLY => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_REMOVE_AURAS_BY_TYPE => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_SET_SIGHT_DIST => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::ACTION_FLEE => [['formatTime', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_SET_CAN_FLY => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_REMOVE_AURAS_BY_TYPE => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_SIGHT_DIST => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_FLEE => [['formatTime', 10, false], null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_ADD_THREAT => [null, null, null, null, null, null, 0], // +threat, -threat self::ACTION_LOAD_EQUIPMENT => [null, null, null, null, null, null, 0], // id self::ACTION_TRIGGER_RANDOM_TIMED_EVENT => [['numRange', 10, false], null, null, null, null, null, 0], // id min range, id max range - self::ACTION_REMOVE_ALL_GAMEOBJECTS => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::ACTION_REMOVE_ALL_GAMEOBJECTS => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_PAUSE_MOVEMENT => [null, ['formatTime', 10, true], null, null, null, null, 0], // MovementSlot (default = 0, active = 1, controlled = 2), PauseTime (ms), Force self::ACTION_PLAY_ANIMKIT => [null, null, null, null, null, null, 2], // don't use on 3.3.5a self::ACTION_SCENE_PLAY => [null, null, null, null, null, null, 2], // don't use on 3.3.5a @@ -347,21 +347,21 @@ class SmartAction self::ACTION_INVOKER_CAST => [Type::SPELL, ['castFlags', -1, false], null, null, null, null, 0], // spellID, castFlags self::ACTION_PLAY_CINEMATIC => [null, null, null, null, null, null, 0], // entry, cinematic self::ACTION_SET_MOVEMENT_SPEED => [null, null, null, null, null, null, 0], // movementType, speedInteger, speedFraction - self::ACTION_PLAY_SPELL_VISUAL_KIT => [null, null, null, null, null, null, 2], // spellVisualKitId (RESERVED, PENDING CHERRYPICK) - self::ACTION_OVERRIDE_LIGHT => [Type::ZONE, null, null, ['formatTime', -1, true], null, null, 0], // zoneId, overrideLightID, transitionMilliseconds - self::ACTION_OVERRIDE_WEATHER => [Type::ZONE, ['weatherState', 10, false], null, null, null, null, 0], // zoneId, weatherId, intensity - self::ACTION_SET_AI_ANIM_KIT => [null, null, null, null, null, null, 2], // DEPRECATED, DO REUSE (it was never used in any branch, treat as free action id) - self::ACTION_SET_HOVER => [null, null, null, null, null, null, 0], // 0/1 + self::ACTION_PLAY_SPELL_VISUAL_KIT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_OVERRIDE_LIGHT => [Type::ZONE, null, null, ['formatTime', -1, true], null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_OVERRIDE_WEATHER => [Type::ZONE, ['weatherState', 10, false], null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_AI_ANIM_KIT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_HOVER => [null, null, null, null, null, null, 1], // (use ACTION_AC_SET_HOVER=207 instead) - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_SET_HEALTH_PCT => [null, null, null, null, null, null, 0], // percent - self::ACTION_CREATE_CONVERSATION => [null, null, null, null, null, null, 2], // don't use on 3.3.5a - self::ACTION_SET_IMMUNE_PC => [null, null, null, null, null, null, 0], // 0/1 - self::ACTION_SET_IMMUNE_NPC => [null, null, null, null, null, null, 0], // 0/1 - self::ACTION_SET_UNINTERACTIBLE => [null, null, null, null, null, null, 0], // 0/1 - self::ACTION_ACTIVATE_GAMEOBJECT => [null, null, null, null, null, null, 0], // GameObjectActions - self::ACTION_ADD_TO_STORED_TARGET_LIST => [null, null, null, null, null, null, 0], // varID - self::ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER => [null, null, null, null, null, null, 2], // don't use on 3.3.5a - self::ACTION_TRIGGER_GAME_EVENT => [null, null, null, null, null, null, 2], // eventId, useSaiTargetAsGameEventSource (RESERVED, PENDING CHERRYPICK) - self::ACTION_DO_ACTION => [null, null, null, null, null, null, 2], // actionId (RESERVED, PENDING CHERRYPICK) + self::ACTION_CREATE_CONVERSATION => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_IMMUNE_PC => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_IMMUNE_NPC => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_SET_UNINTERACTIBLE => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_ACTIVATE_GAMEOBJECT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_ADD_TO_STORED_TARGET_LIST => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_TRIGGER_GAME_EVENT => [null, null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::ACTION_DO_ACTION => [null, null, null, null, null, null, 1], // (use ACTION_AC_DO_ACTION=223 instead) - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::ACTION_MOVE_TO_POS_TARGET => [null, null, null, null, null, null, 0], // pointId self::ACTION_EXIT_VEHICLE => [null, null, null, null, null, null, 0], // none diff --git a/includes/components/SmartAI/SmartEvent.class.php b/includes/components/SmartAI/SmartEvent.class.php index e196b189..bb56a7ee 100644 --- a/includes/components/SmartAI/SmartEvent.class.php +++ b/includes/components/SmartAI/SmartEvent.class.php @@ -48,8 +48,8 @@ class SmartEvent public const EVENT_CORPSE_REMOVED = 36; // On Creature Corpse Removed public const EVENT_AI_INIT = 37; // public const EVENT_DATA_SET = 38; // On Creature/Gameobject Data Set, Can be used with SMART_ACTION_SET_DATA - public const EVENT_WAYPOINT_START = 39; // [DEPRECATED] On Creature Waypoint ID Started - public const EVENT_WAYPOINT_REACHED = 40; // On Creature Waypoint ID Reached + public const EVENT_ESCORT_START = 39; // On Creature Escort Path Started + public const EVENT_ESCORT_REACHED = 40; // On Creature Escort Path Waypoint ID Reached public const EVENT_TRANSPORT_ADDPLAYER = 41; // [RESERVED] public const EVENT_TRANSPORT_ADDCREATURE = 42; // [RESERVED] public const EVENT_TRANSPORT_REMOVE_PLAYER = 43; // [RESERVED] @@ -64,10 +64,10 @@ class SmartEvent public const EVENT_TEXT_OVER = 52; // On TEXT_OVER Event Triggered After SMART_ACTION_TALK public const EVENT_RECEIVE_HEAL = 53; // On Creature Received Healing public const EVENT_JUST_SUMMONED = 54; // On Creature Just spawned - public const EVENT_WAYPOINT_PAUSED = 55; // On Creature Paused at Waypoint ID - public const EVENT_WAYPOINT_RESUMED = 56; // On Creature Resumed after Waypoint ID - public const EVENT_WAYPOINT_STOPPED = 57; // On Creature Stopped On Waypoint ID - public const EVENT_WAYPOINT_ENDED = 58; // On Creature Waypoint Path Ended + public const EVENT_ESCORT_PAUSED = 55; // On Creature Escort Path Paused at Waypoint ID + public const EVENT_ESCORT_RESUMED = 56; // On Creature Escort Path Resumed after Waypoint ID + public const EVENT_ESCORT_STOPPED = 57; // On Creature Escort Path Stopped at Waypoint ID + public const EVENT_ESCORT_ENDED = 58; // On Creature Escort Path Ended public const EVENT_TIMED_EVENT_TRIGGERED = 59; // public const EVENT_UPDATE = 60; // public const EVENT_LINK = 61; // Used to link together multiple events as a chain of events. @@ -92,10 +92,10 @@ class SmartEvent public const EVENT_SCENE_CANCEL = 80; // [RESERVED] don't use on 3.3.5a public const EVENT_SCENE_COMPLETE = 81; // [RESERVED] don't use on 3.3.5a public const EVENT_SUMMONED_UNIT_DIES = 82; // - public const EVENT_ON_SPELL_CAST = 83; // On Spell::cast - public const EVENT_ON_SPELL_FAILED = 84; // On Unit::InterruptSpell - public const EVENT_ON_SPELL_START = 85; // On Spell::prapare - public const EVENT_ON_DESPAWN = 86; // On before creature removed + public const EVENT_ON_SPELL_CAST = 83; // On Spell::cast - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const EVENT_ON_SPELL_FAILED = 84; // On Unit::InterruptSpell - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const EVENT_ON_SPELL_START = 85; // On Spell::prepare - Un-used TrinityCore, doesn't exist or works different in AzerothCore + public const EVENT_ON_DESPAWN = 86; // On before creature removed - Un-used TrinityCore, doesn't exist or works different in AzerothCore public const EVENT_NEAR_PLAYERS = 101; // min, radius, first timer, repeatMin, repeatMax public const EVENT_NEAR_PLAYERS_NEGATION = 102; // max, radius, first timer, repeatMin, repeatMax @@ -104,8 +104,8 @@ class SmartEvent public const EVENT_AREA_CASTING = 105; // min, max, repeatMin, repeatMax, rangeMin, rangeMax public const EVENT_AREA_RANGE = 106; // min, max, repeatMin, repeatMax, rangeMin, rangeMax public const EVENT_SUMMONED_UNIT_EVADE = 107; // CreatureId(0 all), CooldownMin, CooldownMax - public const EVENT_AC_WAYPOINT_REACHED = 108; // PointId (0: any), pathId (0: any) - public const EVENT_AC_WAYPOINT_ENDED = 109; // PointId (0: any), pathId (0: any) + public const EVENT_WAYPOINT_REACHED = 108; // PointId (0: any), pathId (0: any) + public const EVENT_WAYPOINT_ENDED = 109; // PointId (0: any), pathId (0: any) public const EVENT_IS_IN_MELEE_RANGE = 110; // min, max, repeatMin, repeatMax, dist, invert (0: false, 1: true) public const FLAG_NO_REPEAT = 0x0001; @@ -133,13 +133,13 @@ class SmartEvent self::EVENT_RANGE => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // MinDist, MaxDist, RepeatMin, RepeatMax self::EVENT_OOC_LOS => [['hostilityMode', 10, false], null, ['numRange', -1, true], null, null, 0], // hostilityModes, MaxRange, CooldownMin, CooldownMax self::EVENT_RESPAWN => [null, null, Type::ZONE, null, null, 0], // type, MapId, ZoneId - self::EVENT_TARGET_HEALTH_PCT => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 1], // UNUSED, DO NOT REUSE + self::EVENT_TARGET_HEALTH_PCT => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::EVENT_VICTIM_CASTING => [['numRange', -1, true], null, Type::SPELL, null, null, 0], // RepeatMin, RepeatMax, spellid - self::EVENT_FRIENDLY_HEALTH => [null, null, ['numRange', -1, true], null, null, 1], // UNUSED, DO NOT REUSE + self::EVENT_FRIENDLY_HEALTH => [null, null, ['numRange', -1, true], null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::EVENT_FRIENDLY_IS_CC => [null, ['numRange', -1, true], null, null, null, 0], // Radius, RepeatMin, RepeatMax self::EVENT_FRIENDLY_MISSING_BUFF => [Type::SPELL, null, ['numRange', -1, true], null, null, 0], // SpellId, Radius, RepeatMin, RepeatMax self::EVENT_SUMMONED_UNIT => [Type::NPC, ['numRange', -1, true], null, null, null, 0], // CreatureId(0 all), CooldownMin, CooldownMax - self::EVENT_TARGET_MANA_PCT => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 1], // UNUSED, DO NOT REUSE + self::EVENT_TARGET_MANA_PCT => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::EVENT_ACCEPTED_QUEST => [Type::QUEST, ['numRange', -1, true], null, null, null, 0], // QuestID (0 = any), CooldownMin, CooldownMax self::EVENT_REWARD_QUEST => [Type::QUEST, ['numRange', -1, true], null, null, null, 0], // QuestID (0 = any), CooldownMin, CooldownMax self::EVENT_REACHED_HOME => [null, null, null, null, null, 0], // NONE @@ -151,7 +151,7 @@ class SmartEvent self::EVENT_PASSENGER_BOARDED => [['numRange', -1, true], null, null, null, null, 0], // CooldownMin, CooldownMax self::EVENT_PASSENGER_REMOVED => [['numRange', -1, true], null, null, null, null, 0], // CooldownMin, CooldownMax self::EVENT_CHARMED => [null, null, null, null, null, 0], // onRemove (0 - on apply, 1 - on remove) - self::EVENT_CHARMED_TARGET => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::EVENT_CHARMED_TARGET => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::EVENT_SPELLHIT_TARGET => [Type::SPELL, ['magicSchool', 10, false], ['numRange', -1, true], null, null, 0], // SpellID, School, CooldownMin, CooldownMax self::EVENT_DAMAGED => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // MinDmg, MaxDmg, CooldownMin, CooldownMax self::EVENT_DAMAGED_TARGET => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // MinDmg, MaxDmg, CooldownMin, CooldownMax @@ -160,8 +160,8 @@ class SmartEvent self::EVENT_CORPSE_REMOVED => [null, null, null, null, null, 0], // NONE self::EVENT_AI_INIT => [null, null, null, null, null, 0], // NONE self::EVENT_DATA_SET => [null, null, ['numRange', -1, true], null, null, 0], // Id, Value, CooldownMin, CooldownMax - self::EVENT_WAYPOINT_START => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::EVENT_WAYPOINT_REACHED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) + self::EVENT_ESCORT_START => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::EVENT_ESCORT_REACHED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) self::EVENT_TRANSPORT_ADDPLAYER => [null, null, null, null, null, 2], // NONE self::EVENT_TRANSPORT_ADDCREATURE => [null, null, null, null, null, 2], // Entry (0 any) self::EVENT_TRANSPORT_REMOVE_PLAYER => [null, null, null, null, null, 2], // NONE @@ -176,10 +176,10 @@ class SmartEvent self::EVENT_TEXT_OVER => [null, Type::NPC, null, null, null, 0], // GroupId from creature_text, creature entry who talks (0 any) self::EVENT_RECEIVE_HEAL => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // MinHeal, MaxHeal, CooldownMin, CooldownMax self::EVENT_JUST_SUMMONED => [null, null, null, null, null, 0], // none - self::EVENT_WAYPOINT_PAUSED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) - self::EVENT_WAYPOINT_RESUMED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) - self::EVENT_WAYPOINT_STOPPED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) - self::EVENT_WAYPOINT_ENDED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) + self::EVENT_ESCORT_PAUSED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) + self::EVENT_ESCORT_RESUMED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) + self::EVENT_ESCORT_STOPPED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) + self::EVENT_ESCORT_ENDED => [null, null, null, null, null, 0], // PointId(0any), pathID(0any) self::EVENT_TIMED_EVENT_TRIGGERED => [null, null, null, null, null, 0], // id self::EVENT_UPDATE => [['numRange', 10, true], null, ['numRange', -1, true], null, null, 0], // InitialMin, InitialMax, RepeatMin, RepeatMax self::EVENT_LINK => [null, null, null, null, null, 0], // INTERNAL USAGE, no params, used to link together multiple events, does not use any extra resources to iterate event lists needlessly @@ -187,8 +187,8 @@ class SmartEvent self::EVENT_JUST_CREATED => [null, null, null, null, null, 0], // none self::EVENT_GOSSIP_HELLO => [null, null, null, null, null, 0], // noReportUse (for GOs) self::EVENT_FOLLOW_COMPLETED => [null, null, null, null, null, 0], // none - self::EVENT_EVENT_PHASE_CHANGE => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - self::EVENT_IS_BEHIND_TARGET => [['numRange', -1, true], null, null, null, null, 1], // UNUSED, DO NOT REUSE + self::EVENT_EVENT_PHASE_CHANGE => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::EVENT_IS_BEHIND_TARGET => [['numRange', -1, true], null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::EVENT_GAME_EVENT_START => [Type::WORLDEVENT, null, null, null, null, 0], // game_event.Entry self::EVENT_GAME_EVENT_END => [Type::WORLDEVENT, null, null, null, null, 0], // game_event.Entry self::EVENT_GO_LOOT_STATE_CHANGED => [['lootState', 10, false], null, null, null, null, 0], // go LootState @@ -204,10 +204,10 @@ class SmartEvent self::EVENT_SCENE_CANCEL => [null, null, null, null, null, 2], // don't use on 3.3.5a self::EVENT_SCENE_COMPLETE => [null, null, null, null, null, 2], // don't use on 3.3.5a self::EVENT_SUMMONED_UNIT_DIES => [Type::NPC, ['numRange', -1, true], null, null, null, 0], // CreatureId(0 all), CooldownMin, CooldownMax - self::EVENT_ON_SPELL_CAST => [Type::SPELL, ['numRange', -1, true], null, null, null, 0], // SpellID, CooldownMin, CooldownMax - self::EVENT_ON_SPELL_FAILED => [Type::SPELL, ['numRange', -1, true], null, null, null, 0], // SpellID, CooldownMin, CooldownMax - self::EVENT_ON_SPELL_START => [Type::SPELL, ['numRange', -1, true], null, null, null, 0], // SpellID, CooldownMin, CooldownMax - self::EVENT_ON_DESPAWN => [null, null, null, null, null, 0], // NONE + self::EVENT_ON_SPELL_CAST => [Type::SPELL, ['numRange', -1, true], null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::EVENT_ON_SPELL_FAILED => [Type::SPELL, ['numRange', -1, true], null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::EVENT_ON_SPELL_START => [Type::SPELL, ['numRange', -1, true], null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore + self::EVENT_ON_DESPAWN => [null, null, null, null, null, 1], // UNUSED, DO NOT REUSE - Un-used TrinityCore, doesn't exist or works different in AzerothCore self::EVENT_NEAR_PLAYERS => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, radius, firstTimer, repeatMin, repeatMax self::EVENT_NEAR_PLAYERS_NEGATION => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // max, radius, firstTimer, repeatMin, repeatMax @@ -216,8 +216,8 @@ class SmartEvent self::EVENT_AREA_CASTING => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, max, repeatMin, repeatMax, rangeMin, rangeMax self::EVENT_AREA_RANGE => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, max, repeatMin, repeatMax, rangeMin, rangeMax self::EVENT_SUMMONED_UNIT_EVADE => [Type::NPC, ['numRange', -1, true], null, null, null, 0], // CreatureId(0 all), CooldownMin, CooldownMax - self::EVENT_AC_WAYPOINT_REACHED => [null, null, null, null, null, 0], // PointId(0 any), pathId(0 any) - self::EVENT_AC_WAYPOINT_ENDED => [null, null, null, null, null, 0], // PointId(0 any), pathId(0 any) + self::EVENT_WAYPOINT_REACHED => [null, null, null, null, null, 0], // PointId(0 any), pathId(0 any) + self::EVENT_WAYPOINT_ENDED => [null, null, null, null, null, 0], // PointId(0 any), pathId(0 any) self::EVENT_IS_IN_MELEE_RANGE => [['numRange', 10, false], null, ['numRange', -1, true], null, null, 0], // min, max, repeatMin, repeatMax, dist, invert ); diff --git a/includes/components/SmartAI/SmartTarget.class.php b/includes/components/SmartAI/SmartTarget.class.php index 9cf44af9..45587834 100644 --- a/includes/components/SmartAI/SmartTarget.class.php +++ b/includes/components/SmartAI/SmartTarget.class.php @@ -39,7 +39,7 @@ class SmartTarget public const TARGET_LOOT_RECIPIENTS = 27; // All tagging players public const TARGET_FARTHEST = 28; // Farthest unit on the threat list public const TARGET_VEHICLE_PASSENGER = 29; // Vehicle can target unit in given seat - public const TARGET_CLOSEST_UNSPAWNED_GO = 30; // entry(0any), maxDist + public const TARGET_CLOSEST_UNSPAWNED_GO = 30; // entry(0any), maxDist - Un-used TrinityCore, doesn't exist or works different in AzerothCore public const TARGET_PLAYER_WITH_AURA = 201; // spellId, negation, MaxDist, MinDist public const TARGET_RANDOM_POINT = 202; // range, amount, self as middle (0/1) diff --git a/localization/locale_enus.php b/localization/locale_enus.php index b7d870c3..0cdca7d0 100644 --- a/localization/locale_enus.php +++ b/localization/locale_enus.php @@ -586,8 +586,8 @@ SmartEvent::EVENT_CORPSE_REMOVED => ['On corpse despawn', ''], SmartEvent::EVENT_AI_INIT => ['AI initialized', ''], SmartEvent::EVENT_DATA_SET => ['Data field #[b]%1$d[/b] is set to [b]%2$d[/b]', 'Cooldown: %s'], - SmartEvent::EVENT_WAYPOINT_START => ['Start pathing from (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], -/* 40*/ SmartEvent::EVENT_WAYPOINT_REACHED => ['Reaching (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_ESCORT_START => ['Start escort path from (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], +/* 40*/ SmartEvent::EVENT_ESCORT_REACHED => ['Reaching (%1$d)?escort waypoint #[b]%1$d[/b]:any escort waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], SmartEvent::EVENT_TRANSPORT_ADDPLAYER => null, SmartEvent::EVENT_TRANSPORT_ADDCREATURE => null, SmartEvent::EVENT_TRANSPORT_REMOVE_PLAYER => null, @@ -602,10 +602,10 @@ SmartEvent::EVENT_TEXT_OVER => ['(%2$d)?[npc=%2$d]:any creature; is done talking TextGroup #[b]%1$d[/b]', ''], SmartEvent::EVENT_RECEIVE_HEAL => ['Received %11$s points of healing', 'Cooldown: %s'], SmartEvent::EVENT_JUST_SUMMONED => ['On being summoned', ''], - SmartEvent::EVENT_WAYPOINT_PAUSED => ['Pausing path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], - SmartEvent::EVENT_WAYPOINT_RESUMED => ['Resuming path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], - SmartEvent::EVENT_WAYPOINT_STOPPED => ['Stopping path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], - SmartEvent::EVENT_WAYPOINT_ENDED => ['Ending current path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_ESCORT_PAUSED => ['Pausing escort path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_ESCORT_RESUMED => ['Resuming escort path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_ESCORT_STOPPED => ['Stopping escort path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_ESCORT_ENDED => ['Ending escort path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], SmartEvent::EVENT_TIMED_EVENT_TRIGGERED => ['Timed event #[b]%1$d[/b] is triggered', ''], /* 60*/ SmartEvent::EVENT_UPDATE => ['(%11$s)?After %11$s:Instantly;', 'Repeat every %s'], SmartEvent::EVENT_LINK => ['After Event %11$s', ''], @@ -642,8 +642,8 @@ /*105*/ SmartEvent::EVENT_AREA_CASTING => ['When %11$s targets in area are casting', 'Repeat every %s'], SmartEvent::EVENT_AREA_RANGE => ['When %11$s targets are in area', 'Repeat every %s'], SmartEvent::EVENT_SUMMONED_UNIT_EVADE => ['My summoned (%1$d)?[npc=%1$d]:NPC; evaded', 'Cooldown: %s'], - SmartEvent::EVENT_AC_WAYPOINT_REACHED => ['Reaching (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], - SmartEvent::EVENT_AC_WAYPOINT_ENDED => ['Ending path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? at path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_WAYPOINT_REACHED => ['Reaching (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? on path #[b]%2$d[/b]:;', ''], + SmartEvent::EVENT_WAYPOINT_ENDED => ['Ending path on (%1$d)?waypoint #[b]%1$d[/b]:any waypoint;(%2$d)? at path #[b]%2$d[/b]:;', ''], /*110*/ SmartEvent::EVENT_IS_IN_MELEE_RANGE => ['(%6$d)?Not in:In; melee range', 'Repeat every %s'], ), 'eventFlags' => array(