diff options
| author | treeston <treeston.mmoc@gmail.com> | 2016-08-19 23:01:03 +0200 |
|---|---|---|
| committer | treeston <treeston.mmoc@gmail.com> | 2016-08-19 23:01:21 +0200 |
| commit | ba4d6f63936fe3269e6c8b75358bc00a78fd49df (patch) | |
| tree | 19e86f65cce095254af4d9d3f684f533df11fa83 /src | |
| parent | 4073cc510a5c73ede8a38687e92ec9b3ed0ee4e5 (diff) | |
AI/SmartScripts: SMART_ACTION_ADD_QUEST -> SMART_ACTION_OFFER_QUEST. Open quest offer instead of adding straight to log - old behavior can be requested using action_param2. Closes #17735.
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScript.cpp | 25 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.cpp | 2 | ||||
| -rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 8 |
3 files changed, 27 insertions, 8 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 4cdb2b67d8c..90fad46c21b 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -316,7 +316,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u delete targets; break; } - case SMART_ACTION_ADD_QUEST: + case SMART_ACTION_OFFER_QUEST: { ObjectList* targets = GetTargets(e, unit); if (!targets) @@ -324,13 +324,26 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u for (ObjectList::const_iterator itr = targets->begin(); itr != targets->end(); ++itr) { - if (IsPlayer(*itr)) + if (Player* pTarget = (*itr)->ToPlayer()) { - if (Quest const* q = sObjectMgr->GetQuestTemplate(e.action.quest.quest)) + if (Quest const* q = sObjectMgr->GetQuestTemplate(e.action.questOffer.questID)) { - (*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, nullptr); - TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_QUEST: Player guidLow %u add quest %u", - (*itr)->GetGUID().GetCounter(), e.action.quest.quest); + if (me && e.action.questOffer.directAdd == 0) + { + if (pTarget->CanTakeQuest(q, true)) + if (WorldSession* session = pTarget->GetSession()) + { + PlayerMenu menu(session); + menu.SendQuestGiverQuestDetails(q, me->GetGUID(), true); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_OFFER_QUEST: Player guidLow %u - offering quest %u", pTarget->GetGUID().GetCounter(), e.action.questOffer.questID); + } + } + else + { + (*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, nullptr); + TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_OFFER_QUEST: Player guidLow %u - quest %u added", + pTarget->GetGUID().GetCounter(), e.action.questOffer.questID); + } } } } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index adb47ece74e..7b4ffc8bd04 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -809,7 +809,7 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; break; case SMART_ACTION_FAIL_QUEST: - case SMART_ACTION_ADD_QUEST: + case SMART_ACTION_OFFER_QUEST: if (!e.action.quest.quest || !IsQuestValid(e, e.action.quest.quest)) return false; break; diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index c20d4c44685..e0f5dac4f5e 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -442,7 +442,7 @@ enum SMART_ACTION SMART_ACTION_SOUND = 4, // SoundId, onlySelf SMART_ACTION_PLAY_EMOTE = 5, // EmoteId SMART_ACTION_FAIL_QUEST = 6, // QuestID - SMART_ACTION_ADD_QUEST = 7, // QuestID + SMART_ACTION_OFFER_QUEST = 7, // QuestID, directAdd SMART_ACTION_SET_REACT_STATE = 8, // state SMART_ACTION_ACTIVATE_GOBJECT = 9, // SMART_ACTION_RANDOM_EMOTE = 10, // EmoteId1, EmoteId2, EmoteId3... @@ -598,6 +598,12 @@ struct SmartAction struct { + uint32 questID; + uint32 directAdd; + } questOffer; + + struct + { uint32 state; } react; |
