aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp42
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp37
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h15
3 files changed, 91 insertions, 3 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp
index a5a647aabd3..ba66f80beb5 100644
--- a/src/server/game/AI/SmartScripts/SmartScript.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScript.cpp
@@ -2505,6 +2505,48 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u
targetUnit->SetHealth(targetUnit->CountPctFromMaxHealth(e.action.setHealthPct.percent));
break;
}
+ case SMART_ACTION_SET_IMMUNE_PC:
+ {
+ for (WorldObject* target : targets)
+ {
+ if (IsUnit(target))
+ {
+ if (e.action.setImmunePC.immunePC)
+ target->ToUnit()->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ else
+ target->ToUnit()->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_PC);
+ }
+ }
+ break;
+ }
+ case SMART_ACTION_SET_IMMUNE_NPC:
+ {
+ for (WorldObject* target : targets)
+ {
+ if (IsUnit(target))
+ {
+ if (e.action.setImmuneNPC.immuneNPC)
+ target->ToUnit()->AddUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
+ else
+ target->ToUnit()->RemoveUnitFlag(UNIT_FLAG_IMMUNE_TO_NPC);
+ }
+ }
+ break;
+ }
+ case SMART_ACTION_SET_UNINTERACTIBLE:
+ {
+ for (WorldObject* target : targets)
+ {
+ if (IsUnit(target))
+ {
+ if (e.action.setUninteractible.uninteractible)
+ target->ToUnit()->AddUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
+ else
+ target->ToUnit()->RemoveUnitFlag(UNIT_FLAG_UNINTERACTIBLE);
+ }
+ }
+ break;
+ }
case SMART_ACTION_CREATE_CONVERSATION:
{
WorldObject* baseObject = GetBaseObject();
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 7200ee1b6b7..531a64c8a08 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -1027,9 +1027,9 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e)
case SMART_ACTION_SET_HOVER: return sizeof(SmartAction::setHover);
case SMART_ACTION_SET_HEALTH_PCT: return sizeof(SmartAction::setHealthPct);
case SMART_ACTION_CREATE_CONVERSATION: return sizeof(SmartAction::conversation);
- //case SMART_ACTION_SET_IMMUNE_PC: return sizeof(SmartAction::raw);
- //case SMART_ACTION_SET_IMMUNE_NPC: return sizeof(SmartAction::raw);
- //case SMART_ACTION_SET_UNINTERACTIBLE: return sizeof(SmartAction::raw);
+ case SMART_ACTION_SET_IMMUNE_PC: return sizeof(SmartAction::setImmunePC);
+ case SMART_ACTION_SET_IMMUNE_NPC: return sizeof(SmartAction::setImmuneNPC);
+ case SMART_ACTION_SET_UNINTERACTIBLE: return sizeof(SmartAction::setUninteractible);
//case SMART_ACTION_ACTIVATE_GAMEOBJECT: return sizeof(SmartAction::raw);
case SMART_ACTION_ADD_TO_STORED_TARGET_LIST: return sizeof(SmartAction::addToStoredTargets);
case SMART_ACTION_BECOME_PERSONAL_CLONE_FOR_PLAYER: return sizeof(SmartAction::becomePersonalClone);
@@ -1555,6 +1555,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
case SMART_EVENT_FRIENDLY_HEALTH:
case SMART_EVENT_TARGET_HEALTH_PCT:
case SMART_EVENT_IS_BEHIND_TARGET:
+ case SMART_EVENT_TARGET_MANA_PCT:
TC_LOG_WARN("sql.sql.deprecation", "SmartAIMgr: Deprecated event_type(%u), Entry " SI64FMTD " SourceType %u Event %u Action %u, it might be removed in the future, loaded for now.", e.GetEventType(), e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType());
break;
default:
@@ -2314,6 +2315,21 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
TC_SAI_IS_BOOLEAN_VALID(e, e.action.setHealthRegen.regenHealth);
break;
}
+ case SMART_ACTION_SET_IMMUNE_PC:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setImmunePC.immunePC);
+ break;
+ }
+ case SMART_ACTION_SET_IMMUNE_NPC:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setImmuneNPC.immuneNPC);
+ break;
+ }
+ case SMART_ACTION_SET_UNINTERACTIBLE:
+ {
+ TC_SAI_IS_BOOLEAN_VALID(e, e.action.setUninteractible.uninteractible);
+ break;
+ }
case SMART_ACTION_CREATE_CONVERSATION:
{
if (!sConversationDataStore->GetConversationTemplate(e.action.conversation.id))
@@ -2402,6 +2418,21 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e)
return false;
}
+ // Additional check for deprecated
+ switch (e.GetActionType())
+ {
+ // Deprecated
+ case SMART_ACTION_SET_UNIT_FLAG:
+ case SMART_ACTION_REMOVE_UNIT_FLAG:
+ case SMART_ACTION_ADD_ITEM:
+ case SMART_ACTION_ADD_DYNAMIC_FLAG:
+ case SMART_ACTION_REMOVE_DYNAMIC_FLAG:
+ TC_LOG_WARN("sql.sql.deprecation", "SmartAIMgr: Deprecated action_type(%u), Entry " SI64FMTD " SourceType %u Event %u, it might be removed in the future, loaded for now.", e.GetActionType(), e.entryOrGuid, e.GetScriptType(), e.event_id);
+ break;
+ default:
+ break;
+ }
+
if (!CheckUnusedActionParams(e))
return false;
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
index f8e4a29635b..bb0578ed39f 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -1236,6 +1236,21 @@ struct SmartAction
struct
{
+ SAIBool immunePC;
+ } setImmunePC;
+
+ struct
+ {
+ SAIBool immuneNPC;
+ } setImmuneNPC;
+
+ struct
+ {
+ SAIBool uninteractible;
+ } setUninteractible;
+
+ struct
+ {
uint32 id;
} conversation;