mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-24 07:30:07 -04:00
Core/SAI: Implement quest source for SAI (#26170)
This commit is contained in:
@@ -50,6 +50,7 @@ SmartScript::SmartScript()
|
||||
trigger = nullptr;
|
||||
areaTrigger = nullptr;
|
||||
sceneTemplate = nullptr;
|
||||
quest = nullptr;
|
||||
mEventPhase = 0;
|
||||
mPathId = 0;
|
||||
mTextTimer = 0;
|
||||
@@ -3041,6 +3042,20 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
|
||||
ProcessAction(e, unit, var0, var1, bvar, spell, gob);
|
||||
break;
|
||||
}
|
||||
case SMART_EVENT_QUEST_ACCEPTED:
|
||||
case SMART_EVENT_QUEST_COMPLETION:
|
||||
case SMART_EVENT_QUEST_REWARDED:
|
||||
case SMART_EVENT_QUEST_FAIL:
|
||||
{
|
||||
ProcessAction(e, unit);
|
||||
break;
|
||||
}
|
||||
case SMART_EVENT_QUEST_OBJ_COPLETETION:
|
||||
{
|
||||
if (var0 == (e.event.questObjective.id))
|
||||
ProcessAction(e, unit);
|
||||
break;
|
||||
}
|
||||
//no params
|
||||
case SMART_EVENT_AGGRO:
|
||||
case SMART_EVENT_DEATH:
|
||||
@@ -3051,11 +3066,6 @@ void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, ui
|
||||
case SMART_EVENT_AI_INIT:
|
||||
case SMART_EVENT_TRANSPORT_ADDPLAYER:
|
||||
case SMART_EVENT_TRANSPORT_REMOVE_PLAYER:
|
||||
case SMART_EVENT_QUEST_ACCEPTED:
|
||||
case SMART_EVENT_QUEST_OBJ_COPLETETION:
|
||||
case SMART_EVENT_QUEST_COMPLETION:
|
||||
case SMART_EVENT_QUEST_REWARDED:
|
||||
case SMART_EVENT_QUEST_FAIL:
|
||||
case SMART_EVENT_JUST_SUMMONED:
|
||||
case SMART_EVENT_RESET:
|
||||
case SMART_EVENT_JUST_CREATED:
|
||||
@@ -3712,7 +3722,7 @@ void SmartScript::OnUpdate(uint32 const diff)
|
||||
}
|
||||
}
|
||||
|
||||
void SmartScript::FillScript(SmartAIEventList e, WorldObject* obj, AreaTriggerEntry const* at, SceneTemplate const* scene)
|
||||
void SmartScript::FillScript(SmartAIEventList e, WorldObject* obj, AreaTriggerEntry const* at, SceneTemplate const* scene, Quest const* quest)
|
||||
{
|
||||
if (e.empty())
|
||||
{
|
||||
@@ -3722,6 +3732,8 @@ void SmartScript::FillScript(SmartAIEventList e, WorldObject* obj, AreaTriggerEn
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript: EventMap for AreaTrigger %u is empty but is using SmartScript.", at->ID);
|
||||
if (scene)
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript: EventMap for SceneId %u is empty but is using SmartScript.", scene->SceneId);
|
||||
if (quest)
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript: EventMap for Quest %u is empty but is using SmartScript.", quest->GetQuestId());
|
||||
return;
|
||||
}
|
||||
for (SmartAIEventList::iterator i = e.begin(); i != e.end(); ++i)
|
||||
@@ -3774,33 +3786,38 @@ void SmartScript::GetScript()
|
||||
e = sSmartScriptMgr->GetScript(-((int32)me->GetSpawnId()), mScriptType);
|
||||
if (e.empty())
|
||||
e = sSmartScriptMgr->GetScript((int32)me->GetEntry(), mScriptType);
|
||||
FillScript(std::move(e), me, nullptr, nullptr);
|
||||
FillScript(std::move(e), me, nullptr, nullptr, nullptr);
|
||||
}
|
||||
else if (go)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript(-((int32)go->GetSpawnId()), mScriptType);
|
||||
if (e.empty())
|
||||
e = sSmartScriptMgr->GetScript((int32)go->GetEntry(), mScriptType);
|
||||
FillScript(std::move(e), go, nullptr, nullptr);
|
||||
FillScript(std::move(e), go, nullptr, nullptr, nullptr);
|
||||
}
|
||||
else if (trigger)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript((int32)trigger->ID, mScriptType);
|
||||
FillScript(std::move(e), nullptr, trigger, nullptr);
|
||||
FillScript(std::move(e), nullptr, trigger, nullptr, nullptr);
|
||||
}
|
||||
else if (areaTrigger)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript((int32)areaTrigger->GetEntry(), mScriptType);
|
||||
FillScript(std::move(e), areaTrigger, nullptr, nullptr);
|
||||
FillScript(std::move(e), areaTrigger, nullptr, nullptr, nullptr);
|
||||
}
|
||||
else if (sceneTemplate)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript(sceneTemplate->SceneId, mScriptType);
|
||||
FillScript(std::move(e), nullptr, nullptr, sceneTemplate);
|
||||
FillScript(std::move(e), nullptr, nullptr, sceneTemplate, nullptr);
|
||||
}
|
||||
else if (quest)
|
||||
{
|
||||
e = sSmartScriptMgr->GetScript(quest->GetQuestId(), mScriptType);
|
||||
FillScript(std::move(e), nullptr, nullptr, nullptr, quest);
|
||||
}
|
||||
}
|
||||
|
||||
void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at, SceneTemplate const* scene)
|
||||
void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at, SceneTemplate const* scene, Quest const* qst)
|
||||
{
|
||||
if (obj)//handle object based scripts
|
||||
{
|
||||
@@ -3838,6 +3855,12 @@ void SmartScript::OnInitialize(WorldObject* obj, AreaTriggerEntry const* at, Sce
|
||||
sceneTemplate = scene;
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript::OnInitialize: source is Scene with id %u", scene->SceneId);
|
||||
}
|
||||
else if (qst)
|
||||
{
|
||||
mScriptType = SMART_SCRIPT_TYPE_QUEST;
|
||||
quest = qst;
|
||||
TC_LOG_DEBUG("scripts.ai", "SmartScript::OnInitialize: source is Quest with id %u", qst->GetQuestId());
|
||||
}
|
||||
else
|
||||
{
|
||||
TC_LOG_ERROR("misc", "SmartScript::OnInitialize: !WARNING! Initialized objects are NULL.");
|
||||
|
||||
Reference in New Issue
Block a user