From 2e5550758c2754afc4bd8c98faa1462566a4c3ca Mon Sep 17 00:00:00 2001 From: SnapperRy Date: Fri, 10 Jun 2016 21:03:30 +0200 Subject: Core/Movement: interrupt a creature's current cast when fleeing for assistance, and (if spell is not castable while moving) when running random/fleeing movement generators. (#17271) Also make sure the creature is alive before updating. Fixes #12823. (cherry picked from commit 2db9269ec1c06b5fccc45dc0a5b4f714f9b48804) DB/Creature: World Trigger (Not Immune NPC) InhabitType update Closes #17332 by Malcrom (cherry picked from commit 78d08834c0afe0be09e4ec071a6e6855aa18e2c8) DB/Item: Fix text in Rune-Inscribed Parchment Closes #17329 by tkrokli (cherry picked from commit 8879545f21fe13650872358741b687a524cf8cb9) DB/Quest: improve chaining for "The Ashenvale Hunt" quests Closes #17323 by SnapperRy (cherry picked from commit d034eedb811912546025d11a5e9335bcd6600464) DB/trinity_string: wrong string about character customization + minor fix Closes #17306 by lyn1337 (cherry picked from commit 0951e559ebe6b76abdfef55619244578d9917002) DB/Quest: fix some completion/offer reward quest texts Closes #17336 by SnapperRy (cherry picked from commit e9025036b9848a5a684c57e3e066687c29fde321) DB/Quest: add queststarters for "Regthar Deathgate" Closes #17337 by SnapperRy (cherry picked from commit 0b8921a0ef81fb7c4741248301b17a86fa0ffb69) DB/Quest: fix chaining for "The Real Threat" Closes #17338 by SnapperRy (cherry picked from commit c9cb86d6c53ceb7331a1a5c1ff8a69f569cca426) DB/Quest: fix repeatableness (or lack of) for some quests Closes #17339 by SnapperRy (cherry picked from commit b9f2e2a81b7f0a269da3a8f9597a4eca17899781) DB/Quest: improvements for "Fool's Stout" Closes #17340 by SnapperRy (cherry picked from commit 4ec753dc50927e358a63a49a56cef7f5a72f41eb) --- src/server/game/Movement/MotionMaster.cpp | 1 + .../Movement/MovementGenerators/FleeingMovementGenerator.cpp | 6 ++++++ .../game/Movement/MovementGenerators/RandomMovementGenerator.cpp | 9 +++++++++ 3 files changed, 16 insertions(+) (limited to 'src') diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 94dcd71b5d5..7c747b9fe82 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -528,6 +528,7 @@ void MotionMaster::MoveSeekAssistance(float x, float y, float z) TC_LOG_DEBUG("misc", "Creature (Entry: %u %s) seek assistance (X: %f Y: %f Z: %f)", _owner->GetEntry(), _owner->GetGUID().ToString().c_str(), x, y, z); _owner->AttackStop(); + _owner->CastStop(); _owner->ToCreature()->SetReactState(REACT_PASSIVE); Mutate(new AssistanceMovementGenerator(x, y, z), MOTION_SLOT_ACTIVE); } diff --git a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp index 76b8e29ff78..23d9fac49de 100644 --- a/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/FleeingMovementGenerator.cpp @@ -38,6 +38,12 @@ void FleeingMovementGenerator::_setTargetLocation(T* owner) if (owner->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED)) return; + if (owner->HasUnitState(UNIT_STATE_CASTING) && !owner->CanMoveDuringChannel()) + { + owner->CastStop(); + return; + } + owner->AddUnitState(UNIT_STATE_FLEEING_MOVE); float x, y, z; diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 463f9c5e4e9..caa7d513796 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -29,6 +29,12 @@ template<> void RandomMovementGenerator::_setRandomLocation(Creature* creature) { + if (creature->HasUnitState(UNIT_STATE_CASTING) && !creature->CanMoveDuringChannel()) + { + creature->CastStop(); + return; + } + float respX, respY, respZ, respO, destX, destY, destZ, travelDistZ; creature->GetHomePosition(respX, respY, respZ, respO); Map const* map = creature->GetBaseMap(); @@ -141,6 +147,9 @@ void RandomMovementGenerator::DoFinalize(Creature* creature) template<> bool RandomMovementGenerator::DoUpdate(Creature* creature, const uint32 diff) { + if (!creature || !creature->IsAlive()) + return false; + if (creature->HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED | UNIT_STATE_DISTRACTED)) { i_nextMoveTime.Reset(0); // Expire the timer -- cgit v1.2.3