diff --git a/data/sql/updates/pending_db_world/rev_1702318402325328200.sql b/data/sql/updates/pending_db_world/rev_1702318402325328200.sql new file mode 100644 index 000000000..7419b557b --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1702318402325328200.sql @@ -0,0 +1,4 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 21246) AND (`source_type` = 0) AND (`id` IN (0)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(21246, 0, 0, 0, 0, 0, 100, 0, 4850, 19400, 10900, 14500, 0, 11, 38461, 0, 0, 0, 0, 0, 28, 25, 0, 0, 8, 0, 0, 0, 0, 'Serpentshrine Sporebat - In Combat - Cast Sonic Charge'); diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index d89159023..48190137c 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -152,7 +152,7 @@ struct PowerUsersSelector : public Acore::unary_function struct FarthestTargetSelector : public Acore::unary_function { - FarthestTargetSelector(Unit const* unit, float dist, bool playerOnly, bool inLos) : _me(unit), _dist(dist), _playerOnly(playerOnly), _inLos(inLos) {} + FarthestTargetSelector(Unit const* unit, float maxDist, bool playerOnly, bool inLos, float minDist = 0.f) : _me(unit), _minDist(minDist), _maxDist(maxDist), _playerOnly(playerOnly), _inLos(inLos) {} bool operator()(Unit const* target) const { @@ -162,7 +162,7 @@ struct FarthestTargetSelector : public Acore::unary_function if (_playerOnly && target->GetTypeId() != TYPEID_PLAYER) return false; - if (_dist > 0.0f && !_me->IsWithinCombatRange(target, _dist)) + if (_maxDist > 0.0f && !_me->IsInRange(target, _minDist, _maxDist)) return false; if (_inLos && !_me->IsWithinLOSInMap(target)) @@ -173,7 +173,7 @@ struct FarthestTargetSelector : public Acore::unary_function private: Unit const* _me; - float _dist; + float _minDist, _maxDist; bool _playerOnly; bool _inLos; }; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index d9274030b..25b2c8cb3 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3243,7 +3243,7 @@ void SmartScript::GetTargets(ObjectVector& targets, SmartScriptHolder const& e, case SMART_TARGET_FARTHEST: if (me) { - if (Unit* u = me->AI()->SelectTarget(SelectTargetMethod::MinDistance, 0, FarthestTargetSelector(me, e.target.farthest.maxDist, e.target.farthest.playerOnly, e.target.farthest.isInLos))) + if (Unit* u = me->AI()->SelectTarget(SelectTargetMethod::MinDistance, 0, FarthestTargetSelector(me, e.target.farthest.maxDist, e.target.farthest.playerOnly, e.target.farthest.isInLos, e.target.farthest.minDist))) targets.push_back(u); } break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 3ac499498..56f3b8940 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1488,7 +1488,7 @@ enum SMARTAI_TARGETS SMART_TARGET_CLOSEST_ENEMY = 25, // maxDist, playerOnly SMART_TARGET_CLOSEST_FRIENDLY = 26, // maxDist, playerOnly SMART_TARGET_LOOT_RECIPIENTS = 27, // all players that have tagged this creature (for kill credit) - SMART_TARGET_FARTHEST = 28, // maxDist, playerOnly, isInLos + SMART_TARGET_FARTHEST = 28, // maxDist, playerOnly, isInLos, minDist SMART_TARGET_VEHICLE_PASSENGER = 29, // seat number (vehicle can target it's own accessory) SMART_TARGET_TC_END = 30, // placeholder @@ -1538,6 +1538,7 @@ struct SmartTarget uint32 maxDist; SAIBool playerOnly; SAIBool isInLos; + uint32 minDist; } farthest; struct diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 7a30041bc..989b5d42e 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -4146,6 +4146,7 @@ void AuraEffect::HandleModMechanicImmunity(AuraApplication const* aurApp, uint8 break; case 34471: // The Beast Within case 19574: // Bestial Wrath + case 38484: // Bestial Wrath mechanic = IMMUNE_TO_MOVEMENT_IMPAIRMENT_AND_LOSS_CONTROL_MASK; target->ApplySpellImmune(GetId(), IMMUNITY_MECHANIC, MECHANIC_CHARM, apply); target->ApplySpellImmune(GetId(), IMMUNITY_MECHANIC, MECHANIC_DISORIENTED, apply);