public bool HandlePacket(PacketList.Server opcode, GameReader packet, GameData gameData, bool Handled, ExtensionHandler extensions) { InfoExt infoExt = (InfoExt)extensions.Get("InfoExt"); switch (opcode) { case PacketList.Server.CreatureSay: Character toon = new Character(); toon.ObjectID = packet.readD(); ChatType type = (ChatType)packet.readD(); toon.Name = packet.readS(); ChatReceived(type, toon, packet.readS(), packet, gameData, extensions); break; case PacketList.Server.Die: Character toon2 = new Character(); toon2.ObjectID = packet.readD(); bool hideout = (packet.readD() == 0x00) ? false : true; bool castle = (packet.readD() == 0x00) ? false : true; bool siege = (packet.readD() == 0x00) ? false : true; bool sweep = (packet.readD() == 0x00) ? false : true; bool fixedresp = (packet.readD() == 0x00) ? false : true; bool fortress = (packet.readD() == 0x00) ? false : true; if (toon2.ObjectID == infoExt.User.ObjectID) SelfDie(hideout, castle, siege, fortress, packet, gameData, extensions); else OtherDie(hideout, castle, siege, fortress, sweep, fixedresp, packet, gameData, extensions); break; } return false; }
public void ChatToDebug(ChatType type, Character sender, string message, GameReader packet, GameData gameData, ExtensionHandler extensions) { if (type == ChatType.Announcement) sender.Name = ""; Debug.Information(type.ToString() + ":" + sender.Name + ": " + message); if (type == ChatType.Private && sender.Name == "Reporter") { gameData.commands.SendMessage(ChatType.Private, sender, "ECHO: " + message); } }
public bool HandlePacket(PacketList.Server opcode, GameReader packet, GameData gameData, bool Handled, ExtensionHandler extensions) { InfoExt infoExt = (InfoExt)extensions.Get("InfoExt"); if (infoExt.HandlePacket(opcode, packet, gameData, Handled, extensions)) Handled = true; Events events = (Events)extensions.Get("Events"); if (events.HandlePacket(opcode, packet, gameData, Handled, extensions)) Handled = true; return Handled; }
public static Character parsePacket(GameReader packet) { Character toon = new Character(); toon.ObjectID = packet.readD(); toon.NpcTypeId = packet.readD(); toon.isAttackable = packet.readD(); toon.X = packet.readD(); toon.Y = packet.readD(); toon.Z = packet.readD(); toon.Heading = packet.readD(); packet.readD(); toon.MatkSpd = packet.readD(); toon.PatkSpd = packet.readD(); toon.RunSpd = packet.readD(); toon.WalkSpd = packet.readD(); toon.SwimRunSpd = packet.readD(); toon.SwimWalkSpd = packet.readD(); toon.RunSpd = packet.readD(); toon.WalkSpd = packet.readD(); toon.FlyRunSpd = packet.readD(); toon.FlyWalkSpd = packet.readD(); toon.MoveMul = packet.readF(); toon.AtkSpeedMul = packet.readF(); toon.ColRadius = packet.readF(); toon.ColHeight = packet.readF(); toon.IDRhand = packet.readD(); packet.readD(); toon.IDLhand = packet.readD(); packet.readC(); toon.isRunning = packet.readC(); toon.isInCombat = packet.readC(); toon.isAlikeDead = packet.readC(); toon.Invisible = packet.readC(); toon.Name = packet.readS(); toon.Title = packet.readS(); packet.readD(); packet.readD(); packet.readD(); toon.AbnormalEffect = packet.readD(); toon.ClanID = packet.readD(); toon.ClanCrestID = packet.readD(); packet.readD(); packet.readD(); packet.readC(); toon.Team = packet.readC(); toon.ColRadius = packet.readF(); toon.ColHeight = packet.readF(); return toon; }
public bool HandlePacket(PacketList.Server opcode, GameReader packet, GameData gameData, bool Handled, ExtensionHandler extensions) { switch (opcode) { case PacketList.Server.UserInfo: User = Packets.UserInfo.parsePacket(packet); break; case PacketList.Server.CharInfo: Character temp = Packets.CharInfo.parsePacket(packet); if(!KnownUsers.ContainsKey(temp.ObjectID)) KnownUsers.Add(temp.ObjectID, temp); else KnownUsers[temp.ObjectID] = temp; break; case PacketList.Server.NpcInfo: Character temp2 = Packets.NPCInfo.parsePacket(packet); if(!KnownNPCs.ContainsKey(temp2.ObjectID)) KnownNPCs.Add(temp2.ObjectID, temp2); else KnownNPCs[temp2.ObjectID] = temp2; break; case PacketList.Server.TargetSelectedPacket: Int32 objectid = packet.readD(); if (KnownUsers.ContainsKey(objectid)) { Targeted = KnownUsers[objectid]; } else if (KnownNPCs.ContainsKey(objectid)) { Targeted = KnownNPCs[objectid]; } break; case PacketList.Server.TargetUnselectedPacket: if(Targeted != null && Targeted.ObjectID == packet.readD()) Targeted = null; break; } return false; }
public static Character parsePacket(GameReader packet) { Character toon = new Character(); toon.X = packet.readD(); toon.Y = packet.readD(); toon.Z = packet.readD(); packet.readD(); toon.ObjectID = packet.readD(); toon.Name = packet.readS(); toon.Race = packet.readD(); toon.Sex = packet.readD(); toon.ClassID = packet.readD(); toon.IDUnder = packet.readD(); toon.IDHead = packet.readD(); toon.IDRhand = packet.readD(); toon.IDLhand = packet.readD(); toon.IDGloves = packet.readD(); toon.IDChest = packet.readD(); toon.IDLegs = packet.readD(); toon.IDFeet = packet.readD(); toon.IDBack = packet.readD(); toon.IDLrhand = packet.readD(); toon.IDHair = packet.readD(); toon.IDHair2 = packet.readD(); toon.IDRbracelet = packet.readD(); toon.IDLbracelet = packet.readD(); toon.IDDeco = packet.readD(); toon.IDDeco2 = packet.readD(); toon.IDDeco3 = packet.readD(); toon.IDDeco4 = packet.readD(); toon.IDDeco5 = packet.readD(); toon.IDDeco6 = packet.readD(); toon.IDBelt = packet.readD(); toon.AugIDUnder = packet.readD(); toon.AugIDHead = packet.readD(); toon.AugIDRhand = packet.readD(); toon.AugIDLhand = packet.readD(); toon.AugIDGloves = packet.readD(); toon.AugIDChest = packet.readD(); toon.AugIDLegs = packet.readD(); toon.AugIDFeet = packet.readD(); toon.AugIDBack = packet.readD(); toon.AugIDLrhand = packet.readD(); toon.AugIDHair = packet.readD(); toon.AugIDHair2 = packet.readD(); toon.AugIDRbracelet = packet.readD(); toon.AugIDLbracelet = packet.readD(); toon.AugIDDeco = packet.readD(); toon.AugIDDeco2 = packet.readD(); toon.AugIDDeco3 = packet.readD(); toon.AugIDDeco4 = packet.readD(); toon.AugIDDeco5 = packet.readD(); toon.AugIDDeco6 = packet.readD(); toon.AugIDBelt = packet.readD(); packet.readD(); packet.readD(); toon.PvPFlag = packet.readD(); toon.Karma = packet.readD(); toon.MatkSpd = packet.readD(); toon.PatkSpd = packet.readD(); toon.PvPFlag = packet.readD(); toon.Karma = packet.readD(); toon.RunSpd = packet.readD(); toon.WalkSpd = packet.readD(); toon.SwimRunSpd = packet.readD(); toon.SwimWalkSpd = packet.readD(); toon.RunSpd = packet.readD(); toon.WalkSpd = packet.readD(); toon.FlyRunSpd = packet.readD(); toon.FlyWalkSpd = packet.readD(); toon.MoveMul = packet.readF(); toon.AtkSpeedMul = packet.readF(); toon.ColRadius = packet.readF(); toon.ColHeight = packet.readF(); toon.HairStyle = packet.readD(); toon.HairColor = packet.readD(); toon.Face = packet.readD(); toon.Title = packet.readS(); toon.ClanID = packet.readD(); toon.ClanCrestID = packet.readD(); toon.AllyID = packet.readD(); toon.AllyCrestID = packet.readD(); packet.readD(); toon.isSitting = packet.readC(); toon.isRunning = packet.readC(); toon.isInCombat = packet.readC(); toon.isAlikeDead = packet.readC(); toon.Invisible = packet.readC(); toon.MountType = packet.readC(); toon.PrivateStoreType = packet.readC(); toon.CubicsSize = packet.readH(); toon.CubicID = packet.readH(); packet.readC(); toon.AbnormalEffect = packet.readD(); toon.RecomLeft = packet.readC(); toon.RecomHave = packet.readH(); toon.MountNpcID = packet.readD(); toon.ClassID = packet.readD(); packet.readD(); toon.isMounted = packet.readC(); toon.Team = packet.readC(); toon.ClanCrestLargeID = packet.readD(); toon.isNoble = packet.readC(); toon.isHero = packet.readC(); toon.isFishing = packet.readC(); toon.FishingX = packet.readD(); toon.FishingY = packet.readD(); toon.FishingZ = packet.readD(); toon.NameColor = packet.readD(); toon.Heading = packet.readD(); toon.PledgeClass = packet.readD(); toon.PledgeType = packet.readD(); toon.TitleColor = packet.readD(); toon.CursedWeaponEquipID = packet.readD(); toon.ReputationScore = packet.readD(); toon.TranformationID = packet.readD(); toon.AgathionId = packet.readD(); return toon; }
public static Character parsePacket(GameReader packet) { Character toon = new Character(); toon.X = packet.readD(); toon.Y = packet.readD(); toon.Z = packet.readD(); toon.isInAirShip = packet.readD(); toon.ObjectID = packet.readD(); toon.Name = packet.readS(); toon.Race = packet.readD(); toon.Sex = packet.readD(); toon.ClassID = packet.readD(); toon.Level = packet.readD(); toon.Exp = packet.readQ(); toon.Str = packet.readD(); toon.Dex = packet.readD(); toon.Con = packet.readD(); toon.Int = packet.readD(); toon.Wit = packet.readD(); toon.Men = packet.readD(); toon.MaxHP = packet.readD(); toon.CurrentHP = packet.readD(); toon.MaxMP = packet.readD(); toon.CurrentMP = packet.readD(); toon.Sp = packet.readD(); toon.CurrentLoad = packet.readD(); toon.MaxLoad = packet.readD(); toon.WeaponEquipment = packet.readD(); toon.Under = packet.readD(); toon.Rear = packet.readD(); toon.Lear = packet.readD(); toon.Neck = packet.readD(); toon.Finger = packet.readD(); toon.Lfinger = packet.readD(); toon.Head = packet.readD(); toon.Rhand = packet.readD(); toon.Lhand = packet.readD(); toon.Gloves = packet.readD(); toon.Chest = packet.readD(); toon.Legs = packet.readD(); toon.Feet = packet.readD(); toon.Back = packet.readD(); toon.Lrhand = packet.readD(); toon.Hair = packet.readD(); toon.Hair2 = packet.readD(); toon.Rbracelet = packet.readD(); toon.Lbracelet = packet.readD(); toon.Deco = packet.readD(); toon.Deco2 = packet.readD(); toon.Deco3 = packet.readD(); toon.Deco4 = packet.readD(); toon.Deco5 = packet.readD(); toon.Deco6 = packet.readD(); toon.Belt = packet.readD(); toon.IDUnder = packet.readD(); toon.IDRear = packet.readD(); toon.IDLear = packet.readD(); toon.IDNeck = packet.readD(); toon.IDFinger = packet.readD(); toon.IDLfinger = packet.readD(); toon.IDHead = packet.readD(); toon.IDRhand = packet.readD(); toon.IDLhand = packet.readD(); toon.IDGloves = packet.readD(); toon.IDChest = packet.readD(); toon.IDLegs = packet.readD(); toon.IDFeet = packet.readD(); toon.IDBack = packet.readD(); toon.IDLrhand = packet.readD(); toon.IDHair = packet.readD(); toon.IDHair2 = packet.readD(); toon.IDRbracelet = packet.readD(); toon.IDLbracelet = packet.readD(); toon.IDDeco = packet.readD(); toon.IDDeco2 = packet.readD(); toon.IDDeco3 = packet.readD(); toon.IDDeco4 = packet.readD(); toon.IDDeco5 = packet.readD(); toon.IDDeco6 = packet.readD(); toon.IDBelt = packet.readD(); toon.AugIDUnder = packet.readD(); toon.AugIDRear = packet.readD(); toon.AugIDLear = packet.readD(); toon.AugIDNeck = packet.readD(); toon.AugIDFinger = packet.readD(); toon.AugIDLfinger = packet.readD(); toon.AugIDHead = packet.readD(); toon.AugIDRhand = packet.readD(); toon.AugIDLhand = packet.readD(); toon.AugIDGloves = packet.readD(); toon.AugIDChest = packet.readD(); toon.AugIDLegs = packet.readD(); toon.AugIDFeet = packet.readD(); toon.AugIDBack = packet.readD(); toon.AugIDLrhand = packet.readD(); toon.AugIDHair = packet.readD(); toon.AugIDHair2 = packet.readD(); toon.AugIDRbracelet = packet.readD(); toon.AugIDLbracelet = packet.readD(); toon.AugIDDeco = packet.readD(); toon.AugIDDeco2 = packet.readD(); toon.AugIDDeco3 = packet.readD(); toon.AugIDDeco4 = packet.readD(); toon.AugIDDeco5 = packet.readD(); toon.AugIDDeco6 = packet.readD(); toon.AugIDBelt = packet.readD(); toon.TalismanSlots = packet.readD(); packet.readD(); toon.Patk = packet.readD(); toon.PatkSpd = packet.readD(); toon.Pdef = packet.readD(); toon.EvasionRate = packet.readD(); toon.Accuracy = packet.readD(); toon.CriticalHit = packet.readD(); toon.Matk = packet.readD(); toon.MatkSpd = packet.readD(); toon.PatkSpd = packet.readD(); toon.Mdef = packet.readD(); toon.PvPFlag = packet.readD(); toon.Karma = packet.readD(); toon.RunSpd = packet.readD(); toon.WalkSpd = packet.readD(); toon.SwimRunSpd = packet.readD(); toon.SwimWalkSpd = packet.readD(); packet.readD(); packet.readD(); toon.FlyRunSpd = packet.readD(); toon.FlyWalkSpd = packet.readD(); toon.MoveMul = packet.readF(); toon.AtkSpeedMul = packet.readF(); toon.ColRadius = packet.readF(); toon.ColHeight = packet.readF(); toon.HairStyle = packet.readD(); toon.HairColor = packet.readD(); toon.Face = packet.readD(); toon.isGM = packet.readD(); toon.Title = packet.readS(); toon.ClanID = packet.readD(); toon.ClanCrestID = packet.readD(); toon.AllyID = packet.readD(); toon.AllyCrestID = packet.readD(); toon.Relation = packet.readD(); toon.MountType = packet.readC(); toon.PrivateStoreType = packet.readC(); toon.DwarvenCraft = packet.readC(); toon.PkKills = packet.readD(); toon.PvPKills = packet.readD(); toon.CubicsSize = packet.readH(); toon.CubicID = packet.readH(); packet.readC(); toon.AbnormalEffect = packet.readD(); toon.FlayingMounted = packet.readC(); toon.ClanPrivileges = packet.readD(); toon.RecomLeft = packet.readH(); toon.RecomHave = packet.readH(); toon.MountNpcID = packet.readD(); toon.InventoryLimit = packet.readH(); toon.ClassID = packet.readD(); packet.readD(); toon.MaxCP = packet.readD(); toon.CurrentCP = packet.readD(); toon.isMounted = packet.readC(); toon.Team = packet.readC(); toon.ClanCrestLargeID = packet.readD(); toon.isNoble = packet.readC(); toon.isHero = packet.readC(); toon.isFishing = packet.readC(); toon.FishingX = packet.readD(); toon.FishingY = packet.readD(); toon.FishingZ = packet.readD(); toon.NameColor = packet.readD(); toon.isRunning = packet.readC(); toon.PledgeClass = packet.readD(); toon.PledgeType = packet.readD(); toon.TitleColor = packet.readD(); toon.CursedWeaponEquipID = packet.readD(); toon.TranformationID = packet.readD(); toon.AtkElementAttr = packet.readH(); toon.AttackElementVal = packet.readH(); toon.DefAttrFire = packet.readH(); toon.DefAttrWater = packet.readH(); toon.DefAttrWind = packet.readH(); toon.DefAttrEarth = packet.readH(); toon.DefAttrHoly = packet.readH(); toon.DefAttrDark = packet.readH(); toon.AgathionId = packet.readD(); toon.Fame = packet.readD(); packet.readD(); toon.VitalityPoints = packet.readD(); packet.readD(); packet.readD(); packet.readD(); return toon; }
public override void DataReceived(ref byte[] inputPacket) { if (gameData.CryptIn == null) { #region GameServer Auth stuff byte[] game_key = new byte[16]; game_key[0] = inputPacket[4]; game_key[1] = inputPacket[5]; game_key[2] = inputPacket[6]; game_key[3] = inputPacket[7]; game_key[4] = inputPacket[8]; game_key[5] = inputPacket[9]; game_key[6] = inputPacket[10]; game_key[7] = inputPacket[11]; game_key[8] = 0xc8; game_key[9] = 0x27; game_key[10] = 0x93; game_key[11] = 0x01; game_key[12] = 0xa1; game_key[13] = 0x6c; game_key[14] = 0x31; game_key[15] = 0x97; gameData.CryptIn = new GameCrypt(); gameData.CryptOut = new GameCrypt(); gameData.CryptIn.setKey(game_key); gameData.CryptOut.setKey(game_key); int offset = 0; byte[] buff = new byte[1024]; buff[offset++] = 0x2B; for (int i = 0; i < UserConfig.Username.Length; i++) { buff[offset++] = (byte)UserConfig.Username[i]; buff[offset++] = 0x00; } buff[offset++] = 0x00; buff[offset++] = 0x00; buff[offset++] = gameData.PlayOK[4]; buff[offset++] = gameData.PlayOK[5]; buff[offset++] = gameData.PlayOK[6]; buff[offset++] = gameData.PlayOK[7]; buff[offset++] = gameData.PlayOK[0]; buff[offset++] = gameData.PlayOK[1]; buff[offset++] = gameData.PlayOK[2]; buff[offset++] = gameData.PlayOK[3]; buff[offset++] = gameData.LoginOK[0]; buff[offset++] = gameData.LoginOK[1]; buff[offset++] = gameData.LoginOK[2]; buff[offset++] = gameData.LoginOK[3]; buff[offset++] = gameData.LoginOK[4]; buff[offset++] = gameData.LoginOK[5]; buff[offset++] = gameData.LoginOK[6]; buff[offset++] = gameData.LoginOK[7]; buff[offset++] = 0x01; buff[offset++] = 0x00; buff[offset++] = 0x00; buff[offset++] = 0x00; buff[offset++] = 0x30; buff[offset++] = 0x01; buff[offset++] = 0x00; buff[offset++] = 0x00; for (int x = 0; x < 10; x++) buff[offset++] = 0x00; byte[] realBuffer = new byte[offset]; for (int i = 0; i < realBuffer.Length; i++) realBuffer[i] = buff[i]; GameWriter pck = new GameWriter(realBuffer, gameData); pck.Encrypt(); byte[] bytes = pck.Finalize(); Send(bytes); Debug.Information("Authenticating with the GameServer."); #endregion } else { GameReader packet = new GameReader(inputPacket, gameData); packet.Decrypt(); PacketList.Server opcode = (PacketList.Server)packet.readB(); if (opcode == PacketList.Server.DummyPacket) { opcode = (PacketList.Server)BitConverter.ToUInt16(new byte[] {(byte)opcode, packet.readB()}, 0); } switch (opcode) { case PacketList.Server.CharacterSelectionInfo: if (!CallPlugin_HandlePacket(opcode, packet)) { Debug.Information("Selecting the character specified in the config."); GameWriter pw = new GameWriter(gameData); pw.writeB(PacketList.Client.CharacterSelect); pw.writeD(Int32.Parse(UserConfig.Toon) - 1); pw.writeB(General.Hex("00 00 00 00 00 00 00 00 00 00 00 00 00 00")); pw.Encrypt(); Send(pw.Finalize()); } else { Debug.Information("The 'CharacterSelectionInfo' packet was overridden by a plugin."); } break; case PacketList.Server.CharacterSelectedPacket: if (!CallPlugin_HandlePacket(opcode, packet)) { byte[] EnterWorldPacket = General.Hex(PacketList.EnterWorld); GameWriter gw = new GameWriter(EnterWorldPacket, gameData); gw.Encrypt(); Send(gw.Finalize()); Debug.Information("Character selected, entering world..."); CallPlugin_HandlePacket(opcode, packet); } else { Debug.Information("The 'CharacterSelectedPacket' packet was overridden by a plugin."); } break; default: CallPlugin_HandlePacket(opcode, packet); break; } } }
public bool CallPlugin_HandlePacket(PacketList.Server opcode, GameReader packet) { bool SimpleHandled = false; for (int i = 0; i < Plugins.Length; i++) { if (Plugins[i].HandlePacket(opcode, packet, gameData, SimpleHandled, extensions)) SimpleHandled = true; } return SimpleHandled; }