aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/AI/SmartScripts
diff options
context:
space:
mode:
authortreeston <treeston.mmoc@gmail.com>2016-08-19 23:01:03 +0200
committerjoschiwald <joschiwald.trinity@gmail.com>2017-02-12 16:07:27 +0100
commit573cb9d20f01bdc6dce8763aa9affa9ed2ae3679 (patch)
tree1389ad8c33aa8ca8e06ae60399395a22a0d427a1 /src/server/game/AI/SmartScripts
parenta934722061cf9aa1c32b83fbd27c7f4c75d02aca (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.
(cherry picked from commit ba4d6f63936fe3269e6c8b75358bc00a78fd49df)
Diffstat (limited to 'src/server/game/AI/SmartScripts')
-rw-r--r--src/server/game/AI/SmartScripts/SmartScript.cpp25
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.cpp2
-rw-r--r--src/server/game/AI/SmartScripts/SmartScriptMgr.h8
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 42698d0f4f7..d814143a9ae 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 %s add quest %u",
- (*itr)->GetGUID().ToString().c_str(), 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 %s - offering quest %u", pTarget->GetGUID().ToString().c_str(), e.action.questOffer.questID);
+ }
+ }
+ else
+ {
+ (*itr)->ToPlayer()->AddQuestAndCheckCompletion(q, nullptr);
+ TC_LOG_DEBUG("scripts.ai", "SmartScript::ProcessAction:: SMART_ACTION_ADD_QUEST: Player %s add quest %u",
+ (*itr)->GetGUID().ToString().c_str(), e.action.questOffer.questID);
+ }
}
}
}
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
index 429f4b78531..a4ed92e6dcf 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp
@@ -810,7 +810,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 fd8b6b8e999..2fde9031a36 100644
--- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h
+++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h
@@ -443,7 +443,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...
@@ -599,6 +599,12 @@ struct SmartAction
struct
{
+ uint32 questID;
+ uint32 directAdd;
+ } questOffer;
+
+ struct
+ {
uint32 state;
} react;