mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-18 16:38:42 +01:00
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.
This commit is contained in:
3
sql/updates/world/3.3.5/2016_08_19_02_world.sql
Normal file
3
sql/updates/world/3.3.5/2016_08_19_02_world.sql
Normal file
@@ -0,0 +1,3 @@
|
||||
--
|
||||
UPDATE `smart_scripts` SET `action_param2`=1 WHERE `action_type`=7;
|
||||
UPDATE `smart_scripts` SET `action_param2`=0 WHERE `source_type`=0 AND `entryorguid`=11216 AND `id`=3;
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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...
|
||||
@@ -596,6 +596,12 @@ struct SmartAction
|
||||
uint32 quest;
|
||||
} quest;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 questID;
|
||||
uint32 directAdd;
|
||||
} questOffer;
|
||||
|
||||
struct
|
||||
{
|
||||
uint32 state;
|
||||
|
||||
Reference in New Issue
Block a user