void HandleHotfixRequest(HotfixRequest hotfixQuery) { Dictionary <ulong, int> hotfixes = Global.DB2Mgr.GetHotfixData(); HotfixResponse hotfixQueryResponse = new HotfixResponse(); foreach (ulong hotfixId in hotfixQuery.Hotfixes) { int hotfix = hotfixes.LookupByKey(hotfixId); if (hotfix != 0) { var storage = Global.DB2Mgr.GetStorage(MathFunctions.Pair64_HiPart(hotfixId)); HotfixResponse.HotfixData hotfixData = new HotfixResponse.HotfixData(); hotfixData.ID = hotfixId; hotfixData.RecordID = hotfix; if (storage.HasRecord((uint)hotfixData.RecordID)) { hotfixData.Data.HasValue = true; storage.WriteRecord((uint)hotfixData.RecordID, GetSessionDbcLocale(), hotfixData.Data.Value); } hotfixQueryResponse.Hotfixes.Add(hotfixData); } } SendPacket(hotfixQueryResponse); }
void HandleHotfixRequest(HotfixRequest hotfixQuery) { var hotfixes = Global.DB2Mgr.GetHotfixData(); HotfixConnect hotfixQueryResponse = new(); foreach (var hotfixId in hotfixQuery.Hotfixes) { var hotfixRecords = hotfixes.LookupByKey(hotfixId); if (hotfixRecords != null) { foreach (var hotfixRecord in hotfixRecords) { HotfixConnect.HotfixData hotfixData = new(); hotfixData.Record = hotfixRecord; if (hotfixRecord.HotfixStatus == HotfixRecord.Status.Valid) { var storage = Global.DB2Mgr.GetStorage(hotfixRecord.TableHash); if (storage != null && storage.HasRecord((uint)hotfixRecord.RecordID)) { var pos = hotfixQueryResponse.HotfixContent.GetSize(); storage.WriteRecord((uint)hotfixRecord.RecordID, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent); var optionalDataEntries = Global.DB2Mgr.GetHotfixOptionalData(hotfixRecord.TableHash, (uint)hotfixRecord.RecordID, GetSessionDbcLocale()); if (optionalDataEntries != null) { foreach (var optionalData in optionalDataEntries) { hotfixQueryResponse.HotfixContent.WriteUInt32(optionalData.Key); hotfixQueryResponse.HotfixContent.WriteBytes(optionalData.Data); } } hotfixData.Size = hotfixQueryResponse.HotfixContent.GetSize() - pos; } else { var blobData = Global.DB2Mgr.GetHotfixBlobData(hotfixRecord.TableHash, hotfixRecord.RecordID, GetSessionDbcLocale()); if (blobData != null) { hotfixData.Size = (uint)blobData.Length; hotfixQueryResponse.HotfixContent.WriteBytes(blobData); } else { // Do not send Status::Valid when we don't have a hotfix blob for current locale hotfixData.Record.HotfixStatus = storage != null ? HotfixRecord.Status.RecordRemoved : HotfixRecord.Status.Invalid; } } } hotfixQueryResponse.Hotfixes.Add(hotfixData); } } } SendPacket(hotfixQueryResponse); }
void HandleHotfixRequest(HotfixRequest hotfixQuery) { var hotfixes = Global.DB2Mgr.GetHotfixData(); HotfixConnect hotfixQueryResponse = new(); foreach (HotfixRecord hotfixRecord in hotfixQuery.Hotfixes) { var serverHotfixIndex = hotfixes.IndexOf(hotfixRecord); if (serverHotfixIndex != -1) { HotfixConnect.HotfixData hotfixData = new(); hotfixData.Record = hotfixes[serverHotfixIndex]; if (hotfixData.Record.HotfixStatus == HotfixRecord.Status.Valid) { var storage = Global.DB2Mgr.GetStorage(hotfixRecord.TableHash); if (storage != null && storage.HasRecord((uint)hotfixRecord.RecordID)) { uint pos = hotfixQueryResponse.HotfixContent.GetSize(); storage.WriteRecord((uint)hotfixRecord.RecordID, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent); var optionalDataEntries = Global.DB2Mgr.GetHotfixOptionalData(hotfixRecord.TableHash, (uint)hotfixRecord.RecordID, GetSessionDbcLocale()); foreach (HotfixOptionalData optionalData in optionalDataEntries) { hotfixQueryResponse.HotfixContent.WriteUInt32(optionalData.Key); hotfixQueryResponse.HotfixContent.WriteBytes(optionalData.Data); } hotfixData.Size = hotfixQueryResponse.HotfixContent.GetSize() - pos; } else { byte[] blobData = Global.DB2Mgr.GetHotfixBlobData(hotfixRecord.TableHash, hotfixRecord.RecordID, GetSessionDbcLocale()); if (blobData != null) { hotfixData.Size = (uint)blobData.Length; hotfixQueryResponse.HotfixContent.WriteBytes(blobData); } } } hotfixQueryResponse.Hotfixes.Add(hotfixData); } } SendPacket(hotfixQueryResponse); }
void HandleHotfixRequest(HotfixRequest hotfixQuery) { var hotfixes = Global.DB2Mgr.GetHotfixData(); HotfixResponse hotfixQueryResponse = new HotfixResponse(); foreach (HotfixRecord hotfixRecord in hotfixQuery.Hotfixes) { var hotfixedRecords = hotfixes.LookupByKey(hotfixRecord.HotfixID); if (!hotfixedRecords.Empty()) { foreach (var tableRecord in hotfixedRecords) { var storage = Global.DB2Mgr.GetStorage(hotfixRecord.TableHash); HotfixResponse.HotfixData hotfixData = new HotfixResponse.HotfixData(); hotfixData.Record = hotfixRecord; if (storage != null && storage.HasRecord((uint)hotfixData.Record.RecordID)) { uint pos = hotfixQueryResponse.HotfixContent.GetSize(); storage.WriteRecord((uint)hotfixData.Record.RecordID, GetSessionDbcLocale(), hotfixQueryResponse.HotfixContent); hotfixData.Size.Set(hotfixQueryResponse.HotfixContent.GetSize() - pos); } else { byte[] blobData = Global.DB2Mgr.GetHotfixBlobData(hotfixData.Record.TableHash, hotfixData.Record.RecordID); if (blobData != null) { hotfixData.Size.Set((uint)blobData.Length); hotfixQueryResponse.HotfixContent.WriteBytes(blobData); } } hotfixQueryResponse.Hotfixes.Add(hotfixData); } } } SendPacket(hotfixQueryResponse); }