Core/PacketIO: Implemented UIMap questlines
Port From (https://github.com/TrinityCore/TrinityCore/commit/efa76de54011d40d69412d2af23cb071ed352688)
This commit is contained in:
@@ -478,6 +478,9 @@ namespace Game.DataStorage
|
|||||||
foreach (QuestLineXQuestRecord questLineQuest in QuestLineXQuestStorage.Values)
|
foreach (QuestLineXQuestRecord questLineQuest in QuestLineXQuestStorage.Values)
|
||||||
_questsByQuestLine.Add(questLineQuest.QuestLineID, questLineQuest);
|
_questsByQuestLine.Add(questLineQuest.QuestLineID, questLineQuest);
|
||||||
|
|
||||||
|
foreach (var questLineId in _questsByQuestLine.Keys)
|
||||||
|
_questsByQuestLine[questLineId].OrderByDescending(p => p.OrderIndex);
|
||||||
|
|
||||||
foreach (QuestPackageItemRecord questPackageItem in QuestPackageItemStorage.Values)
|
foreach (QuestPackageItemRecord questPackageItem in QuestPackageItemStorage.Values)
|
||||||
{
|
{
|
||||||
if (!_questPackages.ContainsKey(questPackageItem.PackageID))
|
if (!_questPackages.ContainsKey(questPackageItem.PackageID))
|
||||||
|
|||||||
@@ -9772,7 +9772,6 @@ namespace Game
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint count = 0;
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
uint sceneId = result.Read<uint>(0);
|
uint sceneId = result.Read<uint>(0);
|
||||||
@@ -9787,7 +9786,7 @@ namespace Game
|
|||||||
|
|
||||||
} while (result.NextRow());
|
} while (result.NextRow());
|
||||||
|
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} scene templates in {1} ms.", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} scene templates in {1} ms.", _sceneTemplateStorage.Count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||||
}
|
}
|
||||||
public void LoadPlayerChoices()
|
public void LoadPlayerChoices()
|
||||||
{
|
{
|
||||||
@@ -10150,6 +10149,7 @@ namespace Game
|
|||||||
Log.outInfo(LogFilter.ServerLoading, $"Loaded {_playerChoices.Count} player choices, {responseCount} responses, {rewardCount} rewards, {itemRewardCount} item rewards, " +
|
Log.outInfo(LogFilter.ServerLoading, $"Loaded {_playerChoices.Count} player choices, {responseCount} responses, {rewardCount} rewards, {itemRewardCount} item rewards, " +
|
||||||
$"{currencyRewardCount} currency rewards, {factionRewardCount} faction rewards, {itemChoiceRewardCount} item choice rewards and {mawPowersCount} maw powers in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
|
$"{currencyRewardCount} currency rewards, {factionRewardCount} faction rewards, {itemChoiceRewardCount} item choice rewards and {mawPowersCount} maw powers in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void LoadPlayerChoicesLocale()
|
public void LoadPlayerChoicesLocale()
|
||||||
{
|
{
|
||||||
uint oldMSTime = Time.GetMSTime();
|
uint oldMSTime = Time.GetMSTime();
|
||||||
@@ -10463,6 +10463,90 @@ namespace Game
|
|||||||
Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} phase names in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
|
Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} phase names in {Time.GetMSTimeDiffToNow(oldMSTime)} ms.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LoadUiMapQuestLines()
|
||||||
|
{
|
||||||
|
uint oldMSTime = Time.GetMSTime();
|
||||||
|
|
||||||
|
// need for reload case
|
||||||
|
_uiMapQuestLinesStorage.Clear();
|
||||||
|
|
||||||
|
// 0 1
|
||||||
|
SQLResult result = DB.World.Query("SELECT UiMapId, QuestLineId FROM ui_map_quest_line");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 questlines for UIMaps. DB table `ui_map_quest_line` is empty!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint count = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint uiMapId = result.Read<uint>(0);
|
||||||
|
uint questLineId = result.Read<uint>(1);
|
||||||
|
|
||||||
|
if (!CliDB.UiMapStorage.HasRecord(uiMapId))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `ui_map_quest_line` references non-existing UIMap {uiMapId}, skipped");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Global.DB2Mgr.GetQuestsForQuestLine(questLineId) == null)
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `ui_map_quest_line` references empty or non-existing questline {questLineId}, skipped");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
_uiMapQuestLinesStorage.Add(uiMapId, questLineId);
|
||||||
|
++count;
|
||||||
|
|
||||||
|
} while (result.NextRow());
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} UiMap questlines definitions in {Time.GetMSTimeDiffToNow(oldMSTime)} ms");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void LoadUiMapQuests()
|
||||||
|
{
|
||||||
|
uint oldMSTime = Time.GetMSTime();
|
||||||
|
|
||||||
|
// need for reload case
|
||||||
|
_uiMapQuestsStorage.Clear();
|
||||||
|
|
||||||
|
// 0 1
|
||||||
|
SQLResult result = DB.World.Query("SELECT UiMapId, QuestId FROM ui_map_quest");
|
||||||
|
if (result.IsEmpty())
|
||||||
|
{
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quests for UIMaps. DB table `ui_map_quest` is empty!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint count = 0;
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
uint uiMapId = result.Read<uint>(0);
|
||||||
|
uint questId = result.Read<uint>(1);
|
||||||
|
|
||||||
|
if (!CliDB.UiMapStorage.HasRecord(uiMapId))
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `ui_map_quest` references non-existing UIMap {uiMapId}, skipped");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (GetQuestTemplate(questId) == null)
|
||||||
|
{
|
||||||
|
Log.outError(LogFilter.Sql, $"Table `ui_map_quest` references non-existing quest {questId}, skipped");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
_uiMapQuestsStorage.Add(uiMapId, questId);
|
||||||
|
++count;
|
||||||
|
|
||||||
|
} while (result.NextRow());
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} UiMap quests definitions in {Time.GetMSTimeDiffToNow(oldMSTime)} ms");
|
||||||
|
}
|
||||||
|
|
||||||
public MailLevelReward GetMailLevelReward(uint level, Race race)
|
public MailLevelReward GetMailLevelReward(uint level, Race race)
|
||||||
{
|
{
|
||||||
var mailList = _mailLevelRewardStorage.LookupByKey((byte)level);
|
var mailList = _mailLevelRewardStorage.LookupByKey((byte)level);
|
||||||
@@ -10913,6 +10997,16 @@ namespace Game
|
|||||||
return _phaseNameStorage.TryGetValue(phaseId, out string value) ? value : "Unknown Name";
|
return _phaseNameStorage.TryGetValue(phaseId, out string value) ? value : "Unknown Name";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<uint> GetUiMapQuestLinesList(uint uiMapId)
|
||||||
|
{
|
||||||
|
return _uiMapQuestLinesStorage.LookupByKey(uiMapId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<uint> GetUiMapQuestsList(uint uiMapId)
|
||||||
|
{
|
||||||
|
return _uiMapQuestsStorage.LookupByKey(uiMapId);
|
||||||
|
}
|
||||||
|
|
||||||
//Vehicles
|
//Vehicles
|
||||||
public void LoadVehicleTemplate()
|
public void LoadVehicleTemplate()
|
||||||
{
|
{
|
||||||
@@ -11010,7 +11104,7 @@ namespace Game
|
|||||||
|
|
||||||
if (result.IsEmpty())
|
if (result.IsEmpty())
|
||||||
{
|
{
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 Vehicle Accessories in {0} ms", Time.GetMSTimeDiffToNow(oldMSTime));
|
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 vehicle Accessories. DB table `vehicle_accessory` is empty");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11126,6 +11220,8 @@ namespace Game
|
|||||||
Dictionary<uint, SceneTemplate> _sceneTemplateStorage = new();
|
Dictionary<uint, SceneTemplate> _sceneTemplateStorage = new();
|
||||||
Dictionary<int, JumpChargeParams> _jumpChargeParams = new();
|
Dictionary<int, JumpChargeParams> _jumpChargeParams = new();
|
||||||
Dictionary<uint, string> _phaseNameStorage = new();
|
Dictionary<uint, string> _phaseNameStorage = new();
|
||||||
|
MultiMap<uint, uint> _uiMapQuestLinesStorage = new();
|
||||||
|
MultiMap<uint, uint> _uiMapQuestsStorage = new();
|
||||||
Dictionary<(ulong, Difficulty), CreatureStaticFlagsOverride> _creatureStaticFlagsOverrideStorage = new();
|
Dictionary<(ulong, Difficulty), CreatureStaticFlagsOverride> _creatureStaticFlagsOverrideStorage = new();
|
||||||
|
|
||||||
Dictionary<byte, RaceUnlockRequirement> _raceUnlockRequirementStorage = new();
|
Dictionary<byte, RaceUnlockRequirement> _raceUnlockRequirementStorage = new();
|
||||||
|
|||||||
@@ -792,5 +792,41 @@ namespace Game
|
|||||||
_player.GetReputationMgr().ModifyReputation(CliDB.FactionStorage.LookupByKey(faction.Id), faction.Quantity);
|
_player.GetReputationMgr().ModifyReputation(CliDB.FactionStorage.LookupByKey(faction.Id), faction.Quantity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[WorldPacketHandler(ClientOpcodes.UiMapQuestLinesRequest)]
|
||||||
|
void HandleUiMapQuestLinesRequest(UiMapQuestLinesRequest uiMapQuestLinesRequest)
|
||||||
|
{
|
||||||
|
var uiMap = CliDB.UiMapStorage.LookupByKey(uiMapQuestLinesRequest.UiMapID);
|
||||||
|
if (uiMap == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
UiMapQuestLinesResponse response = new();
|
||||||
|
response.UiMapID = uiMap.Id;
|
||||||
|
|
||||||
|
var questLines = Global.ObjectMgr.GetUiMapQuestLinesList(uiMap.Id);
|
||||||
|
foreach (uint questLineId in questLines)
|
||||||
|
{
|
||||||
|
var questLineQuests = Global.DB2Mgr.GetQuestsForQuestLine(questLineId);
|
||||||
|
if (questLineQuests.Empty())
|
||||||
|
continue;
|
||||||
|
|
||||||
|
foreach (var questLineQuest in questLineQuests)
|
||||||
|
{
|
||||||
|
Quest quest = Global.ObjectMgr.GetQuestTemplate(questLineQuest.QuestID);
|
||||||
|
if (quest != null && _player.CanTakeQuest(quest, false))
|
||||||
|
response.QuestLineXQuestIDs.Add(questLineQuest.Id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var quests = Global.ObjectMgr.GetUiMapQuestsList(uiMap.Id);
|
||||||
|
foreach (uint questId in quests)
|
||||||
|
{
|
||||||
|
Quest quest = Global.ObjectMgr.GetQuestTemplate(questId);
|
||||||
|
if (quest != null && _player.CanTakeQuest(quest, false))
|
||||||
|
response.QuestIDs.Add(questId);
|
||||||
|
}
|
||||||
|
|
||||||
|
SendPacket(response);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -953,6 +953,40 @@ namespace Game.Networking.Packets
|
|||||||
public bool IsReroll;
|
public bool IsReroll;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class UiMapQuestLinesResponse : ServerPacket
|
||||||
|
{
|
||||||
|
public uint UiMapID;
|
||||||
|
public List<uint> QuestLineXQuestIDs = new();
|
||||||
|
public List<uint> QuestIDs = new();
|
||||||
|
|
||||||
|
public UiMapQuestLinesResponse() : base(ServerOpcodes.UiMapQuestLinesResponse, ConnectionType.Instance) { }
|
||||||
|
|
||||||
|
public override void Write()
|
||||||
|
{
|
||||||
|
_worldPacket.WriteUInt32(UiMapID);
|
||||||
|
_worldPacket.WriteInt32(QuestLineXQuestIDs.Count);
|
||||||
|
_worldPacket.WriteInt32(QuestIDs.Count);
|
||||||
|
|
||||||
|
foreach (var questLineQuestID in QuestLineXQuestIDs)
|
||||||
|
_worldPacket.WriteUInt32(questLineQuestID);
|
||||||
|
|
||||||
|
foreach (var questID in QuestIDs)
|
||||||
|
_worldPacket.WriteUInt32(questID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class UiMapQuestLinesRequest : ClientPacket
|
||||||
|
{
|
||||||
|
public int UiMapID;
|
||||||
|
|
||||||
|
public UiMapQuestLinesRequest(WorldPacket packet) : base(packet) { }
|
||||||
|
|
||||||
|
public override void Read()
|
||||||
|
{
|
||||||
|
UiMapID = _worldPacket.ReadInt32();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//Structs
|
//Structs
|
||||||
public class QuestGiverInfo
|
public class QuestGiverInfo
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -806,6 +806,12 @@ namespace Game
|
|||||||
Global.ObjectMgr.LoadPlayerChoicesLocale();
|
Global.ObjectMgr.LoadPlayerChoicesLocale();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loading UIMap questlines...");
|
||||||
|
Global.ObjectMgr.LoadUiMapQuestLines();
|
||||||
|
|
||||||
|
Log.outInfo(LogFilter.ServerLoading, "Loading UIMap quests...");
|
||||||
|
Global.ObjectMgr.LoadUiMapQuests();
|
||||||
|
|
||||||
Log.outInfo(LogFilter.ServerLoading, "Loading Jump Charge Params...");
|
Log.outInfo(LogFilter.ServerLoading, "Loading Jump Charge Params...");
|
||||||
Global.ObjectMgr.LoadJumpChargeParams();
|
Global.ObjectMgr.LoadJumpChargeParams();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user