diff options
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; | 
