public static void HandleSendKnownSpells(ref WorldClass session) { Character pChar = session.Character; var specializationSpells = SpecializationMgr.GetSpecializationSpells(pChar); var specializationSpellCount = ((specializationSpells != null) ? specializationSpells.Count : 0); var talentSpells = SpecializationMgr.GetTalentSpells(pChar, pChar.ActiveSpecGroup); var talentSpellCount = ((talentSpells != null) ? talentSpells.Count : 0); int count = pChar.SpellList.Count + specializationSpellCount + talentSpellCount; PacketWriter writer = new PacketWriter(ServerMessage.SendKnownSpells); BitPack BitPack = new BitPack(writer); BitPack.Write(1); BitPack.Write(count, 22); BitPack.Flush(); pChar.SpellList.ForEach(spell => writer.WriteUInt32(spell.SpellId)); if (specializationSpells != null) specializationSpells.ForEach(spell => writer.WriteUInt32(spell.Spell)); if (talentSpells != null) talentSpells.ForEach(spell => writer.WriteUInt32(spell)); session.Send(ref writer); }
public static void HandleAuthChallenge(ref PacketReader packet, ref WorldClass session) { PacketWriter authChallenge = new PacketWriter(ServerMessage.AuthChallenge, true); for (int i = 0; i < 8; i++) authChallenge.WriteUInt32(0); authChallenge.WriteUInt32((uint)new Random(DateTime.Now.Second).Next(1, 0xFFFFFFF)); authChallenge.WriteUInt8(1); session.Send(ref authChallenge); }
public static void HandleRealmSplitStateResponse(ref PacketReader packet, ref WorldClass session) { uint realmSplitState = 0; PacketWriter realmSplitStateResp = new PacketWriter(LegacyMessage.RealmSplitStateResponse); realmSplitStateResp.WriteUInt32(packet.ReadUInt32()); realmSplitStateResp.WriteUInt32(realmSplitState); realmSplitStateResp.WriteCString("01/01/01"); session.Send(ref realmSplitStateResp); }
public static void SendMessageByType(ref WorldClass session, MessageType type, int language, string chatMessage) { PacketWriter messageChat = new PacketWriter(LegacyMessage.MessageChat); ulong guid = session.Character.Guid; messageChat.WriteUInt8((byte)type); messageChat.WriteInt32(language); messageChat.WriteUInt64(guid); messageChat.WriteUInt32(0); messageChat.WriteUInt64(guid); messageChat.WriteUInt32((uint)chatMessage.Length + 1); messageChat.WriteCString(chatMessage); messageChat.WriteUInt16(0); session.Send(ref messageChat); }
public static void HandleRealmSplitStateResponse(ref PacketReader packet, ref WorldClass session) { uint realmSplitState = 0; PacketWriter realmSplitStateResp = new PacketWriter(LegacyMessage.RealmSplitStateResponse); realmSplitStateResp.WriteUInt32(packet.ReadUInt32()); realmSplitStateResp.WriteUInt32(realmSplitState); realmSplitStateResp.WriteCString("01/01/01"); session.Send(ref realmSplitStateResp); // Crash!!! // Wrong data sent... // AddonMgr.WriteAddonData(ref session); }
public static void HandleDBQueryBulk(ref PacketReader packet, ref WorldClass session) { var type = (DBTypes)packet.ReadUInt32(); var unknown = packet.ReadInt32(); var id = packet.ReadInt32(); switch (type) { case DBTypes.BroadcastText: { var broadCastText = GossipMgr.GetBroadCastText<Creature>(id); PacketWriter dbReply = new PacketWriter(JAMCMessage.DBReply); BitPack BitPack = new BitPack(dbReply); var textLength = broadCastText.Text.Length; var alternativeTextLength = broadCastText.AlternativeText.Length; var size = 48; if (textLength == 0 || alternativeTextLength == 0) size += 1; size += textLength + alternativeTextLength; dbReply.WriteUInt32((uint)size); dbReply.WriteInt32(broadCastText.Id); dbReply.WriteInt32(broadCastText.Language); dbReply.WriteUInt16((ushort)broadCastText.Text.Length); dbReply.WriteString(broadCastText.Text); dbReply.WriteUInt16((ushort)broadCastText.AlternativeText.Length); dbReply.WriteString(broadCastText.AlternativeText); broadCastText.Emotes.ForEach(emote => dbReply.WriteInt32(emote)); dbReply.WriteUInt32(1); dbReply.WriteUInt32(0); // UnixTime, last change server side dbReply.WriteUInt32((uint)DBTypes.BroadcastText); dbReply.WriteInt32(broadCastText.Id); session.Send(ref dbReply); break; } } }
public static void HandleUpdateClientCacheVersion(ref WorldClass session) { PacketWriter cacheVersion = new PacketWriter(LegacyMessage.UpdateClientCacheVersion); cacheVersion.WriteUInt32(0); session.Send(cacheVersion); }
public static void HandleTutorialFlags(ref WorldClass session) { PacketWriter tutorialFlags = new PacketWriter(LegacyMessage.TutorialFlags); for (int i = 0; i < 8; i++) tutorialFlags.WriteUInt32(0); session.Send(ref tutorialFlags); }
public static void HandleCacheVersion(ref WorldClass session) { PacketWriter cacheVersion = new PacketWriter(ServerMessage.CacheVersion); cacheVersion.WriteUInt32(0); session.Send(ref cacheVersion); }
public static void HandleMessageOfTheDay(ref WorldClass session) { PacketWriter motd = new PacketWriter(LegacyMessage.MessageOfTheDay); motd.WriteUInt32(3); motd.WriteCString("Arctium MoP test"); motd.WriteCString("Welcome to our MoP server test."); motd.WriteCString("Your development team =)"); session.Send(ref motd); }
public static void HandlePong(ref PacketReader packet, ref WorldClass session) { uint sequence = packet.ReadUInt32(); uint latency = packet.ReadUInt32(); PacketWriter pong = new PacketWriter(JAMCCMessage.Pong); pong.WriteUInt32(sequence); session.Send(pong); }
public static void HandleRealmSplit(ref PacketReader packet, ref WorldClass session) { uint realmSplitState = 0; var date = "01/01/01"; PacketWriter realmSplit = new PacketWriter(ServerMessage.RealmSplit); BitPack BitPack = new BitPack(realmSplit); BitPack.Write(date.Length, 7); realmSplit.WriteString(date); realmSplit.WriteUInt32(packet.Read<uint>()); realmSplit.WriteUInt32(realmSplitState); session.Send(ref realmSplit); // Crash!!! // Wrong data sent... // AddonMgr.WriteAddonData(ref session); }
public static void HandleRealmSplit(ref PacketReader packet, WorldClass session) { uint realmSplitState = 0; var date = "01/01/01"; PacketWriter realmSplit = new PacketWriter(ServerMessage.RealmSplit); BitPack BitPack = new BitPack(realmSplit); realmSplit.WriteUInt32(packet.Read<uint>()); realmSplit.WriteUInt32(realmSplitState); BitPack.Write(date.Length, 7); BitPack.Flush(); realmSplit.WriteString(date); session.Send(ref realmSplit); AddonHandler.WriteAddonData(session); }
public static void HandleMoveSetCanFly(ref WorldClass session) { PacketWriter setCanFly = new PacketWriter(JAMCMessage.MoveSetCanFly); BitPack BitPack = new BitPack(setCanFly, session.Character.Guid); BitPack.WriteGuidMask(7, 3, 1, 5, 0, 6, 2, 4); BitPack.Flush(); setCanFly.WriteUInt32(0); BitPack.WriteGuidBytes(2, 6, 7, 1, 3, 4, 6, 0); session.Send(setCanFly); }
public static void HandleStartCinematic(ref WorldClass session) { Character pChar = session.Character; PacketWriter startCinematic = new PacketWriter(LegacyMessage.StartCinematic); startCinematic.WriteUInt32(DBCStorage.RaceStorage[pChar.Race].CinematicSequence); session.Send(ref startCinematic); if (pChar.LoginCinematic) DB.Characters.Execute("UPDATE characters SET loginCinematic = 0 WHERE guid = ?", pChar.Guid); }
public static void HandleStartCinematic(ref WorldClass session) { Character pChar = session.Character; PacketWriter startCinematic = new PacketWriter(ServerMessage.StartCinematic); startCinematic.WriteUInt32(CliDB.ChrRaces.Single(race => race.Id == pChar.Race).CinematicSequence); session.Send(ref startCinematic); if (pChar.LoginCinematic) DB.Characters.Execute("UPDATE characters SET loginCinematic = 0 WHERE guid = ?", pChar.Guid); }
public static void HandleMoveSetCanFly(ref WorldClass session) { PacketWriter moveSetCanFly = new PacketWriter(ServerMessage.MoveSetCanFly); BitPack BitPack = new BitPack(moveSetCanFly, session.Character.Guid); BitPack.WriteGuidMask(5, 3, 0, 2, 4, 1, 6, 7); BitPack.Flush(); BitPack.WriteGuidBytes(1, 3, 5, 0, 7, 2, 4, 6); moveSetCanFly.WriteUInt32(0); session.Send(ref moveSetCanFly); }
public static void HandleLearnedSpells(ref WorldClass session, List<uint> newSpells) { PacketWriter writer = new PacketWriter(ServerMessage.LearnedSpells); BitPack BitPack = new BitPack(writer); BitPack.Write<int>(newSpells.Count, 22); BitPack.Write(0); BitPack.Flush(); for (int i = 0; i < newSpells.Count; i++) writer.WriteUInt32(newSpells[i]); session.Send(ref writer); }
public static void HandleBroadcastText(ref WorldClass session, int id) { var broadCastText = GossipMgr.GetBroadCastText<Creature>(id); PacketWriter dbReply = new PacketWriter(ServerMessage.DBReply); BitPack BitPack = new BitPack(dbReply); var textLength = broadCastText.Text.Length; var alternativeTextLength = broadCastText.AlternativeText.Length; var size = 48; if (textLength == 0 || alternativeTextLength == 0) size += 1; size += textLength + alternativeTextLength; dbReply.WriteUInt32(0); // UnixTime, last change server side dbReply.WriteUInt32((uint)DBTypes.BroadcastText); dbReply.WriteUInt32((uint)size); dbReply.WriteInt32(broadCastText.Id); dbReply.WriteInt32(broadCastText.Language); dbReply.WriteUInt16((ushort)broadCastText.Text.Length); dbReply.WriteString(broadCastText.Text); dbReply.WriteUInt16((ushort)broadCastText.AlternativeText.Length); dbReply.WriteString(broadCastText.AlternativeText); broadCastText.Emotes.ForEach(emote => dbReply.WriteInt32(emote)); dbReply.WriteUInt32(1); dbReply.WriteInt32(broadCastText.Id); session.Send(ref dbReply); }
public static void HandleUpdateObjectValues(ref WorldClass session) { WorldObject character = session.Character; PacketWriter updateObject = new PacketWriter(LegacyMessage.UpdateObject); updateObject.WriteUInt16((ushort)character.Map); updateObject.WriteUInt32(1); updateObject.WriteUInt8((byte)UpdateType.Values); updateObject.WriteGuid(character.Guid); character.WriteUpdateFields(ref updateObject); character.WriteDynamicUpdateFields(ref updateObject); session.Send(ref updateObject); }
public static void HandleChatMessageSay(ref PacketReader packet, ref WorldClass session) { BitUnpack BitUnpack = new BitUnpack(packet); int language = packet.ReadInt32(); uint messageLength = BitUnpack.GetBits<uint>(9); string chatMessage = packet.ReadString(messageLength); PacketWriter messageChat = new PacketWriter(LegacyMessage.MessageChat); ulong guid = WorldMgr.Session.Character.Guid; messageChat.WriteUInt8(1); messageChat.WriteInt32(language); messageChat.WriteUInt64(guid); messageChat.WriteUInt32(0); messageChat.WriteUInt64(guid); messageChat.WriteUInt32(messageLength + 1); messageChat.WriteCString(chatMessage); messageChat.WriteUInt16(0); session.Send(messageChat); }
public static void HandleMoveSetRunSpeed(ref WorldClass session, float speed = 7f) { PacketWriter setRunSpeed = new PacketWriter(JAMCMessage.MoveSetRunSpeed); BitPack BitPack = new BitPack(setRunSpeed, session.Character.Guid); BitPack.WriteGuidMask(0, 4, 1, 6, 3, 5, 7, 2); BitPack.Flush(); setRunSpeed.WriteFloat(speed); BitPack.WriteGuidBytes(7); setRunSpeed.WriteUInt32(0); BitPack.WriteGuidBytes(3, 6, 0, 4, 1, 5, 2); session.Send(setRunSpeed); }
public static void HandleSendKnownSpells(ref WorldClass session) { Character pChar = session.Character; PacketWriter writer = new PacketWriter(JAMCMessage.SendKnownSpells); BitPack BitPack = new BitPack(writer); BitPack.Write<uint>((uint)pChar.SpellList.Count, 24); BitPack.Write(1); BitPack.Flush(); pChar.SpellList.ForEach(spell => writer.WriteUInt32(spell.SpellId)); session.Send(ref writer); }
public static void HandleUpdateObject(ref PacketReader packet, ref WorldClass session) { Character character = session.Character; PacketWriter updateObject = new PacketWriter(LegacyMessage.UpdateObject); updateObject.WriteUInt16((ushort)character.Map); updateObject.WriteUInt32(1); // Grml sandbox style... updateObject.WriteUInt8(1); updateObject.WriteGuid(character.Guid); updateObject.WriteUInt8(4); UpdateFlag updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation | UpdateFlag.Self | UpdateFlag.Unknown4; WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags); character.WriteUpdateFields(ref updateObject); session.Send(updateObject); }
public static void HandleMoveSetFlightSpeed(ref WorldClass session, float speed = 7f) { PacketWriter setFlightSpeed = new PacketWriter(ServerMessage.MoveSetFlightSpeed); BitPack BitPack = new BitPack(setFlightSpeed, session.Character.Guid); BitPack.WriteGuidMask(5, 4, 2, 1, 7, 6, 3, 0); BitPack.Flush(); setFlightSpeed.WriteUInt32(0); BitPack.WriteGuidBytes(5, 7); setFlightSpeed.WriteFloat(speed); BitPack.WriteGuidBytes(1, 2, 3, 6, 0, 4); session.Send(ref setFlightSpeed); }
public static void HandleUpdateObjectCreate(ref WorldClass session) { WorldObject character = session.Character; PacketWriter updateObject = new PacketWriter(LegacyMessage.UpdateObject); updateObject.WriteUInt16((ushort)character.Map); updateObject.WriteUInt32(1); updateObject.WriteUInt8((byte)UpdateType.CreateObject); updateObject.WriteGuid(character.Guid); updateObject.WriteUInt8((byte)ObjectType.Player); UpdateFlag updateFlags = UpdateFlag.Alive | UpdateFlag.Rotation | UpdateFlag.Self; WorldMgr.WriteUpdateObjectMovement(ref updateObject, ref character, updateFlags); character.WriteUpdateFields(ref updateObject); character.WriteDynamicUpdateFields(ref updateObject); session.Send(ref updateObject); }
public static void HandleRealmCache(ref PacketReader packet, ref WorldClass session) { Character pChar = session.Character; uint realmId = packet.ReadUInt32(); SQLResult result = DB.Realms.Select("SELECT name FROM realms WHERE id = '{0}'", WorldConfig.RealmId); string realmName = result.Read<string>(0, "Name"); PacketWriter nameCache = new PacketWriter(LegacyMessage.RealmCache); nameCache.WriteUInt32(realmId); nameCache.WriteUInt8(0); // < 0 => End of packet nameCache.WriteUInt8(1); // Unknown nameCache.WriteCString(realmName); nameCache.WriteCString(realmName); session.Send(nameCache); }
public static void SendSendKnownSpells() { Character pChar = GetSession().Character; if (pChar.SpellList.Count == 0) SpellMgr.LoadSpells(); PacketWriter writer = new PacketWriter(LegacyMessage.SendKnownSpells); BitPack BitPack = new BitPack(writer); BitPack.Write(1); BitPack.Write<uint>((uint)pChar.SpellList.Count, 24); BitPack.Flush(); pChar.SpellList.ForEach(spell => writer.WriteUInt32(spell.SpellId)); GetSession().Send(writer); }
public static void HandleNameCache(ref PacketReader packet, ref WorldClass session) { Character pChar = session.Character; ulong guid = packet.ReadUInt64(); uint realmId = packet.ReadUInt32(); PacketWriter nameCache = new PacketWriter(LegacyMessage.NameCache); nameCache.WriteGuid(guid); nameCache.WriteUInt8(0); nameCache.WriteCString(pChar.Name); nameCache.WriteUInt32(realmId); nameCache.WriteUInt8(pChar.Race); nameCache.WriteUInt8(pChar.Gender); nameCache.WriteUInt8(pChar.Class); nameCache.WriteUInt8(0); session.Send(nameCache); }
public static void HandleMoveSetRunSpeed(ref WorldClass session, float speed = 7f) { PacketWriter setRunSpeed = new PacketWriter(ServerMessage.MoveSetRunSpeed); BitPack BitPack = new BitPack(setRunSpeed, session.Character.Guid); BitPack.WriteGuidMask(6, 1, 2, 5, 0, 3, 7, 4); BitPack.Flush(); BitPack.WriteGuidBytes(3, 0, 1, 5); setRunSpeed.WriteFloat(speed); BitPack.WriteGuidBytes(7, 4, 2); setRunSpeed.WriteUInt32(0); BitPack.WriteGuidBytes(6); session.Send(ref setRunSpeed); }