Core/PacketIO: Updated packet structures to 9.0.5
Port From (https://github.com/TrinityCore/TrinityCore/commit/f2202869f71f5a1a35191de303ee5166e4275884)
This commit is contained in:
@@ -739,7 +739,7 @@ namespace Game.DataStorage
|
||||
hotfixRecord.RecordID = recordId;
|
||||
hotfixRecord.HotfixID = id;
|
||||
hotfixRecord.HotfixStatus = status;
|
||||
_hotfixData.Add(hotfixRecord);
|
||||
_hotfixData.Add(id, hotfixRecord);
|
||||
deletedRecords[(tableHash, recordId)] = status == HotfixRecord.Status.RecordRemoved;
|
||||
|
||||
++count;
|
||||
@@ -776,7 +776,7 @@ namespace Game.DataStorage
|
||||
var storeItr = _storage.LookupByKey(tableHash);
|
||||
if (storeItr != null)
|
||||
{
|
||||
Log.outError(LogFilter.Sql, $"Table hash 0x{tableHash:X} points to a loaded DB2 store {nameof(storeItr)}, fill related table instead of hotfix_blob");
|
||||
Log.outError(LogFilter.Sql, $"Table hash 0x{tableHash:X} points to a loaded DB2 store {storeItr.GetType().Name}, fill related table instead of hotfix_blob");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -878,11 +878,11 @@ namespace Game.DataStorage
|
||||
|
||||
public uint GetHotfixCount() { return (uint)_hotfixData.Count; }
|
||||
|
||||
public List<HotfixRecord> GetHotfixData() { return _hotfixData; }
|
||||
public MultiMap<int, HotfixRecord> GetHotfixData() { return _hotfixData; }
|
||||
|
||||
public byte[] GetHotfixBlobData(uint tableHash, int recordId, Locale locale)
|
||||
{
|
||||
Cypher.Assert(SharedConst.IsValidLocale(locale), "Locale {locale} is invalid locale");
|
||||
Cypher.Assert(SharedConst.IsValidLocale(locale), $"Locale {locale} is invalid locale");
|
||||
|
||||
return _hotfixBlob[(int)locale].LookupByKey((tableHash, recordId));
|
||||
}
|
||||
@@ -2288,7 +2288,7 @@ namespace Game.DataStorage
|
||||
delegate bool AllowedHotfixOptionalData(byte[] data);
|
||||
|
||||
Dictionary<uint, IDB2Storage> _storage = new();
|
||||
List<HotfixRecord> _hotfixData = new();
|
||||
MultiMap<int, HotfixRecord> _hotfixData = new();
|
||||
Dictionary<(uint tableHash, int recordId), byte[]>[] _hotfixBlob = new Dictionary<(uint tableHash, int recordId), byte[]>[(int)Locale.Total];
|
||||
MultiMap<uint, Tuple<uint, AllowedHotfixOptionalData>> _allowedHotfixOptionalData = new();
|
||||
MultiMap<(uint tableHash, int recordId), HotfixOptionalData>[]_hotfixOptionalData = new MultiMap<(uint tableHash, int recordId), HotfixOptionalData>[(int)Locale.Total];
|
||||
|
||||
@@ -330,6 +330,7 @@ namespace Game.Misc
|
||||
packet.Pos = pointOfInterest.Pos;
|
||||
packet.Icon = pointOfInterest.Icon;
|
||||
packet.Importance = pointOfInterest.Importance;
|
||||
packet.Unknown905 = pointOfInterest.Unknown905;
|
||||
|
||||
_session.SendPacket(packet);
|
||||
}
|
||||
@@ -772,6 +773,7 @@ namespace Game.Misc
|
||||
public uint Flags;
|
||||
public uint Importance;
|
||||
public string Name;
|
||||
public uint Unknown905;
|
||||
}
|
||||
|
||||
public class PointOfInterestLocale
|
||||
|
||||
@@ -377,7 +377,7 @@ namespace Game.Entities
|
||||
public UpdateField<uint> MaxDurability = new(0, 12);
|
||||
public UpdateField<uint> CreatePlayedTime = new(0, 13);
|
||||
public UpdateField<int> Context = new(0, 14);
|
||||
public UpdateField<int> CreateTime = new(0, 15);
|
||||
public UpdateField<long> CreateTime = new(0, 15);
|
||||
public UpdateField<ulong> ArtifactXP = new(0, 16);
|
||||
public UpdateField<byte> ItemAppearanceModID = new(0, 17);
|
||||
public UpdateField<ItemModList> Modifiers = new(0, 18);
|
||||
@@ -419,7 +419,7 @@ namespace Game.Entities
|
||||
}
|
||||
data.WriteUInt32(CreatePlayedTime);
|
||||
data.WriteInt32(Context);
|
||||
data.WriteInt32(CreateTime);
|
||||
data.WriteInt64(CreateTime);
|
||||
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner))
|
||||
{
|
||||
data.WriteUInt64(ArtifactXP);
|
||||
@@ -566,7 +566,7 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[15])
|
||||
{
|
||||
data.WriteInt32(CreateTime);
|
||||
data.WriteInt64(CreateTime);
|
||||
}
|
||||
if (changesMask[16])
|
||||
{
|
||||
@@ -3015,15 +3015,15 @@ namespace Game.Entities
|
||||
|
||||
public class PVPInfo : BaseUpdateData<Player>
|
||||
{
|
||||
public UpdateField<uint> Field_0 = new(0, 1);
|
||||
public UpdateField<uint> Field_4 = new(0, 2);
|
||||
public UpdateField<uint> Field_8 = new(0, 3);
|
||||
public UpdateField<uint> Field_C = new(0, 4);
|
||||
public UpdateField<uint> Rating = new(0, 5);
|
||||
public UpdateField<uint> Field_14 = new(0, 6);
|
||||
public UpdateField<uint> Field_18 = new(0, 7);
|
||||
public UpdateField<uint> PvpTierID = new(0, 8);
|
||||
public UpdateField<uint> Field_20 = new(0, 9);
|
||||
public UpdateField<bool> Field_20 = new(0, 1);
|
||||
public UpdateField<uint> Field_0 = new(0, 2);
|
||||
public UpdateField<uint> Field_4 = new(0, 3);
|
||||
public UpdateField<uint> Field_8 = new(0, 4);
|
||||
public UpdateField<uint> Field_C = new(0, 5);
|
||||
public UpdateField<uint> Rating = new(0, 6);
|
||||
public UpdateField<uint> Field_14 = new(0, 7);
|
||||
public UpdateField<uint> Field_18 = new(0, 8);
|
||||
public UpdateField<uint> PvpTierID = new(0, 9);
|
||||
|
||||
public PVPInfo() : base(10) { }
|
||||
|
||||
@@ -3037,7 +3037,7 @@ namespace Game.Entities
|
||||
data.WriteUInt32(Field_14);
|
||||
data.WriteUInt32(Field_18);
|
||||
data.WriteUInt32(PvpTierID);
|
||||
data.WriteBits((uint)Field_20, 1);
|
||||
data.WriteBit(Field_20);
|
||||
data.FlushBits();
|
||||
}
|
||||
|
||||
@@ -3049,44 +3049,47 @@ namespace Game.Entities
|
||||
|
||||
data.WriteBits(changesMask.GetBlock(0), 10);
|
||||
|
||||
data.FlushBits();
|
||||
if (changesMask[0])
|
||||
{
|
||||
if (changesMask[1])
|
||||
{
|
||||
data.WriteUInt32(Field_0);
|
||||
data.WriteBit(Field_20);
|
||||
}
|
||||
}
|
||||
data.FlushBits();
|
||||
if (changesMask[0])
|
||||
{
|
||||
if (changesMask[2])
|
||||
{
|
||||
data.WriteUInt32(Field_4);
|
||||
data.WriteUInt32(Field_0);
|
||||
}
|
||||
if (changesMask[3])
|
||||
{
|
||||
data.WriteUInt32(Field_8);
|
||||
data.WriteUInt32(Field_4);
|
||||
}
|
||||
if (changesMask[4])
|
||||
{
|
||||
data.WriteUInt32(Field_C);
|
||||
data.WriteUInt32(Field_8);
|
||||
}
|
||||
if (changesMask[5])
|
||||
{
|
||||
data.WriteUInt32(Rating);
|
||||
data.WriteUInt32(Field_C);
|
||||
}
|
||||
if (changesMask[6])
|
||||
{
|
||||
data.WriteUInt32(Field_14);
|
||||
data.WriteUInt32(Rating);
|
||||
}
|
||||
if (changesMask[7])
|
||||
{
|
||||
data.WriteUInt32(Field_18);
|
||||
data.WriteUInt32(Field_14);
|
||||
}
|
||||
if (changesMask[8])
|
||||
{
|
||||
data.WriteUInt32(PvpTierID);
|
||||
data.WriteUInt32(Field_18);
|
||||
}
|
||||
if (changesMask[9])
|
||||
{
|
||||
data.WriteBits(Field_20, 1);
|
||||
data.WriteUInt32(PvpTierID);
|
||||
}
|
||||
}
|
||||
data.FlushBits();
|
||||
@@ -3094,6 +3097,7 @@ namespace Game.Entities
|
||||
|
||||
public override void ClearChangesMask()
|
||||
{
|
||||
ClearChangesMask(Field_20);
|
||||
ClearChangesMask(Field_0);
|
||||
ClearChangesMask(Field_4);
|
||||
ClearChangesMask(Field_8);
|
||||
@@ -3102,7 +3106,6 @@ namespace Game.Entities
|
||||
ClearChangesMask(Field_14);
|
||||
ClearChangesMask(Field_18);
|
||||
ClearChangesMask(PvpTierID);
|
||||
ClearChangesMask(Field_20);
|
||||
_changesMask.ResetAll();
|
||||
}
|
||||
}
|
||||
@@ -3495,37 +3498,38 @@ namespace Game.Entities
|
||||
public UpdateField<ulong> GuildClubMemberID = new(98, 101);
|
||||
public UpdateField<uint> Honor = new(98, 102);
|
||||
public UpdateField<uint> HonorNextLevel = new(98, 103);
|
||||
public UpdateField<int> PvpRewardAchieved = new(98, 104);
|
||||
public UpdateField<long> PvpRewardAchieved = new(98, 104);
|
||||
public UpdateField<int> PvpTierMaxFromWins = new(98, 105);
|
||||
public UpdateField<int> PvpLastWeeksRewardAchieved = new(98, 106);
|
||||
public UpdateField<long> PvpLastWeeksRewardAchieved = new(98, 106);
|
||||
public UpdateField<int> PvpLastWeeksTierMaxFromWins = new(98, 107);
|
||||
public UpdateField<int> PvpLastWeeksRewardClaimed = new(98, 108);
|
||||
public UpdateField<long> PvpLastWeeksRewardClaimed = new(98, 108);
|
||||
public UpdateField<byte> NumBankSlots = new(98, 109);
|
||||
public UpdateField<ActivePlayerUnk901> Field_1410 = new(98, 111);
|
||||
public UpdateField<Optional<QuestSession>> QuestSession = new(98, 110);
|
||||
public UpdateField<int> UiChromieTimeExpansionID = new(98, 112);
|
||||
public UpdateField<int> TransportServerTime = new(98, 113);
|
||||
public UpdateFieldArray<ObjectGuid> InvSlots = new(199, 114, 115);
|
||||
public UpdateFieldArray<uint> TrackResourceMask = new(2, 314, 315);
|
||||
public UpdateFieldArray<ulong> ExploredZones = new(192, 317, 318);
|
||||
public UpdateFieldArray<RestInfo> RestInfo = new(2, 510, 511);
|
||||
public UpdateFieldArray<int> ModDamageDonePos = new(7, 513, 514);
|
||||
public UpdateFieldArray<int> ModDamageDoneNeg = new(7, 513, 521);
|
||||
public UpdateFieldArray<float> ModDamageDonePercent = new(7, 513, 528);
|
||||
public UpdateFieldArray<float> ModHealingDonePercent = new(7, 513, 535);
|
||||
public UpdateFieldArray<float> WeaponDmgMultipliers = new(3, 542, 543);
|
||||
public UpdateFieldArray<float> WeaponAtkSpeedMultipliers = new(3, 542, 546);
|
||||
public UpdateFieldArray<uint> BuybackPrice = new(12, 549, 550);
|
||||
public UpdateFieldArray<uint> BuybackTimestamp = new(12, 549, 562);
|
||||
public UpdateFieldArray<uint> CombatRatings = new(32, 574, 575);
|
||||
public UpdateFieldArray<PVPInfo> PvpInfo = new(6, 607, 608);
|
||||
public UpdateFieldArray<uint> NoReagentCostMask = new(4, 614, 615);
|
||||
public UpdateFieldArray<uint> ProfessionSkillLine = new(2, 619, 620);
|
||||
public UpdateFieldArray<uint> BagSlotFlags = new(4, 622, 623);
|
||||
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 627, 628);
|
||||
public UpdateFieldArray<ulong> QuestCompleted = new(875, 635, 636);
|
||||
public UpdateField<uint> WeeklyRewardsPeriodSinceOrigin = new(98, 114); // week count since Cfg_RegionsEntry::ChallengeOrigin
|
||||
public UpdateFieldArray<ObjectGuid> InvSlots = new(199, 115, 116);
|
||||
public UpdateFieldArray<uint> TrackResourceMask = new(2, 315, 316);
|
||||
public UpdateFieldArray<ulong> ExploredZones = new(192, 318, 319);
|
||||
public UpdateFieldArray<RestInfo> RestInfo = new(2, 511, 512);
|
||||
public UpdateFieldArray<int> ModDamageDonePos = new(7, 514, 515);
|
||||
public UpdateFieldArray<int> ModDamageDoneNeg = new(7, 514, 522);
|
||||
public UpdateFieldArray<float> ModDamageDonePercent = new(7, 514, 529);
|
||||
public UpdateFieldArray<float> ModHealingDonePercent = new(7, 514, 536);
|
||||
public UpdateFieldArray<float> WeaponDmgMultipliers = new(3, 543, 544);
|
||||
public UpdateFieldArray<float> WeaponAtkSpeedMultipliers = new(3, 543, 547);
|
||||
public UpdateFieldArray<uint> BuybackPrice = new(12, 550, 551);
|
||||
public UpdateFieldArray<uint> BuybackTimestamp = new(12, 550, 563);
|
||||
public UpdateFieldArray<uint> CombatRatings = new(32, 575, 576);
|
||||
public UpdateFieldArray<PVPInfo> PvpInfo = new(6, 608, 609);
|
||||
public UpdateFieldArray<uint> NoReagentCostMask = new(4, 615, 616);
|
||||
public UpdateFieldArray<uint> ProfessionSkillLine = new(2, 620, 621);
|
||||
public UpdateFieldArray<uint> BagSlotFlags = new(4, 623, 624);
|
||||
public UpdateFieldArray<uint> BankBagSlotFlags = new(7, 628, 629);
|
||||
public UpdateFieldArray<ulong> QuestCompleted = new(875, 636, 637);
|
||||
|
||||
public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1511) { }
|
||||
public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1512) { }
|
||||
|
||||
public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver)
|
||||
{
|
||||
@@ -3659,11 +3663,11 @@ namespace Game.Entities
|
||||
}
|
||||
data.WriteUInt32(Honor);
|
||||
data.WriteUInt32(HonorNextLevel);
|
||||
data.WriteInt32(PvpRewardAchieved);
|
||||
data.WriteInt64(PvpRewardAchieved);
|
||||
data.WriteInt32(PvpTierMaxFromWins);
|
||||
data.WriteInt32(PvpLastWeeksRewardAchieved);
|
||||
data.WriteInt64(PvpLastWeeksRewardAchieved);
|
||||
data.WriteInt32(PvpLastWeeksTierMaxFromWins);
|
||||
data.WriteInt32(PvpLastWeeksRewardClaimed);
|
||||
data.WriteInt64(PvpLastWeeksRewardClaimed);
|
||||
data.WriteUInt8(NumBankSlots);
|
||||
data.WriteInt32(ResearchSites.Size());
|
||||
data.WriteInt32(ResearchSiteProgress.Size());
|
||||
@@ -3696,6 +3700,7 @@ namespace Game.Entities
|
||||
data.WriteInt32(DisabledSpells.Size());
|
||||
data.WriteInt32(UiChromieTimeExpansionID);
|
||||
data.WriteInt32(TransportServerTime);
|
||||
data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin);
|
||||
for (int i = 0; i < KnownTitles.Size(); ++i)
|
||||
{
|
||||
data.WriteUInt64(KnownTitles[i]);
|
||||
@@ -3975,6 +3980,7 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
}
|
||||
data.FlushBits();
|
||||
if (changesMask[0])
|
||||
{
|
||||
if (changesMask[22])
|
||||
@@ -4535,7 +4541,7 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[104])
|
||||
{
|
||||
data.WriteInt32(PvpRewardAchieved);
|
||||
data.WriteInt64(PvpRewardAchieved);
|
||||
}
|
||||
if (changesMask[105])
|
||||
{
|
||||
@@ -4543,7 +4549,7 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[106])
|
||||
{
|
||||
data.WriteInt32(PvpLastWeeksRewardAchieved);
|
||||
data.WriteInt64(PvpLastWeeksRewardAchieved);
|
||||
}
|
||||
if (changesMask[107])
|
||||
{
|
||||
@@ -4551,7 +4557,7 @@ namespace Game.Entities
|
||||
}
|
||||
if (changesMask[108])
|
||||
{
|
||||
data.WriteInt32(PvpLastWeeksRewardClaimed);
|
||||
data.WriteInt64(PvpLastWeeksRewardClaimed);
|
||||
}
|
||||
if (changesMask[109])
|
||||
{
|
||||
@@ -4565,6 +4571,10 @@ namespace Game.Entities
|
||||
{
|
||||
data.WriteInt32(TransportServerTime);
|
||||
}
|
||||
if (changesMask[114])
|
||||
{
|
||||
data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin);
|
||||
}
|
||||
}
|
||||
if (changesMask[98])
|
||||
{
|
||||
@@ -4581,161 +4591,161 @@ namespace Game.Entities
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[114])
|
||||
if (changesMask[115])
|
||||
{
|
||||
for (int i = 0; i < 199; ++i)
|
||||
{
|
||||
if (changesMask[115 + i])
|
||||
if (changesMask[116 + i])
|
||||
{
|
||||
data.WritePackedGuid(InvSlots[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[314])
|
||||
if (changesMask[315])
|
||||
{
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
if (changesMask[315 + i])
|
||||
if (changesMask[316 + i])
|
||||
{
|
||||
data.WriteUInt32(TrackResourceMask[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[317])
|
||||
if (changesMask[318])
|
||||
{
|
||||
for (int i = 0; i < 192; ++i)
|
||||
{
|
||||
if (changesMask[318 + i])
|
||||
if (changesMask[319 + i])
|
||||
{
|
||||
data.WriteUInt64(ExploredZones[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[510])
|
||||
if (changesMask[511])
|
||||
{
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
if (changesMask[511 + i])
|
||||
if (changesMask[512 + i])
|
||||
{
|
||||
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[513])
|
||||
if (changesMask[514])
|
||||
{
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
if (changesMask[514 + i])
|
||||
if (changesMask[515 + i])
|
||||
{
|
||||
data.WriteInt32(ModDamageDonePos[i]);
|
||||
}
|
||||
if (changesMask[521 + i])
|
||||
if (changesMask[522 + i])
|
||||
{
|
||||
data.WriteInt32(ModDamageDoneNeg[i]);
|
||||
}
|
||||
if (changesMask[528 + i])
|
||||
if (changesMask[529 + i])
|
||||
{
|
||||
data.WriteFloat(ModDamageDonePercent[i]);
|
||||
}
|
||||
if (changesMask[535 + i])
|
||||
if (changesMask[536 + i])
|
||||
{
|
||||
data.WriteFloat(ModHealingDonePercent[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[542])
|
||||
if (changesMask[543])
|
||||
{
|
||||
for (int i = 0; i < 3; ++i)
|
||||
{
|
||||
if (changesMask[543 + i])
|
||||
if (changesMask[544 + i])
|
||||
{
|
||||
data.WriteFloat(WeaponDmgMultipliers[i]);
|
||||
}
|
||||
if (changesMask[546 + i])
|
||||
if (changesMask[547 + i])
|
||||
{
|
||||
data.WriteFloat(WeaponAtkSpeedMultipliers[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[549])
|
||||
if (changesMask[550])
|
||||
{
|
||||
for (int i = 0; i < 12; ++i)
|
||||
{
|
||||
if (changesMask[550 + i])
|
||||
if (changesMask[551 + i])
|
||||
{
|
||||
data.WriteUInt32(BuybackPrice[i]);
|
||||
}
|
||||
if (changesMask[562 + i])
|
||||
if (changesMask[563 + i])
|
||||
{
|
||||
data.WriteUInt32(BuybackTimestamp[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[574])
|
||||
if (changesMask[575])
|
||||
{
|
||||
for (int i = 0; i < 32; ++i)
|
||||
{
|
||||
if (changesMask[575 + i])
|
||||
if (changesMask[576 + i])
|
||||
{
|
||||
data.WriteUInt32(CombatRatings[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[614])
|
||||
if (changesMask[615])
|
||||
{
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
if (changesMask[615 + i])
|
||||
if (changesMask[616 + i])
|
||||
{
|
||||
data.WriteUInt32(NoReagentCostMask[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[619])
|
||||
if (changesMask[620])
|
||||
{
|
||||
for (int i = 0; i < 2; ++i)
|
||||
{
|
||||
if (changesMask[620 + i])
|
||||
if (changesMask[621 + i])
|
||||
{
|
||||
data.WriteUInt32(ProfessionSkillLine[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[622])
|
||||
if (changesMask[623])
|
||||
{
|
||||
for (int i = 0; i < 4; ++i)
|
||||
{
|
||||
if (changesMask[623 + i])
|
||||
if (changesMask[624 + i])
|
||||
{
|
||||
data.WriteUInt32(BagSlotFlags[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[627])
|
||||
if (changesMask[628])
|
||||
{
|
||||
for (int i = 0; i < 7; ++i)
|
||||
{
|
||||
if (changesMask[628 + i])
|
||||
if (changesMask[629 + i])
|
||||
{
|
||||
data.WriteUInt32(BankBagSlotFlags[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[635])
|
||||
if (changesMask[636])
|
||||
{
|
||||
for (int i = 0; i < 875; ++i)
|
||||
{
|
||||
if (changesMask[636 + i])
|
||||
if (changesMask[637 + i])
|
||||
{
|
||||
data.WriteUInt64(QuestCompleted[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (changesMask[607])
|
||||
if (changesMask[608])
|
||||
{
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
if (changesMask[608 + i])
|
||||
if (changesMask[609 + i])
|
||||
{
|
||||
PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
|
||||
}
|
||||
@@ -4855,6 +4865,7 @@ namespace Game.Entities
|
||||
ClearChangesMask(QuestSession);
|
||||
ClearChangesMask(UiChromieTimeExpansionID);
|
||||
ClearChangesMask(TransportServerTime);
|
||||
ClearChangesMask(WeeklyRewardsPeriodSinceOrigin);
|
||||
ClearChangesMask(InvSlots);
|
||||
ClearChangesMask(TrackResourceMask);
|
||||
ClearChangesMask(ExploredZones);
|
||||
|
||||
@@ -598,6 +598,7 @@ namespace Game.Entities
|
||||
//if (flags.SmoothPhasing)
|
||||
//{
|
||||
// data.WriteBit(ReplaceActive);
|
||||
// data.WriteBit(StopAnimKits);
|
||||
// data.WriteBit(HasReplaceObjectt);
|
||||
// data.FlushBits();
|
||||
// if (HasReplaceObject)
|
||||
|
||||
@@ -195,6 +195,7 @@ namespace Game.Entities
|
||||
UpdateSplineMovement(diff);
|
||||
GetMotionMaster().UpdateMotion(diff);
|
||||
}
|
||||
|
||||
void _UpdateSpells(uint diff)
|
||||
{
|
||||
if (GetCurrentSpell(CurrentSpellTypes.AutoRepeat) != null)
|
||||
@@ -250,13 +251,20 @@ namespace Game.Entities
|
||||
_spellHistory.Update();
|
||||
}
|
||||
|
||||
public void HandleEmoteCommand(Emote anim_id)
|
||||
public void HandleEmoteCommand(Emote animId, uint[] spellVisualKitIds = null)
|
||||
{
|
||||
EmoteMessage packet = new();
|
||||
packet.Guid = GetGUID();
|
||||
packet.EmoteID = (int)anim_id;
|
||||
packet.EmoteID = (uint)animId;
|
||||
|
||||
var emotesEntry = CliDB.EmotesStorage.LookupByKey(animId);
|
||||
if (emotesEntry != null && spellVisualKitIds != null)
|
||||
if (emotesEntry.AnimId == (uint)Anim.MountSpecial || emotesEntry.AnimId == (uint)Anim.MountSelfSpecial)
|
||||
packet.SpellVisualKitIDs.AddRange(spellVisualKitIds);
|
||||
|
||||
SendMessageToSet(packet, true);
|
||||
}
|
||||
|
||||
public void SendDurabilityLoss(Player receiver, uint percent)
|
||||
{
|
||||
DurabilityDamageDeath packet = new();
|
||||
|
||||
@@ -717,8 +717,8 @@ namespace Game
|
||||
|
||||
pointsOfInterestStorage.Clear(); // need for reload case
|
||||
|
||||
// 0 1 2 3 4 5 6
|
||||
SQLResult result = DB.World.Query("SELECT ID, PositionX, PositionY, Icon, Flags, Importance, Name FROM points_of_interest");
|
||||
// 0 1 2 3 4 5 6 7
|
||||
SQLResult result = DB.World.Query("SELECT ID, PositionX, PositionY, Icon, Flags, Importance, Name, Unknown905 FROM points_of_interest");
|
||||
|
||||
if (result.IsEmpty())
|
||||
{
|
||||
@@ -738,10 +738,11 @@ namespace Game
|
||||
POI.Flags = result.Read<uint>(4);
|
||||
POI.Importance = result.Read<uint>(5);
|
||||
POI.Name = result.Read<string>(6);
|
||||
POI.Unknown905 = result.Read<uint>(7);
|
||||
|
||||
if (!GridDefines.IsValidMapCoord(POI.Pos.X, POI.Pos.Y))
|
||||
{
|
||||
Log.outError(LogFilter.Sql, "Table `points_of_interest` (ID: {0}) have invalid coordinates (PositionX: {1} PositionY: {2}), ignored.", id, POI.Pos.X, POI.Pos.Y);
|
||||
Log.outError(LogFilter.Sql, $"Table `points_of_interest` (ID: {id}) have invalid coordinates (PositionX: {POI.Pos.X} PositionY: {POI.Pos.Y}), ignored.");
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -750,7 +751,7 @@ namespace Game
|
||||
++count;
|
||||
} while (result.NextRow());
|
||||
|
||||
Log.outInfo(LogFilter.ServerLoading, "Loaded {0} Points of Interest definitions in {1} ms", count, Time.GetMSTimeDiffToNow(oldMSTime));
|
||||
Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} Points of Interest definitions in {Time.GetMSTimeDiffToNow(oldMSTime)} ms");
|
||||
}
|
||||
|
||||
public List<GossipMenus> GetGossipMenusMapBounds(uint uiMenuId)
|
||||
|
||||
@@ -588,7 +588,7 @@ namespace Game
|
||||
// Only allow text-emotes for "dead" entities (feign death included)
|
||||
if (GetPlayer().HasUnitState(UnitState.Died))
|
||||
break;
|
||||
GetPlayer().HandleEmoteCommand(emoteAnim);
|
||||
GetPlayer().HandleEmoteCommand(emoteAnim, packet.SpellVisualKitIDs);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ namespace Game
|
||||
|
||||
void SendAvailableHotfixes()
|
||||
{
|
||||
SendPacket(new AvailableHotfixes(Global.WorldMgr.GetRealmId().GetAddress(), Global.DB2Mgr.GetHotfixCount(), Global.DB2Mgr.GetHotfixData()));
|
||||
SendPacket(new AvailableHotfixes(Global.WorldMgr.GetRealmId().GetAddress(), Global.DB2Mgr.GetHotfixData()));
|
||||
}
|
||||
|
||||
[WorldPacketHandler(ClientOpcodes.HotfixRequest, Status = SessionStatus.Authed)]
|
||||
@@ -70,42 +70,48 @@ namespace Game
|
||||
var hotfixes = Global.DB2Mgr.GetHotfixData();
|
||||
|
||||
HotfixConnect hotfixQueryResponse = new();
|
||||
foreach (HotfixRecord hotfixRecord in hotfixQuery.Hotfixes)
|
||||
foreach (var hotfixId in hotfixQuery.Hotfixes)
|
||||
{
|
||||
var serverHotfixIndex = hotfixes.IndexOf(hotfixRecord);
|
||||
if (serverHotfixIndex != -1)
|
||||
var hotfixRecords = hotfixes.LookupByKey(hotfixId);
|
||||
if (hotfixRecords != null)
|
||||
{
|
||||
HotfixConnect.HotfixData hotfixData = new();
|
||||
hotfixData.Record = hotfixes[serverHotfixIndex];
|
||||
if (hotfixData.Record.HotfixStatus == HotfixRecord.Status.Valid)
|
||||
foreach (var hotfixRecord in hotfixRecords)
|
||||
{
|
||||
var storage = Global.DB2Mgr.GetStorage(hotfixRecord.TableHash);
|
||||
if (storage != null && storage.HasRecord((uint)hotfixRecord.RecordID))
|
||||
HotfixConnect.HotfixData hotfixData = new HotfixConnect.HotfixData();
|
||||
hotfixData.Record = hotfixRecord;
|
||||
if (hotfixRecord.HotfixStatus == HotfixRecord.Status.Valid)
|
||||
{
|
||||
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)
|
||||
var storage = Global.DB2Mgr.GetStorage(hotfixRecord.TableHash);
|
||||
if (storage != null && storage.HasRecord((uint)hotfixRecord.RecordID))
|
||||
{
|
||||
hotfixQueryResponse.HotfixContent.WriteUInt32(optionalData.Key);
|
||||
hotfixQueryResponse.HotfixContent.WriteBytes(optionalData.Data);
|
||||
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;
|
||||
}
|
||||
|
||||
hotfixData.Size = hotfixQueryResponse.HotfixContent.GetSize() - pos;
|
||||
}
|
||||
else
|
||||
{
|
||||
byte[] blobData = Global.DB2Mgr.GetHotfixBlobData(hotfixRecord.TableHash, hotfixRecord.RecordID, GetSessionDbcLocale());
|
||||
if (blobData != null)
|
||||
else
|
||||
{
|
||||
hotfixData.Size = (uint)blobData.Length;
|
||||
hotfixQueryResponse.HotfixContent.WriteBytes(blobData);
|
||||
var 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);
|
||||
}
|
||||
|
||||
hotfixQueryResponse.Hotfixes.Add(hotfixData);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -419,6 +419,7 @@ namespace Game
|
||||
{
|
||||
SpecialMountAnim specialMountAnim = new();
|
||||
specialMountAnim.UnitGUID = _player.GetGUID();
|
||||
specialMountAnim.SpellVisualKitIDs.AddRange(mountSpecial.SpellVisualKitIDs);
|
||||
GetPlayer().SendMessageToSet(specialMountAnim, false);
|
||||
}
|
||||
|
||||
|
||||
@@ -189,6 +189,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteUInt32(progress.DateCreated);
|
||||
_worldPacket.WriteUInt32(progress.DateStarted);
|
||||
_worldPacket.WritePackedTime(progress.DateUpdated);
|
||||
_worldPacket.WriteUInt32(0); // this is a hack. this is a packed time written as int64 (progress.DateUpdated)
|
||||
_worldPacket.WriteUInt64(progress.Quantity);
|
||||
_worldPacket.WritePackedGuid(progress.PlayerGUID);
|
||||
_worldPacket.WriteInt32(progress.Flags);
|
||||
|
||||
@@ -16,10 +16,11 @@
|
||||
*/
|
||||
|
||||
using Framework.Constants;
|
||||
using Framework.Dynamic;
|
||||
using Game.Entities;
|
||||
using Game.Groups;
|
||||
using System;
|
||||
using Framework.Dynamic;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Game.Networking.Packets
|
||||
{
|
||||
@@ -269,11 +270,16 @@ namespace Game.Networking.Packets
|
||||
public override void Write()
|
||||
{
|
||||
_worldPacket.WritePackedGuid(Guid);
|
||||
_worldPacket.WriteInt32(EmoteID);
|
||||
_worldPacket.WriteUInt32(EmoteID);
|
||||
_worldPacket.WriteInt32(SpellVisualKitIDs.Count);
|
||||
|
||||
foreach (var id in SpellVisualKitIDs)
|
||||
_worldPacket.WriteUInt32(id);
|
||||
}
|
||||
|
||||
public ObjectGuid Guid;
|
||||
public int EmoteID;
|
||||
public uint EmoteID;
|
||||
public List<uint> SpellVisualKitIDs = new();
|
||||
}
|
||||
|
||||
public class CTextEmote : ClientPacket
|
||||
@@ -285,11 +291,16 @@ namespace Game.Networking.Packets
|
||||
Target = _worldPacket.ReadPackedGuid();
|
||||
EmoteID = _worldPacket.ReadInt32();
|
||||
SoundIndex = _worldPacket.ReadInt32();
|
||||
|
||||
SpellVisualKitIDs = new uint[_worldPacket.ReadUInt32()];
|
||||
for (var i = 0; i < SpellVisualKitIDs.Length; ++i)
|
||||
SpellVisualKitIDs[i] = _worldPacket.ReadUInt32();
|
||||
}
|
||||
|
||||
public ObjectGuid Target;
|
||||
public int EmoteID;
|
||||
public int SoundIndex;
|
||||
public uint[] SpellVisualKitIDs;
|
||||
}
|
||||
|
||||
public class STextEmote : ServerPacket
|
||||
|
||||
@@ -138,7 +138,7 @@ namespace Game.Networking.Packets
|
||||
|
||||
class GameObjectUILink : ServerPacket
|
||||
{
|
||||
public GameObjectUILink() : base(ServerOpcodes.GameObjectUILink, ConnectionType.Instance) { }
|
||||
public GameObjectUILink() : base(ServerOpcodes.GameObjectUiLink, ConnectionType.Instance) { }
|
||||
|
||||
public override void Write()
|
||||
{
|
||||
|
||||
@@ -405,12 +405,12 @@ namespace Game.Networking.Packets
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteUInt64(DbID);
|
||||
data.WriteUInt32(MissionRecID);
|
||||
data.WriteUInt32((uint)OfferTime);
|
||||
data.WriteUInt32(OfferDuration);
|
||||
data.WriteUInt32((uint)StartTime);
|
||||
data.WriteUInt32(TravelDuration);
|
||||
data.WriteUInt32(MissionDuration);
|
||||
data.WriteUInt32(MissionRecID);
|
||||
data.WriteUInt32(MissionState);
|
||||
data.WriteUInt32(SuccessChance);
|
||||
data.WriteUInt32(Flags);
|
||||
@@ -462,8 +462,8 @@ namespace Game.Networking.Packets
|
||||
{
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteUInt32(GarrMssnBonusAbilityID);
|
||||
data.WriteUInt32((uint)StartTime);
|
||||
data.WriteUInt32(GarrMssnBonusAbilityID);
|
||||
}
|
||||
|
||||
public uint GarrMssnBonusAbilityID;
|
||||
@@ -533,12 +533,12 @@ namespace Game.Networking.Packets
|
||||
struct GarrisonEventEntry
|
||||
{
|
||||
public int EntryID;
|
||||
public int EventValue;
|
||||
public long EventValue;
|
||||
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteInt64(EventValue);
|
||||
data.WriteInt32(EntryID);
|
||||
data.WriteInt32(EventValue);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -578,6 +578,7 @@ namespace Game.Networking.Packets
|
||||
data.WriteInt32(ArchivedMissions.Count);
|
||||
data.WriteUInt32(NumFollowerActivationsRemaining);
|
||||
data.WriteUInt32(NumMissionsStartedToday);
|
||||
data.WriteInt32(MinAutoTroopLevel);
|
||||
|
||||
foreach (GarrisonPlotInfo plot in Plots)
|
||||
plot.Write(data);
|
||||
@@ -634,6 +635,7 @@ namespace Game.Networking.Packets
|
||||
public uint GarrSiteLevelID;
|
||||
public uint NumFollowerActivationsRemaining;
|
||||
public uint NumMissionsStartedToday; // might mean something else, but sending 0 here enables follower abilities "Increase success chance of the first mission of the day by %."
|
||||
public int MinAutoTroopLevel;
|
||||
public List<GarrisonPlotInfo> Plots = new();
|
||||
public List<GarrisonBuildingInfo> Buildings = new();
|
||||
public List<GarrisonFollower> Followers = new();
|
||||
|
||||
@@ -78,25 +78,24 @@ namespace Game.Networking.Packets
|
||||
|
||||
class AvailableHotfixes : ServerPacket
|
||||
{
|
||||
public AvailableHotfixes(uint virtualRealmAddress, uint hotfixCount, List<HotfixRecord> hotfixes) : base(ServerOpcodes.AvailableHotfixes)
|
||||
public AvailableHotfixes(uint virtualRealmAddress, MultiMap<int, HotfixRecord> hotfixes) : base(ServerOpcodes.AvailableHotfixes)
|
||||
{
|
||||
VirtualRealmAddress = virtualRealmAddress;
|
||||
HotfixCount = hotfixCount;
|
||||
Hotfixes = hotfixes;
|
||||
}
|
||||
|
||||
public override void Write()
|
||||
{
|
||||
_worldPacket.WriteUInt32(VirtualRealmAddress);
|
||||
_worldPacket.WriteUInt32(HotfixCount);
|
||||
_worldPacket.WriteInt32(Hotfixes.Count);
|
||||
|
||||
foreach (HotfixRecord hotfixRecord in Hotfixes)
|
||||
hotfixRecord.Write(_worldPacket);
|
||||
foreach (var pair in Hotfixes)
|
||||
_worldPacket.WriteInt32(pair.Key);
|
||||
}
|
||||
|
||||
public uint VirtualRealmAddress;
|
||||
public uint HotfixCount;
|
||||
public List<HotfixRecord> Hotfixes;
|
||||
public MultiMap<int, HotfixRecord> Hotfixes;
|
||||
}
|
||||
|
||||
class HotfixRequest : ClientPacket
|
||||
@@ -110,16 +109,12 @@ namespace Game.Networking.Packets
|
||||
|
||||
uint hotfixCount = _worldPacket.ReadUInt32();
|
||||
for (var i = 0; i < hotfixCount; ++i)
|
||||
{
|
||||
HotfixRecord hotfixRecord = new();
|
||||
hotfixRecord.Read(_worldPacket);
|
||||
Hotfixes.Add(hotfixRecord);
|
||||
}
|
||||
Hotfixes.Add(_worldPacket.ReadInt32());
|
||||
}
|
||||
|
||||
public uint ClientBuild;
|
||||
public uint DataBuild;
|
||||
public List<HotfixRecord> Hotfixes = new();
|
||||
public List<int> Hotfixes = new();
|
||||
}
|
||||
|
||||
class HotfixConnect : ServerPacket
|
||||
|
||||
@@ -1162,7 +1162,14 @@ namespace Game.Networking.Packets
|
||||
{
|
||||
public MountSpecial(WorldPacket packet) : base(packet) { }
|
||||
|
||||
public override void Read() { }
|
||||
public override void Read()
|
||||
{
|
||||
SpellVisualKitIDs = new int[_worldPacket.ReadUInt32()];
|
||||
for (var i = 0; i < SpellVisualKitIDs.Length; ++i)
|
||||
SpellVisualKitIDs[i] = _worldPacket.ReadInt32();
|
||||
}
|
||||
|
||||
public int[] SpellVisualKitIDs;
|
||||
}
|
||||
|
||||
class SpecialMountAnim : ServerPacket
|
||||
@@ -1172,9 +1179,13 @@ namespace Game.Networking.Packets
|
||||
public override void Write()
|
||||
{
|
||||
_worldPacket.WritePackedGuid(UnitGUID);
|
||||
_worldPacket.WriteInt32(SpellVisualKitIDs.Count);
|
||||
foreach (var id in SpellVisualKitIDs)
|
||||
_worldPacket.WriteInt32(id);
|
||||
}
|
||||
|
||||
public ObjectGuid UnitGUID;
|
||||
public List<int> SpellVisualKitIDs = new();
|
||||
}
|
||||
|
||||
class CrossedInebriationThreshold : ServerPacket
|
||||
|
||||
@@ -209,6 +209,7 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteFloat(Pos.Y);
|
||||
_worldPacket.WriteUInt32(Icon);
|
||||
_worldPacket.WriteUInt32(Importance);
|
||||
_worldPacket.WriteUInt32(Unknown905);
|
||||
_worldPacket.WriteBits(Flags, 14);
|
||||
_worldPacket.WriteBits(Name.GetByteCount(), 6);
|
||||
_worldPacket.FlushBits();
|
||||
@@ -220,6 +221,7 @@ namespace Game.Networking.Packets
|
||||
public Vector2 Pos;
|
||||
public uint Icon;
|
||||
public uint Importance;
|
||||
public uint Unknown905;
|
||||
public string Name;
|
||||
}
|
||||
|
||||
|
||||
@@ -61,10 +61,10 @@ namespace Game.Networking.Packets
|
||||
foreach (var c in Cases)
|
||||
{
|
||||
_worldPacket.WriteInt32(c.CaseID);
|
||||
_worldPacket.WriteInt32(c.CaseOpened);
|
||||
_worldPacket.WriteUInt32(c.CaseOpened);
|
||||
_worldPacket.WriteInt32(c.CaseStatus);
|
||||
_worldPacket.WriteInt16(c.CfgRealmID);
|
||||
_worldPacket.WriteInt64(c.CharacterID);
|
||||
_worldPacket.WriteUInt16(c.CfgRealmID);
|
||||
_worldPacket.WriteUInt64(c.CharacterID);
|
||||
_worldPacket.WriteInt32(c.WaitTimeOverrideMinutes);
|
||||
|
||||
_worldPacket.WriteBits(c.Url.GetByteCount(), 11);
|
||||
@@ -80,10 +80,10 @@ namespace Game.Networking.Packets
|
||||
public struct GMTicketCase
|
||||
{
|
||||
public int CaseID;
|
||||
public int CaseOpened;
|
||||
public uint CaseOpened;
|
||||
public int CaseStatus;
|
||||
public short CfgRealmID;
|
||||
public long CharacterID;
|
||||
public ushort CfgRealmID;
|
||||
public ulong CharacterID;
|
||||
public int WaitTimeOverrideMinutes;
|
||||
public string Url;
|
||||
public string WaitTimeOverrideMessage;
|
||||
|
||||
@@ -42,27 +42,27 @@ namespace Game.Networking.Packets
|
||||
_worldPacket.WriteUInt32((uint)Result);
|
||||
_worldPacket.WriteInt32(AuctionableTokenAuctionableList.Count);
|
||||
|
||||
foreach (AuctionableTokenAuctionable auctionableTokenAuctionable in AuctionableTokenAuctionableList)
|
||||
foreach (AuctionableTokenInfo auctionableTokenAuctionable in AuctionableTokenAuctionableList)
|
||||
{
|
||||
_worldPacket.WriteUInt64(auctionableTokenAuctionable.UnkInt1);
|
||||
_worldPacket.WriteUInt32(auctionableTokenAuctionable.UnkInt2);
|
||||
_worldPacket.WriteUInt32(auctionableTokenAuctionable.Owner);
|
||||
_worldPacket.WriteUInt64(auctionableTokenAuctionable.BuyoutPrice);
|
||||
_worldPacket.WriteUInt32(auctionableTokenAuctionable.EndTime);
|
||||
_worldPacket.WriteUInt32(auctionableTokenAuctionable.Owner);
|
||||
_worldPacket.WriteUInt32(auctionableTokenAuctionable.DurationLeft);
|
||||
}
|
||||
}
|
||||
|
||||
public uint UnkInt; // send CMSG_UPDATE_WOW_TOKEN_AUCTIONABLE_LIST
|
||||
public TokenResult Result;
|
||||
List<AuctionableTokenAuctionable> AuctionableTokenAuctionableList =new();
|
||||
List<AuctionableTokenInfo> AuctionableTokenAuctionableList = new();
|
||||
|
||||
struct AuctionableTokenAuctionable
|
||||
struct AuctionableTokenInfo
|
||||
{
|
||||
public ulong UnkInt1;
|
||||
public uint UnkInt2;
|
||||
public uint Owner;
|
||||
public ulong BuyoutPrice;
|
||||
public uint EndTime;
|
||||
public uint DurationLeft;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user