From 3a3af64f6809190938da5e94d27fb9f7d337d132 Mon Sep 17 00:00:00 2001 From: kaelima Date: Mon, 24 Oct 2011 23:21:34 +0100 Subject: Core/SmartAI: - Fixed some issues with SMART_ACTION_SET_FLY (#1073) - Fixed allowing 0 as input for SMART_EVENT_ACCEPTED_QUEST and SMART_EVENT_REWARD_QUEST (#2680) - Some cleanup --- src/server/game/AI/SmartScripts/SmartAI.cpp | 24 ++++++++++++++++++---- src/server/game/AI/SmartScripts/SmartScript.cpp | 7 ++++++- src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 8 +++++--- 3 files changed, 31 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index 0b77dd03e87..66c5ca7b041 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -450,12 +450,14 @@ void SmartAI::EnterEvadeMode() { AddEscortState(SMART_ESCORT_RETURNING); ReturnToLastOOCPos(); - } else if (mFollowGuid){ + } + else if (mFollowGuid) + { if (Unit* target = me->GetUnit(*me, mFollowGuid)) me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle); - } else { - me->GetMotionMaster()->MoveTargetedHome(); } + else + me->GetMotionMaster()->MoveTargetedHome(); Reset(); } @@ -705,12 +707,25 @@ void SmartAI::SetRun(bool run) me->RemoveUnitMovementFlag(MOVEMENTFLAG_WALKING); else me->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); + me->SendMovementFlagUpdate(); mRun = run; } void SmartAI::SetFly(bool fly) { - me->SetFlying(fly); + if (fly) + { + me->AddUnitMovementFlag(MOVEMENTFLAG_LEVITATING); + me->SetByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01); + me->SetFlying(true); + } + else + { + me->RemoveUnitMovementFlag(MOVEMENTFLAG_LEVITATING); + me->RemoveByteFlag(UNIT_FIELD_BYTES_1, 3, 0x01); + me->SetFlying(false); + } + me->SendMovementFlagUpdate(); } void SmartAI::SetSwim(bool swim) @@ -719,6 +734,7 @@ void SmartAI::SetSwim(bool swim) me->AddUnitMovementFlag(MOVEMENTFLAG_SWIMMING); else me->RemoveUnitMovementFlag(MOVEMENTFLAG_SWIMMING); + me->SendMovementFlagUpdate(); } void SmartAI::sGossipHello(Player* player) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index de263fafdea..1d42de8e1c6 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1782,7 +1782,12 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } case SMART_ACTION_JUMP_TO_POS: { + if (!me) + return; + + me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveJump(e.target.x, e.target.y, e.target.z, (float)e.action.jump.speedxy, (float)e.action.jump.speedz); + // TODO: Resume path when reached jump location break; } case SMART_ACTION_SEND_GOSSIP_MENU: @@ -1795,7 +1800,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u return; for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) - if(Player* player = (*itr)->ToPlayer()) + if (Player* player = (*itr)->ToPlayer()) { if (e.action.sendGossipMenu.gossipMenuId) player->PrepareGossipMenu(GetBaseObject(), e.action.sendGossipMenu.gossipMenuId, true); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index b1516916760..e39910bae5d 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -394,7 +394,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) break; case SMART_EVENT_ACCEPTED_QUEST: case SMART_EVENT_REWARD_QUEST: - if (!IsQuestValid(e, e.event.quest.quest)) return false; + if (e.event.quest.quest && !IsQuestValid(e, e.event.quest.quest)) + return false; break; case SMART_EVENT_RECEIVE_EMOTE: { @@ -526,7 +527,8 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) } break; case SMART_ACTION_SOUND: - if (!IsSoundValid(e, e.action.sound.sound)) return false; + if (!IsSoundValid(e, e.action.sound.sound)) + return false; if (e.action.sound.range > TEXT_RANGE_WORLD) { sLog->outErrorDb("SmartAIMgr: Entry %d SourceType %u Event %u Action %u uses invalid Text Range %u, skipped.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), e.action.sound.range); @@ -539,7 +541,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) break; case SMART_ACTION_FAIL_QUEST: case SMART_ACTION_ADD_QUEST: - if (e.action.quest.quest && !IsQuestValid(e, e.action.quest.quest)) return false; + if (!e.action.quest.quest || !IsQuestValid(e, e.action.quest.quest)) return false; break; case SMART_ACTION_ACTIVATE_TAXI: { -- cgit v1.2.3