aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGiacomo Pozzoni <giacomopoz@gmail.com>2021-06-25 20:44:28 +0200
committerGitHub <noreply@github.com>2021-06-25 20:44:28 +0200
commit84c8d21ad38ade64444e2394f090b49d2ffb5c51 (patch)
tree9758f0ae2cf415fae3f0918323a0909c271ea80a /src
parentc08f086a02729f3b7e4c99f4741063e45301ebf8 (diff)
Core/SAI: Add a warning when a boolean value is outside of [0,1] range (#26608)
* Core/SAI: Add a warning when a boolean value is outside of [0,1] range * Replace boolean fields in SAI with SAIBool (from uint32)
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp10
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp188
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h88
3 files changed, 208 insertions, 78 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index 98ada247fb0..905b5aafa3f 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -1530,19 +1530,19 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
if (!target)
{
G3D::Vector3 dest(e.target.x, e.target.y, e.target.z);
- if (e.action.MoveToPos.transport)
+ if (e.action.moveToPos.transport)
if (TransportBase* trans = me->GetDirectTransport())
trans->CalculatePassengerPosition(dest.x, dest.y, dest.z);
- me->GetMotionMaster()->MovePoint(e.action.MoveToPos.pointId, dest.x, dest.y, dest.z, e.action.MoveToPos.disablePathfinding == 0);
+ me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, dest.x, dest.y, dest.z, e.action.moveToPos.disablePathfinding == 0);
}
else
{
float x, y, z;
target->GetPosition(x, y, z);
- if (e.action.MoveToPos.ContactDistance > 0)
- target->GetContactPoint(me, x, y, z, e.action.MoveToPos.ContactDistance);
- me->GetMotionMaster()->MovePoint(e.action.MoveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, e.action.MoveToPos.disablePathfinding == 0);
+ if (e.action.moveToPos.ContactDistance > 0)
+ target->GetContactPoint(me, x, y, z, e.action.moveToPos.ContactDistance);
+ me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, e.action.moveToPos.disablePathfinding == 0);
}
break;
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 394e0a56798..8c141c80504 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -32,6 +32,16 @@
#include "Unit.h"
#include "WaypointDefines.h"
+#define TC_SAI_IS_BOOLEAN_VALID(e, value) \
+{ \
+ if (value > 1) \
+ { \
+ TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses param %s of type Boolean with value %u, valid values are 0 or 1, skipped.", \
+ e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), STRINGIZE(value), value); \
+ return false; \
+ } \
+}
+
SmartWaypointMgr* SmartWaypointMgr::instance()
{
static SmartWaypointMgr instance;
@@ -532,24 +542,37 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e)
return false;
}
break;
- case SMART_TARGET_PLAYER_RANGE:
- case SMART_TARGET_SELF:
- case SMART_TARGET_VICTIM:
case SMART_TARGET_HOSTILE_SECOND_AGGRO:
case SMART_TARGET_HOSTILE_LAST_AGGRO:
case SMART_TARGET_HOSTILE_RANDOM:
case SMART_TARGET_HOSTILE_RANDOM_NOT_TOP:
- case SMART_TARGET_POSITION:
- case SMART_TARGET_NONE:
- case SMART_TARGET_OWNER_OR_SUMMONER:
- case SMART_TARGET_THREAT_LIST:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.hostilRandom.playerOnly);
+ break;
+ case SMART_TARGET_FARTHEST:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.farthest.playerOnly);
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.farthest.isInLos);
+ break;
case SMART_TARGET_CLOSEST_GAMEOBJECT:
case SMART_TARGET_CLOSEST_CREATURE:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.closest.dead);
+ break;
case SMART_TARGET_CLOSEST_ENEMY:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.closestAttackable.playerOnly);
+ break;
case SMART_TARGET_CLOSEST_FRIENDLY:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.closestFriendly.playerOnly);
+ break;
+ case SMART_TARGET_OWNER_OR_SUMMONER:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.target.owner.useCharmerOrOwner);
+ break;
+ case SMART_TARGET_PLAYER_RANGE:
+ case SMART_TARGET_SELF:
+ case SMART_TARGET_VICTIM:
+ case SMART_TARGET_POSITION:
+ case SMART_TARGET_NONE:
+ case SMART_TARGET_THREAT_LIST:
case SMART_TARGET_STORED:
case SMART_TARGET_LOOT_RECIPIENTS:
- case SMART_TARGET_FARTHEST:
case SMART_TARGET_VEHICLE_PASSENGER:
case SMART_TARGET_CLOSEST_UNSPAWNED_GAMEOBJECT:
break;
@@ -768,6 +791,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.event.los.hostilityMode, AsUnderlyingType(SmartEvent::LOSHostilityMode::End) - 1);
return false;
}
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.event.los.playerOnly);
break;
case SMART_EVENT_RESPAWN:
if (e.event.respawn.type == SMART_SCRIPT_RESPAWN_CONDITION_MAP && !sMapStore.LookupEntry(e.event.respawn.map))
@@ -810,6 +835,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (e.event.kill.creature && !IsCreatureValid(e, e.event.kill.creature))
return false;
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.event.kill.playerOnly);
break;
case SMART_EVENT_VICTIM_CASTING:
if (e.event.targetCasting.spellId > 0 && !sSpellMgr->GetSpellInfo(e.event.targetCasting.spellId))
@@ -1040,13 +1067,15 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
break;
+ case SMART_EVENT_CHARMED:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.event.charm.onRemove);
+ break;
case SMART_EVENT_LINK:
case SMART_EVENT_GO_LOOT_STATE_CHANGED:
case SMART_EVENT_GO_EVENT_INFORM:
case SMART_EVENT_TIMED_EVENT_TRIGGERED:
case SMART_EVENT_INSTANCE_PLAYER_ENTER:
case SMART_EVENT_TRANSPORT_RELOCATE:
- case SMART_EVENT_CHARMED:
case SMART_EVENT_CHARMED_TARGET:
case SMART_EVENT_CORPSE_REMOVED:
case SMART_EVENT_AI_INIT:
@@ -1083,6 +1112,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
switch (e.GetActionType())
{
case SMART_ACTION_TALK:
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.talk.useTalkTarget);
+ [[fallthrough]];
case SMART_ACTION_SIMPLE_TALK:
if (!IsTextValid(e, e.action.talk.textGroupID))
return false;
@@ -1122,15 +1153,21 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SOUND:
if (!IsSoundValid(e, e.action.sound.sound))
return false;
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.sound.onlySelf);
break;
case SMART_ACTION_SET_EMOTE_STATE:
case SMART_ACTION_PLAY_EMOTE:
if (!IsEmoteValid(e, e.action.emote.emote))
return false;
break;
- case SMART_ACTION_FAIL_QUEST:
case SMART_ACTION_OFFER_QUEST:
- if (!e.action.quest.quest || !IsQuestValid(e, e.action.quest.quest))
+ if (!IsQuestValid(e, e.action.questOffer.questID))
+ return false;
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.questOffer.directAdd);
+ break;
+ case SMART_ACTION_FAIL_QUEST:
+ if (!IsQuestValid(e, e.action.quest.quest))
return false;
break;
case SMART_ACTION_ACTIVATE_TAXI:
@@ -1189,6 +1226,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
if (sound && !IsSoundValid(e, sound))
return false;
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.randomSound.onlySelf);
break;
}
case SMART_ACTION_CAST:
@@ -1263,6 +1301,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_REMOVEAURASFROMSPELL:
if (e.action.removeAura.spell != 0 && !IsSpellValid(e, e.action.removeAura.spell))
return false;
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.removeAura.onlyOwnedAuras);
break;
case SMART_ACTION_RANDOM_PHASE:
{
@@ -1308,6 +1348,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses incorrect TempSummonType %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.summonCreature.type);
return false;
}
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.summonCreature.attackInvoker);
break;
}
case SMART_ACTION_CALL_KILLEDMONSTER:
@@ -1330,6 +1372,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_UPDATE_TEMPLATE:
if (!IsCreatureValid(e, e.action.updateTemplate.creature))
return false;
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.updateTemplate.updateLevel);
break;
case SMART_ACTION_SET_SHEATH:
if (e.action.setSheath.sheath && e.action.setSheath.sheath >= MAX_SHEATH_STATE)
@@ -1396,6 +1440,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_WP_STOP:
if (e.action.wpStop.quest && !IsQuestValid(e, e.action.wpStop.quest))
return false;
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.wpStop.fail);
break;
case SMART_ACTION_WP_START:
{
@@ -1412,6 +1457,9 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Creature %d Event %u Action %u uses invalid React State %u, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.wpStart.reactState);
return false;
}
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.wpStart.run);
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.wpStart.repeat);
break;
}
case SMART_ACTION_CREATE_TIMED_EVENT:
@@ -1538,6 +1586,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
TC_LOG_ERROR("sql.sql", "Entry %u SourceType %u Event %u Action %u does not specify pause duration", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
return false;
}
+
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.pauseMovement.force);
break;
case SMART_ACTION_SET_MOVEMENT_SPEED:
{
@@ -1611,15 +1661,109 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
}
break;
}
+ case SMART_ACTION_AUTO_ATTACK:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.autoAttack.attack);
+ break;
+ }
+ case SMART_ACTION_ALLOW_COMBAT_MOVEMENT:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.combatMove.move);
+ break;
+ }
+ case SMART_ACTION_CALL_FOR_HELP:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.callHelp.withEmote);
+ break;
+ }
+ case SMART_ACTION_SET_VISIBILITY:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.visibility.state);
+ break;
+ }
+ case SMART_ACTION_SET_ACTIVE:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.active.state);
+ break;
+ }
+ case SMART_ACTION_SET_RUN:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setRun.run);
+ break;
+ }
+ case SMART_ACTION_SET_DISABLE_GRAVITY:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setDisableGravity.disable);
+ break;
+ }
+ case SMART_ACTION_SET_CAN_FLY:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setFly.fly);
+ break;
+ }
+ case SMART_ACTION_SET_SWIM:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setSwim.swim);
+ break;
+ }
+ case SMART_ACTION_SET_COUNTER:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setCounter.reset);
+ break;
+ }
+ case SMART_ACTION_CALL_TIMED_ACTIONLIST:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.timedActionList.allowOverride);
+ break;
+ }
+ case SMART_ACTION_INTERRUPT_SPELL:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.interruptSpellCasting.withDelayed);
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.interruptSpellCasting.withInstant);
+ break;
+ }
+ case SMART_ACTION_FLEE_FOR_ASSIST:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.fleeAssist.withEmote);
+ break;
+ }
+ case SMART_ACTION_MOVE_TO_POS:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.moveToPos.transport);
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.moveToPos.disablePathfinding);
+ break;
+ }
+ case SMART_ACTION_SET_ROOT:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setRoot.root);
+ break;
+ }
+ case SMART_ACTION_DISABLE_EVADE:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.disableEvade.disable);
+ break;
+ }
+ case SMART_ACTION_LOAD_EQUIPMENT:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.loadEquipment.force);
+ break;
+ }
+ case SMART_ACTION_SET_HOVER:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setHover.enable);
+ break;
+ }
+ case SMART_ACTION_EVADE:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.evade.toRespawnPosition);
+ break;
+ }
case SMART_ACTION_FOLLOW:
case SMART_ACTION_SET_ORIENTATION:
case SMART_ACTION_STORE_TARGET_LIST:
- case SMART_ACTION_EVADE:
- case SMART_ACTION_FLEE_FOR_ASSIST:
case SMART_ACTION_COMBAT_STOP:
case SMART_ACTION_DIE:
case SMART_ACTION_SET_IN_COMBAT_WITH_ZONE:
- case SMART_ACTION_SET_ACTIVE:
case SMART_ACTION_WP_RESUME:
case SMART_ACTION_KILL_UNIT:
case SMART_ACTION_SET_INVINCIBILITY_HP_LEVEL:
@@ -1628,23 +1772,14 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_THREAT_ALL_PCT:
case SMART_ACTION_THREAT_SINGLE_PCT:
case SMART_ACTION_SET_INST_DATA64:
- case SMART_ACTION_AUTO_ATTACK:
- case SMART_ACTION_ALLOW_COMBAT_MOVEMENT:
- case SMART_ACTION_CALL_FOR_HELP:
case SMART_ACTION_SET_DATA:
case SMART_ACTION_ATTACK_STOP:
- case SMART_ACTION_SET_VISIBILITY:
case SMART_ACTION_WP_PAUSE:
- case SMART_ACTION_SET_DISABLE_GRAVITY:
- case SMART_ACTION_SET_CAN_FLY:
- case SMART_ACTION_SET_RUN:
- case SMART_ACTION_SET_SWIM:
case SMART_ACTION_FORCE_DESPAWN:
case SMART_ACTION_SET_INGAME_PHASE_MASK:
case SMART_ACTION_SET_UNIT_FLAG:
case SMART_ACTION_REMOVE_UNIT_FLAG:
case SMART_ACTION_PLAYMOVIE:
- case SMART_ACTION_MOVE_TO_POS:
case SMART_ACTION_CLOSE_GOSSIP:
case SMART_ACTION_TRIGGER_TIMED_EVENT:
case SMART_ACTION_REMOVE_TIMED_EVENT:
@@ -1653,14 +1788,12 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_ACTIVATE_GOBJECT:
case SMART_ACTION_CALL_SCRIPT_RESET:
case SMART_ACTION_SET_RANGED_MOVEMENT:
- case SMART_ACTION_CALL_TIMED_ACTIONLIST:
case SMART_ACTION_SET_NPC_FLAG:
case SMART_ACTION_ADD_NPC_FLAG:
case SMART_ACTION_REMOVE_NPC_FLAG:
case SMART_ACTION_RANDOM_MOVE:
case SMART_ACTION_SET_UNIT_FIELD_BYTES_1:
case SMART_ACTION_REMOVE_UNIT_FIELD_BYTES_1:
- case SMART_ACTION_INTERRUPT_SPELL:
case SMART_ACTION_SEND_GO_CUSTOM_ANIM:
case SMART_ACTION_SET_DYNAMIC_FLAG:
case SMART_ACTION_ADD_DYNAMIC_FLAG:
@@ -1672,25 +1805,20 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_ACTION_SEND_TARGET_TO_TARGET:
case SMART_ACTION_SET_HOME_POS:
case SMART_ACTION_SET_HEALTH_REGEN:
- case SMART_ACTION_SET_ROOT:
case SMART_ACTION_SET_GO_FLAG:
case SMART_ACTION_ADD_GO_FLAG:
case SMART_ACTION_REMOVE_GO_FLAG:
case SMART_ACTION_SUMMON_CREATURE_GROUP:
case SMART_ACTION_MOVE_OFFSET:
case SMART_ACTION_SET_CORPSE_DELAY:
- case SMART_ACTION_DISABLE_EVADE:
case SMART_ACTION_SET_SIGHT_DIST:
case SMART_ACTION_FLEE:
case SMART_ACTION_ADD_THREAT:
- case SMART_ACTION_LOAD_EQUIPMENT:
case SMART_ACTION_TRIGGER_RANDOM_TIMED_EVENT:
- case SMART_ACTION_SET_COUNTER:
case SMART_ACTION_REMOVE_ALL_GAMEOBJECTS:
case SMART_ACTION_SPAWN_SPAWNGROUP:
case SMART_ACTION_DESPAWN_SPAWNGROUP:
case SMART_ACTION_PLAY_CINEMATIC:
- case SMART_ACTION_SET_HOVER:
break;
default:
TC_LOG_ERROR("sql.sql", "SmartAIMgr: Not handled action_type(%u), event_type(%u), Entry %d SourceType %u Event %u, skipped.", e.GetActionType(), e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index 284dbbff321..42c9f2e811a 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -28,6 +28,7 @@
class WorldObject;
enum SpellEffIndex : uint8;
+typedef uint32 SAIBool;
enum eSmartAI
{
@@ -204,7 +205,7 @@ struct SmartEvent
{
uint32 cooldownMin;
uint32 cooldownMax;
- uint32 playerOnly;
+ SAIBool playerOnly;
uint32 creature;
} kill;
@@ -225,7 +226,7 @@ struct SmartEvent
uint32 maxDist;
uint32 cooldownMin;
uint32 cooldownMax;
- uint32 playerOnly;
+ SAIBool playerOnly;
} los;
struct
@@ -302,7 +303,7 @@ struct SmartEvent
struct
{
- uint32 onRemove;
+ SAIBool onRemove;
} charm;
struct
@@ -637,7 +638,7 @@ struct SmartAction
{
uint32 textGroupID;
uint32 duration;
- uint32 useTalkTarget;
+ SAIBool useTalkTarget;
} talk;
struct
@@ -654,7 +655,7 @@ struct SmartAction
struct
{
uint32 sound;
- uint32 onlySelf;
+ SAIBool onlySelf;
uint32 distance;
uint32 keyBroadcastTextId; // UNUSED: param reserved for compatibility with master branch
} sound;
@@ -672,7 +673,7 @@ struct SmartAction
struct
{
uint32 questID;
- uint32 directAdd;
+ SAIBool directAdd;
} questOffer;
struct
@@ -708,7 +709,7 @@ struct SmartAction
uint32 creature;
uint32 type;
uint32 duration;
- uint32 attackInvoker;
+ SAIBool attackInvoker;
uint32 flags; // SmartActionSummonCreatureFlags
uint32 count;
} summonCreature;
@@ -741,12 +742,12 @@ struct SmartAction
struct
{
- uint32 attack;
+ SAIBool attack;
} autoAttack;
struct
{
- uint32 move;
+ SAIBool move;
} combatMove;
struct
@@ -764,7 +765,7 @@ struct SmartAction
{
uint32 spell;
uint32 charges;
- uint32 onlyOwnedAuras;
+ SAIBool onlyOwnedAuras;
} removeAura;
struct
@@ -807,13 +808,13 @@ struct SmartAction
struct
{
uint32 creature;
- uint32 updateLevel;
+ SAIBool updateLevel;
} updateTemplate;
struct
{
uint32 range;
- uint32 withEmote;
+ SAIBool withEmote;
} callHelp;
struct
@@ -851,7 +852,7 @@ struct SmartAction
struct
{
- uint32 state;
+ SAIBool state;
} visibility;
struct
@@ -863,7 +864,7 @@ struct SmartAction
struct
{
- uint32 state;
+ SAIBool state;
} active;
struct
@@ -873,9 +874,9 @@ struct SmartAction
struct
{
- uint32 run;
+ SAIBool run;
uint32 pathID;
- uint32 repeat;
+ SAIBool repeat;
uint32 quest;
uint32 despawnTime;
uint32 reactState;
@@ -890,7 +891,7 @@ struct SmartAction
{
uint32 despawnTime;
uint32 quest;
- uint32 fail;
+ SAIBool fail;
} wpStop;
struct
@@ -911,22 +912,22 @@ struct SmartAction
struct
{
- uint32 run;
+ SAIBool run;
} setRun;
struct
{
- uint32 disable;
+ SAIBool disable;
} setDisableGravity;
struct
{
- uint32 fly;
+ SAIBool fly;
} setFly;
struct
{
- uint32 swim;
+ SAIBool swim;
} setSwim;
struct
@@ -938,7 +939,7 @@ struct SmartAction
{
uint32 counterId;
uint32 value;
- uint32 reset;
+ SAIBool reset;
} setCounter;
struct
@@ -1003,7 +1004,7 @@ struct SmartAction
{
uint32 id;
uint32 timerType;
- uint32 allowOverride;
+ SAIBool allowOverride;
} timedActionList;
struct
@@ -1013,9 +1014,9 @@ struct SmartAction
struct
{
- uint32 withDelayed;
+ SAIBool withDelayed;
uint32 spell_id;
- uint32 withInstant;
+ SAIBool withInstant;
} interruptSpellCasting;
struct
@@ -1031,7 +1032,7 @@ struct SmartAction
struct
{
- uint32 withEmote;
+ SAIBool withEmote;
} fleeAssist;
struct
@@ -1047,10 +1048,10 @@ struct SmartAction
struct
{
uint32 pointId;
- uint32 transport;
- uint32 disablePathfinding;
+ SAIBool transport;
+ SAIBool disablePathfinding;
uint32 ContactDistance;
- } MoveToPos;
+ } moveToPos;
struct
{
@@ -1081,7 +1082,7 @@ struct SmartAction
struct
{
- uint32 root;
+ SAIBool root;
} setRoot;
struct
@@ -1124,7 +1125,7 @@ struct SmartAction
struct
{
uint32 sounds[SMART_ACTION_PARAM_COUNT - 2];
- uint32 onlySelf;
+ SAIBool onlySelf;
uint32 distance;
} randomSound;
@@ -1136,8 +1137,9 @@ struct SmartAction
struct
{
- uint32 disable;
+ SAIBool disable;
} disableEvade;
+
struct
{
uint32 groupId;
@@ -1159,7 +1161,7 @@ struct SmartAction
struct
{
uint32 id;
- uint32 force;
+ SAIBool force;
} loadEquipment;
struct
@@ -1172,7 +1174,7 @@ struct SmartAction
{
uint32 movementSlot;
uint32 pauseTimer;
- uint32 force;
+ SAIBool force;
} pauseMovement;
struct
@@ -1210,12 +1212,12 @@ struct SmartAction
struct
{
- uint32 enable;
+ SAIBool enable;
} setHover;
struct
{
- uint32 toRespawnPosition;
+ SAIBool toRespawnPosition;
} evade;
struct
@@ -1315,15 +1317,15 @@ struct SmartTarget
struct
{
uint32 maxDist;
- uint32 playerOnly;
+ SAIBool playerOnly;
uint32 powerType;
} hostilRandom;
struct
{
uint32 maxDist;
- uint32 playerOnly;
- uint32 isInLos;
+ SAIBool playerOnly;
+ SAIBool isInLos;
} farthest;
struct
@@ -1393,24 +1395,24 @@ struct SmartTarget
{
uint32 entry;
uint32 dist;
- uint32 dead;
+ SAIBool dead;
} closest;
struct
{
uint32 maxDist;
- uint32 playerOnly;
+ SAIBool playerOnly;
} closestAttackable;
struct
{
uint32 maxDist;
- uint32 playerOnly;
+ SAIBool playerOnly;
} closestFriendly;
struct
{
- uint32 useCharmerOrOwner;
+ SAIBool useCharmerOrOwner;
} owner;
struct