diff options
| author | offl <11556157+offl@users.noreply.github.com> | 2021-09-27 19:00:55 +0300 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2022-03-18 00:04:03 +0100 |
| commit | e80777cb39d5eb940348300aa2a6d42cede039a8 (patch) | |
| tree | 47af0ff093ecacf4b2e4b4243066cdaa87302348 /src | |
| parent | 5f40959687d78c6389a82c2f864cc8f60378dabb (diff) | |
Core/SAI: Split set/remove unit_flags actions (#26954)
(cherry picked from commit 0a2fca1aed4f2926c73f906769ff92918f7e2dbd)
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 42 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 37 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 15 |
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; |
