Updated to 7.3.5.25996 (Db2 files not updated)
This commit is contained in:
@@ -132,18 +132,11 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteUInt8(SuccessInfo.Value.ActiveExpansionLevel);
|
||||
_worldPacket.WriteUInt8(SuccessInfo.Value.AccountExpansionLevel);
|
||||
_worldPacket.WriteUInt32(SuccessInfo.Value.TimeSecondsUntilPCKick);
|
||||
_worldPacket.WriteUInt32(SuccessInfo.Value.AvailableRaces.Count);
|
||||
_worldPacket.WriteUInt32(SuccessInfo.Value.AvailableClasses.Count);
|
||||
_worldPacket.WriteUInt32(SuccessInfo.Value.Templates.Count);
|
||||
_worldPacket.WriteUInt32(SuccessInfo.Value.CurrencyID);
|
||||
_worldPacket.WriteUInt32(SuccessInfo.Value.Time);
|
||||
|
||||
foreach (var race in SuccessInfo.Value.AvailableRaces)
|
||||
{
|
||||
_worldPacket.WriteUInt8(race.Key); /// the current race
|
||||
_worldPacket.WriteUInt8(race.Value); /// the required Expansion
|
||||
}
|
||||
|
||||
foreach (var klass in SuccessInfo.Value.AvailableClasses)
|
||||
{
|
||||
_worldPacket.WriteUInt8(klass.Key); /// the current class
|
||||
@@ -219,7 +212,6 @@ namespace Game.Network.Packets
|
||||
public List<CharacterTemplate> Templates = new List<CharacterTemplate>(); // list of pre-made character templates. @todo implement
|
||||
|
||||
public Dictionary<byte, byte> AvailableClasses; // the minimum AccountExpansion required to select the classes
|
||||
public Dictionary<byte, byte> AvailableRaces; // the minimum AccountExpansion required to select the races
|
||||
|
||||
public bool IsExpansionTrial;
|
||||
public bool ForceCharacterTemplate; // forces the client to always use a character template when creating a new character. @see Templates. @todo implement
|
||||
|
||||
@@ -44,79 +44,35 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteBit(IsDeletedCharacters);
|
||||
_worldPacket.WriteBit(IsDemonHunterCreationAllowed);
|
||||
_worldPacket.WriteBit(HasDemonHunterOnRealm);
|
||||
_worldPacket.WriteBit(HasLevel70OnRealm);
|
||||
_worldPacket.WriteBit(Unknown7x);
|
||||
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
|
||||
_worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
|
||||
_worldPacket.WriteUInt32(Characters.Count);
|
||||
_worldPacket.WriteUInt32(FactionChangeRestrictions.Count);
|
||||
_worldPacket.WriteInt32(MaxCharacterLevel);
|
||||
_worldPacket.WriteUInt32(RaceUnlockData.Count);
|
||||
|
||||
if (DisabledClassesMask.HasValue)
|
||||
_worldPacket.WriteUInt32(DisabledClassesMask.Value);
|
||||
|
||||
foreach (RestrictedFactionChangeRuleInfo rule in FactionChangeRestrictions)
|
||||
{
|
||||
_worldPacket.WriteUInt32(rule.Mask);
|
||||
_worldPacket.WriteUInt8(rule.Race);
|
||||
}
|
||||
|
||||
foreach (CharacterInfo charInfo in Characters)
|
||||
{
|
||||
_worldPacket.WritePackedGuid(charInfo.Guid);
|
||||
_worldPacket.WriteUInt8(charInfo.ListPosition);
|
||||
_worldPacket.WriteUInt8(charInfo.RaceId);
|
||||
_worldPacket.WriteUInt8(charInfo.ClassId);
|
||||
_worldPacket.WriteUInt8(charInfo.Sex);
|
||||
_worldPacket.WriteUInt8(charInfo.Skin);
|
||||
_worldPacket.WriteUInt8(charInfo.Face);
|
||||
_worldPacket.WriteUInt8(charInfo.HairStyle);
|
||||
_worldPacket.WriteUInt8(charInfo.HairColor);
|
||||
_worldPacket.WriteUInt8(charInfo.FacialHair);
|
||||
charInfo.CustomDisplay.ForEach(id => _worldPacket.WriteUInt8(id));
|
||||
_worldPacket.WriteUInt8(charInfo.Level);
|
||||
_worldPacket.WriteUInt32(charInfo.ZoneId);
|
||||
_worldPacket.WriteUInt32(charInfo.MapId);
|
||||
_worldPacket.WriteVector3(charInfo.PreLoadPosition);
|
||||
_worldPacket.WritePackedGuid(charInfo.GuildGuid);
|
||||
_worldPacket.WriteUInt32(charInfo.Flags);
|
||||
_worldPacket.WriteUInt32(charInfo.CustomizationFlag);
|
||||
_worldPacket.WriteUInt32(charInfo.Flags3);
|
||||
_worldPacket.WriteUInt32(charInfo.Pet.CreatureDisplayId);
|
||||
_worldPacket.WriteUInt32(charInfo.Pet.Level);
|
||||
_worldPacket.WriteUInt32(charInfo.Pet.CreatureFamily);
|
||||
charInfo.Write(_worldPacket);
|
||||
|
||||
_worldPacket.WriteUInt32(charInfo.ProfessionIds[0]);
|
||||
_worldPacket.WriteUInt32(charInfo.ProfessionIds[1]);
|
||||
|
||||
foreach (var visualItem in charInfo.VisualItems)
|
||||
{
|
||||
_worldPacket.WriteUInt32(visualItem.DisplayId);
|
||||
_worldPacket.WriteUInt32(visualItem.DisplayEnchantId);
|
||||
_worldPacket.WriteUInt8(visualItem.InventoryType);
|
||||
}
|
||||
|
||||
_worldPacket.WriteUInt32(charInfo.LastPlayedTime);
|
||||
_worldPacket.WriteUInt16(charInfo.SpecID);
|
||||
_worldPacket.WriteUInt32(charInfo.Unknown703);
|
||||
_worldPacket.WriteUInt32(charInfo.Flags4);
|
||||
_worldPacket.WriteBits(charInfo.Name.GetByteCount(), 6);
|
||||
_worldPacket.WriteBit(charInfo.FirstLogin);
|
||||
_worldPacket.WriteBit(charInfo.BoostInProgress);
|
||||
_worldPacket.WriteBits(charInfo.unkWod61x, 5);
|
||||
_worldPacket.WriteString(charInfo.Name);
|
||||
}
|
||||
foreach (RaceUnlock raceUnlock in RaceUnlockData)
|
||||
raceUnlock.Write(_worldPacket);
|
||||
}
|
||||
|
||||
public bool Success;
|
||||
public bool IsDeletedCharacters; // used for character undelete list
|
||||
public bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access
|
||||
public bool HasDemonHunterOnRealm = false;
|
||||
public bool HasLevel70OnRealm = false;
|
||||
public bool Unknown7x = false;
|
||||
public bool IsAlliedRacesCreationAllowed = false;
|
||||
|
||||
public int MaxCharacterLevel = 1;
|
||||
public Optional<uint> DisabledClassesMask = new Optional<uint>();
|
||||
|
||||
public List<CharacterInfo> Characters = new List<CharacterInfo>(); // all characters on the list
|
||||
public List<RestrictedFactionChangeRuleInfo> FactionChangeRestrictions = new List<RestrictedFactionChangeRuleInfo>(); // @todo: research
|
||||
public List<RaceUnlock> RaceUnlockData = new List<RaceUnlock>(); ///<
|
||||
|
||||
public class CharacterInfo
|
||||
{
|
||||
@@ -130,8 +86,8 @@ namespace Game.Network.Packets
|
||||
// "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, "
|
||||
// 19 20 21 22 23 24 25
|
||||
// "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, "
|
||||
// 26 27 28 29 30
|
||||
// "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, character_declinedname.genitive"
|
||||
// 26 27 28 29 30 31
|
||||
// "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive"
|
||||
|
||||
Guid = ObjectGuid.Create(HighGuid.Player, fields.Read<ulong>(0));
|
||||
Name = fields.Read<string>(1);
|
||||
@@ -176,7 +132,7 @@ namespace Game.Network.Packets
|
||||
if (fields.Read<uint>(26) != 0)
|
||||
Flags |= CharacterFlags.LockedByBilling;
|
||||
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read<string>(30)))
|
||||
if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read<string>(31)))
|
||||
Flags |= CharacterFlags.Declined;
|
||||
|
||||
if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
|
||||
@@ -214,6 +170,8 @@ namespace Game.Network.Packets
|
||||
if (spec != null)
|
||||
SpecID = (ushort)spec.Id;
|
||||
|
||||
LastLoginBuild = fields.Read<uint>(30);
|
||||
|
||||
for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot)
|
||||
{
|
||||
VisualItems[slot].InventoryType = (byte)equipment.NextUInt32();
|
||||
@@ -222,6 +180,53 @@ namespace Game.Network.Packets
|
||||
}
|
||||
}
|
||||
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WritePackedGuid(Guid);
|
||||
data.WriteUInt8(ListPosition);
|
||||
data.WriteUInt8(RaceId);
|
||||
data.WriteUInt8(ClassId);
|
||||
data.WriteUInt8(Sex);
|
||||
data.WriteUInt8(Skin);
|
||||
data.WriteUInt8(Face);
|
||||
data.WriteUInt8(HairStyle);
|
||||
data.WriteUInt8(HairColor);
|
||||
data.WriteUInt8(FacialHair);
|
||||
|
||||
foreach (var display in CustomDisplay)
|
||||
data.WriteUInt8(display);
|
||||
|
||||
data.WriteUInt8(Level);
|
||||
data.WriteUInt32(ZoneId);
|
||||
data.WriteUInt32(MapId);
|
||||
data.WriteVector3(PreLoadPosition);
|
||||
data.WritePackedGuid(GuildGuid);
|
||||
data.WriteUInt32(Flags);
|
||||
data.WriteUInt32(CustomizationFlag);
|
||||
data.WriteUInt32(Flags3);
|
||||
data.WriteUInt32(Pet.CreatureDisplayId);
|
||||
data.WriteUInt32(Pet.Level);
|
||||
data.WriteUInt32(Pet.CreatureFamily);
|
||||
|
||||
data.WriteUInt32(ProfessionIds[0]);
|
||||
data.WriteUInt32(ProfessionIds[1]);
|
||||
|
||||
foreach (var visualItem in VisualItems)
|
||||
visualItem.Write(data);
|
||||
|
||||
data.WriteUInt32(LastPlayedTime);
|
||||
data.WriteUInt16(SpecID);
|
||||
data.WriteUInt32(Unknown703);
|
||||
data.WriteUInt32(Flags4);
|
||||
data.WriteBits(Name.GetByteCount(), 6);
|
||||
data.WriteBit(FirstLogin);
|
||||
data.WriteBit(BoostInProgress);
|
||||
data.WriteBits(unkWod61x, 5);
|
||||
data.FlushBits();
|
||||
|
||||
data.WriteString(Name);
|
||||
}
|
||||
|
||||
public ObjectGuid Guid;
|
||||
public string Name;
|
||||
public byte ListPosition; // Order of the characters in list
|
||||
@@ -248,6 +253,7 @@ namespace Game.Network.Packets
|
||||
public uint LastPlayedTime;
|
||||
public ushort SpecID;
|
||||
public uint Unknown703;
|
||||
public uint LastLoginBuild;
|
||||
public PetInfo Pet = new PetInfo();
|
||||
public bool BoostInProgress; // @todo
|
||||
public uint[] ProfessionIds = new uint[2]; // @todo
|
||||
@@ -255,6 +261,13 @@ namespace Game.Network.Packets
|
||||
|
||||
public struct VisualItemInfo
|
||||
{
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteUInt32(DisplayId);
|
||||
data.WriteUInt32(DisplayEnchantId);
|
||||
data.WriteUInt8(InventoryType);
|
||||
}
|
||||
|
||||
public uint DisplayId;
|
||||
public uint DisplayEnchantId;
|
||||
public byte InventoryType;
|
||||
@@ -267,16 +280,21 @@ namespace Game.Network.Packets
|
||||
}
|
||||
}
|
||||
|
||||
public struct RestrictedFactionChangeRuleInfo
|
||||
public struct RaceUnlock
|
||||
{
|
||||
public RestrictedFactionChangeRuleInfo(uint mask, byte race)
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
Mask = mask;
|
||||
Race = race;
|
||||
data.WriteInt32(RaceID);
|
||||
data.WriteBit(HasExpansion);
|
||||
data.WriteBit(HasAchievement);
|
||||
data.WriteBit(HasHeritageArmor);
|
||||
data.FlushBits();
|
||||
}
|
||||
|
||||
public uint Mask;
|
||||
public byte Race;
|
||||
public int RaceID;
|
||||
public bool HasExpansion;
|
||||
public bool HasAchievement;
|
||||
public bool HasHeritageArmor;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -832,8 +850,7 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteUInt8(Reason);
|
||||
_worldPacket.WriteInt32(Amount);
|
||||
_worldPacket.WriteFloat(GroupBonus);
|
||||
_worldPacket.WriteBit(ReferAFriend);
|
||||
_worldPacket.FlushBits();
|
||||
_worldPacket.WriteUInt8(ReferAFriendBonusType);
|
||||
}
|
||||
|
||||
public ObjectGuid Victim;
|
||||
@@ -841,7 +858,7 @@ namespace Game.Network.Packets
|
||||
public PlayerLogXPReason Reason;
|
||||
public int Amount;
|
||||
public float GroupBonus;
|
||||
public bool ReferAFriend;
|
||||
public byte ReferAFriendBonusType; // 1 - 300% of normal XP; 2 - 150% of normal XP
|
||||
}
|
||||
|
||||
class TitleEarned : ServerPacket
|
||||
|
||||
@@ -1467,7 +1467,7 @@ namespace Game.Network.Packets
|
||||
data.WriteUInt32(ItemID);
|
||||
data.WriteUInt32(Unk4);
|
||||
data.WriteUInt32(AchievementsRequired.Count);
|
||||
data.WriteUInt32(RaceMask);
|
||||
data.WriteUInt64(RaceMask);
|
||||
data.WriteUInt32(MinGuildLevel);
|
||||
data.WriteUInt32(MinGuildRep);
|
||||
data.WriteUInt64(Cost);
|
||||
@@ -1479,7 +1479,7 @@ namespace Game.Network.Packets
|
||||
public uint ItemID;
|
||||
public uint Unk4;
|
||||
public List<uint> AchievementsRequired = new List<uint>();
|
||||
public uint RaceMask;
|
||||
public ulong RaceMask;
|
||||
public int MinGuildLevel;
|
||||
public int MinGuildRep;
|
||||
public ulong Cost;
|
||||
|
||||
@@ -218,12 +218,15 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteUInt32(MaxInCombatResCount);
|
||||
_worldPacket.WriteUInt32(CombatResChargeRecovery);
|
||||
_worldPacket.WriteUInt32(NextCombatResChargeTime);
|
||||
_worldPacket.WriteBit(InProgress);
|
||||
_worldPacket.FlushBits();
|
||||
}
|
||||
|
||||
public uint InCombatResCount; // amount of usable battle ressurections
|
||||
public uint MaxInCombatResCount;
|
||||
public uint CombatResChargeRecovery;
|
||||
public uint NextCombatResChargeTime;
|
||||
public bool InProgress = true;
|
||||
}
|
||||
|
||||
class InstanceEncounterEnd : ServerPacket
|
||||
|
||||
@@ -703,6 +703,13 @@ namespace Game.Network.Packets
|
||||
public ObjectGuid ItemGuid { get; set; }
|
||||
}
|
||||
|
||||
class CharacterInventoryOverflowWarning : ServerPacket
|
||||
{
|
||||
public CharacterInventoryOverflowWarning() : base(ServerOpcodes.CharacterInventoryOverflowWarning) { }
|
||||
|
||||
public override void Write() { }
|
||||
}
|
||||
|
||||
//Structs
|
||||
public class ItemBonusInstanceData
|
||||
{
|
||||
|
||||
@@ -76,6 +76,7 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteInt32(text.QuestID);
|
||||
_worldPacket.WriteInt32(text.QuestType);
|
||||
_worldPacket.WriteInt32(text.QuestLevel);
|
||||
_worldPacket.WriteInt32(text.QuestMaxScalingLevel);
|
||||
_worldPacket.WriteInt32(text.QuestFlags);
|
||||
_worldPacket.WriteInt32(text.QuestFlagsEx);
|
||||
|
||||
@@ -308,6 +309,7 @@ namespace Game.Network.Packets
|
||||
public int QuestID;
|
||||
public int QuestType;
|
||||
public int QuestLevel;
|
||||
public int QuestMaxScalingLevel;
|
||||
public bool Repeatable;
|
||||
public string QuestTitle;
|
||||
public int QuestFlags;
|
||||
|
||||
@@ -437,6 +437,9 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteInt32(questPOIBlobPoint.X);
|
||||
_worldPacket.WriteInt32(questPOIBlobPoint.Y);
|
||||
}
|
||||
|
||||
_worldPacket.WriteBit(questPOIBlobData.AlwaysAllowMergingBlobs);
|
||||
_worldPacket.FlushBits();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -759,6 +762,7 @@ namespace Game.Network.Packets
|
||||
public int PlayerConditionID;
|
||||
public int UnkWoD1;
|
||||
public List<QuestPOIBlobPoint> QuestPOIBlobPointStats = new List<QuestPOIBlobPoint>();
|
||||
public bool AlwaysAllowMergingBlobs;
|
||||
}
|
||||
|
||||
public class QuestPOIData
|
||||
|
||||
@@ -117,6 +117,7 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteInt32(Info.QuestID);
|
||||
_worldPacket.WriteInt32(Info.QuestType);
|
||||
_worldPacket.WriteInt32(Info.QuestLevel);
|
||||
_worldPacket.WriteInt32(Info.QuestMaxScalingLevel);
|
||||
_worldPacket.WriteInt32(Info.QuestPackageID);
|
||||
_worldPacket.WriteInt32(Info.QuestMinLevel);
|
||||
_worldPacket.WriteInt32(Info.QuestSortID);
|
||||
@@ -194,7 +195,7 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteInt32(Info.TimeAllowed);
|
||||
|
||||
_worldPacket.WriteUInt32(Info.Objectives.Count);
|
||||
_worldPacket.WriteInt32(Info.AllowableRaces);
|
||||
_worldPacket.WriteInt64(Info.AllowableRaces);
|
||||
_worldPacket.WriteInt32(Info.QuestRewardID);
|
||||
_worldPacket.WriteInt32(Info.Expansion);
|
||||
|
||||
@@ -619,6 +620,7 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteUInt32(gossip.QuestID);
|
||||
_worldPacket.WriteUInt32(gossip.QuestType);
|
||||
_worldPacket.WriteUInt32(gossip.QuestLevel);
|
||||
_worldPacket.WriteUInt32(gossip.QuestMaxScalingLevel);
|
||||
_worldPacket.WriteUInt32(gossip.QuestFlags);
|
||||
_worldPacket.WriteUInt32(gossip.QuestFlagsEx);
|
||||
|
||||
@@ -827,8 +829,10 @@ namespace Game.Network.Packets
|
||||
_worldPacket.WriteInt32(ChoiceID);
|
||||
_worldPacket.WriteUInt32(Responses.Count);
|
||||
_worldPacket.WritePackedGuid(SenderGUID);
|
||||
_worldPacket.WriteInt32(UiTextureKitID);
|
||||
_worldPacket.WriteBits(Question.GetByteCount(), 8);
|
||||
_worldPacket.WriteBit(CloseChoiceFrame);
|
||||
_worldPacket.WriteBit(HideWarboardHeader);
|
||||
_worldPacket.FlushBits();
|
||||
|
||||
foreach (PlayerChoiceResponse response in Responses)
|
||||
@@ -839,9 +843,11 @@ namespace Game.Network.Packets
|
||||
|
||||
public ObjectGuid SenderGUID;
|
||||
public int ChoiceID;
|
||||
public int UiTextureKitID;
|
||||
public string Question;
|
||||
public List<PlayerChoiceResponse> Responses = new List<PlayerChoiceResponse>();
|
||||
public bool CloseChoiceFrame;
|
||||
public bool HideWarboardHeader;
|
||||
}
|
||||
|
||||
class ChoiceResponse : ClientPacket
|
||||
@@ -897,6 +903,7 @@ namespace Game.Network.Packets
|
||||
public uint QuestID;
|
||||
public int QuestType; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details)
|
||||
public int QuestLevel; // may be -1, static data, in other cases must be used dynamic level: Player.GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client)
|
||||
public int QuestMaxScalingLevel = 255;
|
||||
public uint QuestPackageID;
|
||||
public int QuestMinLevel;
|
||||
public int QuestSortID; // zone or sort to display in quest log
|
||||
@@ -923,7 +930,7 @@ namespace Game.Network.Packets
|
||||
public float POIx;
|
||||
public float POIy;
|
||||
public uint POIPriority;
|
||||
public int AllowableRaces = -1;
|
||||
public long AllowableRaces = -1;
|
||||
public string LogTitle;
|
||||
public string LogDescription;
|
||||
public string QuestDescription;
|
||||
@@ -1129,11 +1136,12 @@ namespace Game.Network.Packets
|
||||
|
||||
public struct GossipText
|
||||
{
|
||||
public GossipText(uint questID, uint questType, uint questLevel, uint questFlags, uint questFlagsEx, bool repeatable, string questTitle)
|
||||
public GossipText(uint questID, uint questType, uint questLevel, uint questMaxScalingLevel, uint questFlags, uint questFlagsEx, bool repeatable, string questTitle)
|
||||
{
|
||||
QuestID = questID;
|
||||
QuestType = questType;
|
||||
QuestLevel = questLevel;
|
||||
QuestMaxScalingLevel = questMaxScalingLevel;
|
||||
QuestFlags = questFlags;
|
||||
QuestFlagsEx = questFlagsEx;
|
||||
Repeatable = repeatable;
|
||||
@@ -1143,6 +1151,7 @@ namespace Game.Network.Packets
|
||||
public uint QuestID;
|
||||
public uint QuestType;
|
||||
public uint QuestLevel;
|
||||
public uint QuestMaxScalingLevel;
|
||||
public uint QuestFlags;
|
||||
public uint QuestFlagsEx;
|
||||
public bool Repeatable;
|
||||
|
||||
@@ -864,7 +864,12 @@ namespace Game.Network.Packets
|
||||
{
|
||||
public SelfRes(WorldPacket packet) : base(packet) { }
|
||||
|
||||
public override void Read() { }
|
||||
public override void Read()
|
||||
{
|
||||
SpellId = _worldPacket.ReadUInt32();
|
||||
}
|
||||
|
||||
public uint SpellId;
|
||||
}
|
||||
|
||||
class GetMirrorImageData : ClientPacket
|
||||
@@ -1236,7 +1241,7 @@ namespace Game.Network.Packets
|
||||
|
||||
public void Write(WorldPacket data)
|
||||
{
|
||||
data.WriteBits(Type, 3);
|
||||
data.WriteBits(Type, 4);
|
||||
data.WriteInt16(PlayerLevelDelta);
|
||||
data.WriteUInt16(PlayerItemLevel);
|
||||
data.WriteUInt8(TargetLevel);
|
||||
|
||||
@@ -315,6 +315,8 @@ namespace Game.Network.Packets
|
||||
LastTitleAuthorGuid = data.ReadPackedGuid();
|
||||
LastDescriptionAuthorGuid = data.ReadPackedGuid();
|
||||
LastVoiceChatAuthorGuid = data.ReadPackedGuid();
|
||||
ListingCreatorGuid = data.ReadPackedGuid();
|
||||
Unknown735 = data.ReadPackedGuid();
|
||||
|
||||
byte titleLength = data.ReadBits<byte>(8);
|
||||
byte descriptionLength = data.ReadBits<byte>(11);
|
||||
@@ -330,6 +332,8 @@ namespace Game.Network.Packets
|
||||
ObjectGuid LastTitleAuthorGuid;
|
||||
ObjectGuid LastDescriptionAuthorGuid;
|
||||
ObjectGuid LastVoiceChatAuthorGuid;
|
||||
ObjectGuid ListingCreatorGuid;
|
||||
ObjectGuid Unknown735;
|
||||
string Title;
|
||||
string Description;
|
||||
string VoiceChat;
|
||||
|
||||
@@ -101,7 +101,7 @@ namespace Game.Network.Packets
|
||||
{
|
||||
MinLevel = data.ReadInt32();
|
||||
MaxLevel = data.ReadInt32();
|
||||
RaceFilter = data.ReadInt32();
|
||||
RaceFilter = data.ReadInt64();
|
||||
ClassFilter = data.ReadInt32();
|
||||
|
||||
uint nameLength = data.ReadBits<uint>(6);
|
||||
@@ -137,7 +137,7 @@ namespace Game.Network.Packets
|
||||
public string VirtualRealmName;
|
||||
public string Guild;
|
||||
public string GuildVirtualRealmName;
|
||||
public int RaceFilter = -1;
|
||||
public long RaceFilter = 0;
|
||||
public int ClassFilter = -1;
|
||||
public List<string> Words = new List<string>();
|
||||
public bool ShowEnemies;
|
||||
|
||||
@@ -36,9 +36,9 @@ namespace Game.Network
|
||||
static byte[] SessionKeySeed = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B };
|
||||
static byte[] ContinuedSessionSeed = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F };
|
||||
|
||||
static uint[] ClientTypeSeed_Win = { 0xC34F59FE, 0xFF9A7F5E, 0x8A9DD986, 0x97B24A36 };
|
||||
static uint[] ClientTypeSeed_Wn64 = { 0x4E625212, 0xFAD6CBD8, 0x5D3FD3C7, 0xF335A567 };
|
||||
static uint[] ClientTypeSeed_Mc64 = { 0x95EFC66, 0x266170B8, 0x3145F79, 0xD8C1C808 };
|
||||
static byte[] ClientTypeSeed_Win = { 0x23, 0xC5, 0x9C, 0x59, 0x63, 0xCB, 0xEF, 0x5B, 0x72, 0x8D, 0x13, 0xA5, 0x08, 0x78, 0xDF, 0xCB };
|
||||
static byte[] ClientTypeSeed_Wn64 = { 0xC7, 0xFF, 0x93, 0x2D, 0x6A, 0x21, 0x74, 0xA3, 0xD5, 0x38, 0xCA, 0x72, 0x12, 0x13, 0x6D, 0x2B };
|
||||
static byte[] ClientTypeSeed_Mc64 = { 0x21, 0x0B, 0x97, 0x01, 0x49, 0xD6, 0xF5, 0x6C, 0xAC, 0x9B, 0xAD, 0xF2, 0xAA, 0xC9, 0x1E, 0x8E };
|
||||
|
||||
public WorldSocket(Socket socket) : base(socket)
|
||||
{
|
||||
@@ -383,18 +383,15 @@ namespace Game.Network
|
||||
// For hook purposes, we get Remoteaddress at this point.
|
||||
string address = GetRemoteIpAddress().ToString();
|
||||
|
||||
uint[] clientSeed = ClientTypeSeed_Win;
|
||||
byte[] clientSeed = ClientTypeSeed_Win;
|
||||
if (account.game.OS == "Wn64")
|
||||
clientSeed = ClientTypeSeed_Wn64;
|
||||
else if (account.game.OS == "Mc64")
|
||||
clientSeed = ClientTypeSeed_Mc64;
|
||||
|
||||
byte[] byteArray = new byte[clientSeed.Length * 4];
|
||||
Buffer.BlockCopy(clientSeed, 0, byteArray, 0, clientSeed.Length * 4);
|
||||
|
||||
Sha256 digestKeyHash = new Sha256();
|
||||
digestKeyHash.Process(account.game.SessionKey, account.game.SessionKey.Length);
|
||||
digestKeyHash.Finish(byteArray, byteArray.Length);
|
||||
digestKeyHash.Finish(clientSeed, clientSeed.Length);
|
||||
|
||||
HmacSha256 hmac = new HmacSha256(digestKeyHash.Digest);
|
||||
hmac.Process(authSession.LocalChallenge, authSession.LocalChallenge.Count);
|
||||
@@ -744,10 +741,6 @@ namespace Game.Network
|
||||
game.IsBanned = fields.Read<ulong>(13) != 0;
|
||||
game.IsRectuiter = fields.Read<uint>(14) != 0;
|
||||
|
||||
uint world_expansion = WorldConfig.GetUIntValue(WorldCfg.Expansion);
|
||||
if (game.Expansion > world_expansion)
|
||||
game.Expansion = (byte)world_expansion;
|
||||
|
||||
if (battleNet.Locale >= LocaleConstant.Total)
|
||||
battleNet.Locale = LocaleConstant.enUS;
|
||||
}
|
||||
|
||||
@@ -33,14 +33,6 @@ namespace Game.Network
|
||||
// -1 means use default
|
||||
_socketSendBufferSize = ConfigMgr.GetDefaultValue("Network.OutKBuff", -1);
|
||||
|
||||
m_SockOutUBuff = ConfigMgr.GetDefaultValue("Network.OutUBuff", 65536);
|
||||
|
||||
if (m_SockOutUBuff <= 0)
|
||||
{
|
||||
Log.outError(LogFilter.Network, "Network.OutUBuff is wrong in your config file");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!base.StartNetwork(bindIp, port, threadCount))
|
||||
return false;
|
||||
|
||||
@@ -82,7 +74,6 @@ namespace Game.Network
|
||||
|
||||
AsyncAcceptor _instanceAcceptor;
|
||||
int _socketSendBufferSize;
|
||||
int m_SockOutUBuff;
|
||||
bool _tcpNoDelay;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user