protected void HandleInitializeFactions(InPacket packet) { var count = packet.ReadInt32();// ("Count"); for (var i = 0; i < count; i++) { FactionFlag NpcFlags = (FactionFlag)packet.ReadByte(); //var flag = packet.ReadByte(); // ("Faction Flags", i); var fac = packet.ReadUInt32(); //("Faction Standing", i); } }
protected void HandleForcedReactions(InPacket packet) { var counter = packet.ReadInt32(); for (var i = 0; i < counter; i++) { Factions factions = new Factions(); factions.FactionID = packet.ReadUInt32(); //Faction Id factions.ReputationRank = packet.ReadUInt32(); //Reputation Rank Exchange.gameClient.FactionList.Add(factions.FactionID, factions); } }
void HandleMessageChat(InPacket packet) { var type = (ChatMessageType)packet.ReadByte(); var lang = (Language)packet.ReadInt32(); var guid = packet.ReadUInt64(); var unkInt = packet.ReadInt32(); switch (type) { case ChatMessageType.Say: case ChatMessageType.Yell: case ChatMessageType.Party: case ChatMessageType.PartyLeader: case ChatMessageType.Raid: case ChatMessageType.RaidLeader: case ChatMessageType.RaidWarning: case ChatMessageType.Guild: case ChatMessageType.Officer: case ChatMessageType.Emote: case ChatMessageType.TextEmote: case ChatMessageType.Whisper: case ChatMessageType.WhisperInform: case ChatMessageType.System: case ChatMessageType.Channel: case ChatMessageType.Battleground: case ChatMessageType.BattlegroundNeutral: case ChatMessageType.BattlegroundAlliance: case ChatMessageType.BattlegroundHorde: case ChatMessageType.BattlegroundLeader: case ChatMessageType.Achievement: case ChatMessageType.GuildAchievement: { ChatChannel channel = new ChatChannel(); channel.Type = type; if (type == ChatMessageType.Channel) channel.ChannelName = packet.ReadCString(); var sender = packet.ReadUInt64(); ChatMessage message = new ChatMessage(); var textLen = packet.ReadInt32(); message.Message = packet.ReadCString(); message.Language = lang; message.ChatTag = (ChatTag)packet.ReadByte(); message.Sender = channel; //! If we know the name of the sender GUID, use it //! For system messages sender GUID is 0, don't need to do anything fancy string senderName = null; if (type == ChatMessageType.System || Game.World.PlayerNameLookup.TryGetValue(sender, out senderName)) { message.Sender.Sender = senderName; Game.UI.PresentChatMessage(message); return; } //! If not we place the message in the queue, //! .. either existent Queue<ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(sender, out messageQueue)) messageQueue.Enqueue(message); //! or non existent else { messageQueue = new Queue<ChatMessage>(); messageQueue.Enqueue(message); Game.World.QueuedChatMessages.Add(sender, messageQueue); } //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender OutPacket response = new OutPacket(WorldCommand.CMSG_NAME_QUERY); response.Write(sender); Game.SendPacket(response); //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE break; } default: return; } }
void ReadMovementUpdateData(InPacket packet) { flags = (ObjectUpdateFlags)packet.ReadUInt16(); if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LIVING)) { ReadMovementInfo(packet); movementSpeeds = new Dictionary<UnitMoveType,float>(); movementSpeeds[UnitMoveType.MOVE_WALK] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_RUN] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_RUN_BACK] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_SWIM] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_SWIM_BACK] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_FLIGHT] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_FLIGHT_BACK] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_TURN_RATE] = packet.ReadSingle(); movementSpeeds[UnitMoveType.MOVE_PITCH_RATE] = packet.ReadSingle(); if (movementInfo.Flags.HasFlag(MovementFlags.MOVEMENTFLAG_SPLINE_ENABLED)) { splineFlags = (SplineFlags)packet.ReadUInt32(); if (splineFlags.HasFlag(SplineFlags.Final_Angle)) splineFacingAngle = packet.ReadSingle(); else if (splineFlags.HasFlag(SplineFlags.Final_Target)) splineFacingTargetGuid = packet.ReadUInt64(); else if (splineFlags.HasFlag(SplineFlags.Final_Point)) splineFacingPointX = packet.ReadVector3(); splineTimePassed = packet.ReadInt32(); splineDuration = packet.ReadInt32(); splineId = packet.ReadUInt32(); packet.ReadSingle(); packet.ReadSingle(); splineVerticalAcceleration = packet.ReadSingle(); splineEffectStartTime = packet.ReadInt32(); uint splineCount = packet.ReadUInt32(); for (uint index = 0; index < splineCount; index++) splinePoints.Add(packet.ReadVector3()); splineEvaluationMode = (SplineEvaluationMode)packet.ReadByte(); splineEndPoint = packet.ReadVector3(); } } else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_POSITION)) { transportGuid = packet.ReadPackedGuid(); position = packet.ReadVector3(); transportOffset = packet.ReadVector3(); o = packet.ReadSingle(); corpseOrientation = packet.ReadSingle(); } else if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_STATIONARY_POSITION)) { position = packet.ReadVector3(); o = packet.ReadSingle(); } if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_UNKNOWN)) packet.ReadUInt32(); if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_LOWGUID)) lowGuid = packet.ReadUInt32(); if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_HAS_TARGET)) targetGuid = packet.ReadPackedGuid(); if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_TRANSPORT)) transportTimer = packet.ReadUInt32(); if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_VEHICLE)) { vehicledID = packet.ReadUInt32(); vehicleOrientation = packet.ReadSingle(); } if (flags.HasFlag(ObjectUpdateFlags.UPDATEFLAG_ROTATION)) goRotation = packet.ReadInt64(); }
protected void HandleAllAchievementData(InPacket packet) { CompletedAchievements.Clear(); AchievementCriterias.Clear(); for (;;) { uint achievementId = packet.ReadUInt32(); if (achievementId == 0xFFFFFFFF) break; packet.ReadPackedTime(); CompletedAchievements.Add(achievementId); } for (;;) { uint criteriaId = packet.ReadUInt32(); if (criteriaId == 0xFFFFFFFF) break; ulong criteriaCounter = packet.ReadPackedGuid(); packet.ReadPackedGuid(); packet.ReadInt32(); packet.ReadPackedTime(); packet.ReadInt32(); packet.ReadInt32(); AchievementCriterias[criteriaId] = criteriaCounter; } }
private void ReadValuesUpdateData(InPacket packet) { byte blockCount = packet.ReadByte(); int[] updateMask = new int[blockCount]; for (var i = 0; i < blockCount; i++) updateMask[i] = packet.ReadInt32(); var mask = new BitArray(updateMask); for (var i = 0; i < mask.Count; ++i) { if (!mask[i]) continue; updateFields[i] = packet.ReadUInt32(); } }
protected void HandleMessageChat(InPacket packet) { var chatType = (ChatMessageType)packet.ReadByte(); var language = (Language)packet.ReadInt32(); UInt64 senderGuid = packet.ReadUInt64(); var unkInt = packet.ReadUInt32(); UInt32 senderNameLen = 0; string senderName = null; UInt64 receiverGuid = 0; UInt32 receiverNameLen = 0; string receiverName = null; string channelName = null; switch (chatType) { case ChatMessageType.MonsterSay: case ChatMessageType.MonsterParty: case ChatMessageType.MonsterYell: case ChatMessageType.MonsterWhisper: case ChatMessageType.MonsterEmote: case ChatMessageType.RaidBossEmote: case ChatMessageType.RaidBossWhisper: case ChatMessageType.BattleNet: senderNameLen = packet.ReadUInt32(); senderName = packet.ReadCString(); receiverGuid = packet.ReadUInt64(); if (receiverGuid != 0 && !receiverGuid.IsPlayer() && !receiverGuid.IsPet()) { receiverNameLen = packet.ReadUInt32(); receiverName = packet.ReadCString(); } break; case ChatMessageType.WhisperForeign: senderNameLen = packet.ReadUInt32(); senderName = packet.ReadCString(); receiverGuid = packet.ReadUInt64(); break; case ChatMessageType.BattlegroundNeutral: case ChatMessageType.BattlegroundAlliance: case ChatMessageType.BattlegroundHorde: receiverGuid = packet.ReadUInt64(); if (receiverGuid != 0 && !receiverGuid.IsPlayer()) { receiverNameLen = packet.ReadUInt32(); receiverName = packet.ReadCString(); } break; case ChatMessageType.Achievement: case ChatMessageType.GuildAchievement: receiverGuid = packet.ReadUInt64(); break; default: if (packet.Header.Command == WorldCommand.SMSG_GM_MESSAGECHAT) { senderNameLen = packet.ReadUInt32(); senderName = packet.ReadCString(); } if (chatType == ChatMessageType.Channel) { channelName = packet.ReadCString(); } receiverGuid = packet.ReadUInt64(); break; } UInt32 messageLen = packet.ReadUInt32(); string message = packet.ReadCString(); var chatTag = (ChatTag)packet.ReadByte(); if (chatType == ChatMessageType.Achievement || chatType == ChatMessageType.GuildAchievement) { var achievementId = packet.ReadUInt32(); } ChatChannel channel = new ChatChannel(); channel.Type = chatType; if (chatType == ChatMessageType.Channel) { channel.ChannelName = channelName; } ChatMessage chatMessage = new ChatMessage(); chatMessage.Message = message; chatMessage.Language = language; chatMessage.ChatTag = chatTag; chatMessage.Sender = channel; //! If we know the name of the sender GUID, use it //! For system messages sender GUID is 0, don't need to do anything fancy if (senderGuid == 0 || !string.IsNullOrEmpty(senderName) || Game.World.PlayerNameLookup.TryGetValue(senderGuid, out senderName)) { chatMessage.Sender.Sender = senderName; Game.UI.PresentChatMessage(chatMessage); return; } //! If not we place the message in the queue, //! .. either existent Queue <ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(senderGuid, out messageQueue)) { messageQueue.Enqueue(chatMessage); } //! or non existent else { messageQueue = new Queue <ChatMessage>(); messageQueue.Enqueue(chatMessage); Game.World.QueuedChatMessages.Add(senderGuid, messageQueue); } //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender OutPacket response = new OutPacket(WorldCommand.CMSG_NAME_QUERY); response.Write(senderGuid); Game.SendPacket(response); //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE }
protected void HandleMessageChat(InPacket packet) { var type = (ChatMessageType)packet.ReadByte(); var lang = (Language)packet.ReadInt32(); var guid = packet.ReadUInt64(); var unkInt = packet.ReadInt32(); switch (type) { case ChatMessageType.Say: case ChatMessageType.Yell: case ChatMessageType.Party: case ChatMessageType.PartyLeader: case ChatMessageType.Raid: case ChatMessageType.RaidLeader: case ChatMessageType.RaidWarning: case ChatMessageType.Guild: case ChatMessageType.Officer: case ChatMessageType.Emote: case ChatMessageType.TextEmote: case ChatMessageType.Whisper: case ChatMessageType.WhisperInform: case ChatMessageType.System: case ChatMessageType.Channel: case ChatMessageType.Battleground: case ChatMessageType.BattlegroundNeutral: case ChatMessageType.BattlegroundAlliance: case ChatMessageType.BattlegroundHorde: case ChatMessageType.BattlegroundLeader: case ChatMessageType.Achievement: case ChatMessageType.GuildAchievement: { ChatChannel channel = new ChatChannel(); channel.Type = type; if (type == ChatMessageType.Channel) { channel.ChannelName = packet.ReadCString(); } var sender = packet.ReadUInt64(); ChatMessage message = new ChatMessage(); var textLen = packet.ReadInt32(); message.Message = packet.ReadCString(); message.Language = lang; message.ChatTag = (ChatTag)packet.ReadByte(); message.Sender = channel; //! If we know the name of the sender GUID, use it //! For system messages sender GUID is 0, don't need to do anything fancy string senderName = null; if (type == ChatMessageType.System || Game.World.PlayerNameLookup.TryGetValue(sender, out senderName)) { message.Sender.Sender = senderName; Game.UI.PresentChatMessage(message); return; } //! If not we place the message in the queue, //! .. either existent Queue <ChatMessage> messageQueue = null; if (Game.World.QueuedChatMessages.TryGetValue(sender, out messageQueue)) { messageQueue.Enqueue(message); } //! or non existent else { messageQueue = new Queue <ChatMessage>(); messageQueue.Enqueue(message); Game.World.QueuedChatMessages.Add(sender, messageQueue); } //! Furthermore we send CMSG_NAME_QUERY to the server to retrieve the name of the sender OutPacket response = new OutPacket(NetworkOperationCode.CMSG_NAME_QUERY); response.Write(sender); Game.SendPacket(response); //! Enqueued chat will be printed when we receive SMSG_NAME_QUERY_RESPONSE break; } default: return; } }