示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }
示例#4
0
        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);
        }