Core/Quests: Ported quest greeting locales
Core/Misc: Misc fixes
This commit is contained in:
@@ -339,20 +339,28 @@ namespace Game.Misc
|
||||
_session.SendPacket(packet);
|
||||
}
|
||||
|
||||
public void SendQuestGiverQuestListMessage(ObjectGuid guid)
|
||||
public void SendQuestGiverQuestListMessage(WorldObject questgiver)
|
||||
{
|
||||
ObjectGuid guid = questgiver.GetGUID();
|
||||
LocaleConstant localeConstant = _session.GetSessionDbLocaleIndex();
|
||||
|
||||
QuestGiverQuestListMessage questList = new QuestGiverQuestListMessage();
|
||||
questList.QuestGiverGUID = guid;
|
||||
|
||||
QuestGreeting questGreeting = Global.ObjectMgr.GetQuestGreeting(guid);
|
||||
QuestGreeting questGreeting = Global.ObjectMgr.GetQuestGreeting(questgiver.GetTypeId(), questgiver.GetEntry());
|
||||
if (questGreeting != null)
|
||||
{
|
||||
questList.GreetEmoteDelay = questGreeting.greetEmoteDelay;
|
||||
questList.GreetEmoteType = questGreeting.greetEmoteType;
|
||||
questList.Greeting = questGreeting.greeting;
|
||||
questList.GreetEmoteDelay = questGreeting.EmoteDelay;
|
||||
questList.GreetEmoteType = questGreeting.EmoteType;
|
||||
questList.Greeting = questGreeting.Text;
|
||||
|
||||
if (localeConstant != LocaleConstant.enUS)
|
||||
{
|
||||
QuestGreetingLocale questGreetingLocale = Global.ObjectMgr.GetQuestGreetingLocale(questgiver.GetTypeId(), questgiver.GetEntry());
|
||||
if (questGreetingLocale != null)
|
||||
ObjectManager.GetLocaleString(questGreetingLocale.Greeting, localeConstant, ref questList.Greeting);
|
||||
}
|
||||
}
|
||||
else
|
||||
Log.outError(LogFilter.Server, "Guid: {0} - No quest greeting found.", guid.ToString());
|
||||
|
||||
for (var i = 0; i < _questMenu.GetMenuItemCount(); ++i)
|
||||
{
|
||||
@@ -364,12 +372,11 @@ namespace Game.Misc
|
||||
{
|
||||
string title = quest.LogTitle;
|
||||
|
||||
LocaleConstant locale = _session.GetSessionDbLocaleIndex();
|
||||
if (locale != LocaleConstant.enUS)
|
||||
if (localeConstant != LocaleConstant.enUS)
|
||||
{
|
||||
QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
|
||||
if (localeData != null)
|
||||
ObjectManager.GetLocaleString(localeData.LogTitle, locale, ref title);
|
||||
ObjectManager.GetLocaleString(localeData.LogTitle, localeConstant, ref title);
|
||||
}
|
||||
|
||||
GossipText text = new GossipText();
|
||||
|
||||
@@ -280,7 +280,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
|
||||
public void SendPreparedQuest(ObjectGuid guid)
|
||||
public void SendPreparedQuest(WorldObject source)
|
||||
{
|
||||
QuestMenu questMenu = PlayerTalkClass.GetQuestMenu();
|
||||
if (questMenu.IsEmpty())
|
||||
@@ -298,36 +298,35 @@ namespace Game.Entities
|
||||
{
|
||||
if (qmi0.QuestIcon == 4)
|
||||
{
|
||||
PlayerTalkClass.SendQuestGiverRequestItems(quest, guid, CanRewardQuest(quest, false), true);
|
||||
PlayerTalkClass.SendQuestGiverRequestItems(quest, source.GetGUID(), CanRewardQuest(quest, false), true);
|
||||
return;
|
||||
}
|
||||
// Send completable on repeatable and autoCompletable quest if player don't have quest
|
||||
// @todo verify if check for !quest.IsDaily() is really correct (possibly not)
|
||||
else
|
||||
{
|
||||
WorldObject obj = Global.ObjAccessor.GetObjectByTypeMask(this, guid, TypeMask.Unit | TypeMask.GameObject | TypeMask.Item);
|
||||
if (!obj || (!obj.hasQuest(questId) && !obj.hasInvolvedQuest(questId)))
|
||||
if (!source.hasQuest(questId) && !source.hasInvolvedQuest(questId))
|
||||
{
|
||||
PlayerTalkClass.SendCloseGossip();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!obj.IsTypeId(TypeId.Unit) || obj.HasFlag64(UnitFields.NpcFlags, NPCFlags.Gossip))
|
||||
if (!source.IsTypeId(TypeId.Unit) || source.HasFlag64(UnitFields.NpcFlags, NPCFlags.Gossip))
|
||||
{
|
||||
if (quest.IsAutoAccept() && CanAddQuest(quest, true) && CanTakeQuest(quest, true))
|
||||
AddQuestAndCheckCompletion(quest, obj);
|
||||
AddQuestAndCheckCompletion(quest, source);
|
||||
|
||||
if (quest.IsAutoComplete() && quest.IsRepeatable() && !quest.IsDailyOrWeekly())
|
||||
PlayerTalkClass.SendQuestGiverRequestItems(quest, guid, CanCompleteRepeatableQuest(quest), true);
|
||||
PlayerTalkClass.SendQuestGiverRequestItems(quest, source.GetGUID(), CanCompleteRepeatableQuest(quest), true);
|
||||
else
|
||||
PlayerTalkClass.SendQuestGiverQuestDetails(quest, guid, true, false);
|
||||
PlayerTalkClass.SendQuestGiverQuestDetails(quest, source.GetGUID(), true, false);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
PlayerTalkClass.SendQuestGiverQuestListMessage(guid);
|
||||
PlayerTalkClass.SendQuestGiverQuestListMessage(source);
|
||||
}
|
||||
|
||||
public bool IsActiveQuest(uint quest_id)
|
||||
|
||||
@@ -2443,7 +2443,7 @@ namespace Game.Entities
|
||||
{
|
||||
if (PlayerTalkClass.GetGossipMenu().IsEmpty() && !PlayerTalkClass.GetQuestMenu().IsEmpty())
|
||||
{
|
||||
SendPreparedQuest(source.GetGUID());
|
||||
SendPreparedQuest(source);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -2518,7 +2518,7 @@ namespace Game.Entities
|
||||
break;
|
||||
case GossipOption.Questgiver:
|
||||
PrepareQuestMenu(guid);
|
||||
SendPreparedQuest(guid);
|
||||
SendPreparedQuest(source);
|
||||
break;
|
||||
case GossipOption.Vendor:
|
||||
case GossipOption.Armorer:
|
||||
|
||||
Reference in New Issue
Block a user