/// <summary> /// Create 'LevelInfo' packet /// </summary> /// <returns></returns> public byte[] CreateBuff() { byte[] block = new byte[0x29]; // Create our null byte array PacketWriter PW = new PacketWriter(block); // Initialize the writer PW.WriteByteArray(0, EngineUtils.PacketUtils.calcPacket(block.Length, 0x831)); // Write the packet header PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); // Write the string success cmd PW.WriteInt32(29, _exp); // Write the player's experience PW.WriteInt32(33, _level); // Write the player's level PW.WriteInt32(37, _license); // Write the player's licence number return block; }
/// <summary> /// Create 'SelectServer' packet /// </summary> /// <returns></returns> public byte[] CreateBuff() { byte[] block = new byte[0x12]; // Create our null byte array PacketWriter PW = new PacketWriter(block); // Initialize the reader PW.WriteByteArray(0, EngineUtils.PacketUtils.calcPacket(block.Length, 0x3EF)); // Write the packet header PW.WriteInt32(5, (Int32)_status); // Write the server status (idle) return block; }
/// <summary> /// Create 'CashBalance' packet /// </summary> /// <returns></returns> public byte[] CreateBuff() { byte[] block = new byte[0x21]; // Create our null byte array PacketWriter PW = new PacketWriter(block); // Initialize the reader PW.WriteByteArray(0, EngineUtils.PacketUtils.calcPacket(block.Length, 0x8E0)); // Create the packet header PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); // Write the success string cmd PW.WriteInt32(29, _gpotatos); // Write the gpotatos number return block; }
/// <summary> /// Send balance info to the player. /// </summary> /// <param name="gpotatos"></param> /// <returns></returns> public static byte[] CashBalance_Buff(Int32 gpotatos) { byte[] block = new byte[0x21]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x21, 0x8E0); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); PW.WriteInt32(29, gpotatos); return block; }
/// <summary> /// Create a packet buffer /// </summary> /// <returns></returns> public byte[] CreateBuff() { byte[] block = new byte[0x253]; // Create our null byte array PacketWriter PW = new PacketWriter(block); // Initialize the writer PW.WriteByteArray(0, EngineUtils.PacketUtils.calcPacket(block.Length, 0x920)); // Write the packet header PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); // Write the string success cmd PW.WriteString(39, charname); // Write the character's name, you can use some html code like: <#ff0000> or <glow> if(clanid.Length > 4) { // Player's clan id must be under 4 letters Error.Invoke("Clan id is too long"); // Optional PW.WriteString(156, "null"); // Optional } else { PW.WriteString(156, clanid); } // Write the clan's ID, still don't know what is it exactly, I just use "CL#1", its a 4 lenght string PW.WriteString(160, clanname); // Write the clan name PW.WriteSByte(0x26, (SByte)chartype); // Choose the desired character (luna, etc..) PW.WriteSByte(247, (SByte)_age); // Write the age PW.WriteInt16(248, (Int16)_level); // Write the level PW.WriteInt16(250, (Int16)_license); // Write the license PW.WriteInt32(252, (Int32)zoneid); // Write the country (France, etc...) check the list in mate_zip.txt PW.WriteString(256, zoneinfo); // Write the zone info PW.WriteString(377, biostr); // Write the bio return block; }
/// <summary> /// Create 'PlayerInfo' packet /// </summary> /// <returns></returns> public byte[] CreateBuff() { byte[] block = new byte[0xD7]; // Create our null byte array PacketWriter PW = new PacketWriter(block); // Initialize the writer PW.WriteByteArray(0, EngineUtils.PacketUtils.calcPacket(block.Length, 0x90A)); // Write the packet header PW.WriteSByte(5, 4); // I don't know yet what is it PW.WriteSByte(9, 0x2D); // I don't know yet what is it PW.WriteString(11, EngineEnum.PacketEnum.PacketCommand.success_0); // Write the success cmd string PW.WriteSByte(41, 5); // I don't know yet what is it PW.WriteSByte(45, 1); // I don't know yet what is it PW.WriteSByte(47, 0x32); // I don't know yet what is it PW.WriteString(49, "ID1_Testo_2"); // I don't know yet what is it PW.WriteString(90, "ID1_Test"); // I don't know yet what is it PW.WriteSByte(99, 2); // I don't know yet what is it PW.WriteSByte(101, 0xC); // I don't know yet what is it PW.WriteSByte(103, 5); // I don't know yet what is it PW.WriteSByte(105, 5); // I don't know yet what is it PW.WriteSByte(107, _level); // Write the player level PW.WriteSByte(115, 4); // I don't know yet what is it PW.WriteSByte(117, 0xC); // I don't know yet what is it PW.WriteSByte(119, 5); // I don't know yet what is it PW.WriteInt32(123, 6); // I don't know yet what is it PW.WriteInt32(127, 7); // I don't know yet what is it PW.WriteSByte(131, 0x40); // I don't know yet what is it PW.WriteSByte(133, 0x10); // I don't know yet what is it PW.WriteSByte(135, 7); // I don't know yet what is it PW.WriteSByte(139, 8); // I don't know yet what is it PW.WriteSByte(143, 9); // I don't know yet what is it PW.WriteSByte(147, 10); // I don't know yet what is it PW.WriteInt16(152, 11266); // I don't know yet what is it PW.WriteInt16(200, 3076); // I don't know yet what is it PW.WriteSByte(203, 2); // I don't know yet what is it PW.WriteSByte(207, 3); // I don't know yet what is it PW.WriteSByte(211, 3); // I don't know yet what is it return block; }
/// <summary> /// Create 'TrickList' packet /// </summary> /// <returns></returns> public byte[] CreateBuff() { byte[] block = new byte[0x95]; // Create our null byte array PacketWriter PW = new PacketWriter(block); // Initialize the writer PW.WriteByteArray(0, EngineUtils.PacketUtils.calcPacket(block.Length, 0x839)); // Write the packet header PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); // Write the success string cmd // Create our trick list Tricks.Add(EngineEnum.PlayerEnum.TrickCode.GRIND); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.DASH); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.BACK_SKATING); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.BUTTING); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.POWER_SLIDE); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.BACK_FLIP); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.FRONT_FLIP); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.AIR_TWIST); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.POWER_SWING); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.GRIP_TURN); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.JUMPING_STEER); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.POWER_JUMP); Tricks.Add(EngineEnum.PlayerEnum.TrickCode.WALL_RIDE); PW.WriteSByte(30, 0xD); // Write tricks number // Write each trick in our packet for (int i = 32, j = 0; i < 149 && j < Tricks.Count; i += 9, j++) { PW.WriteInt16(i, (Int16)Tricks[j]); } // Write each trick level in our packet for (int i = 0x24, j = 0; i < 0x95 && j < tricksLevel.Count(); i += 9, j++) { PW.WriteInt32(i, (Int32)tricksLevel[j]); } // Apply each trick (1/0 - Apply Yes/No) for (int i = 40; i < 149; i += 9) // TODO: Put this in the database { PW.WriteSByte(i, 1); } return block; }
/// <summary> /// Create the selected character type items list /// </summary> /// <param name="data"></param> /// <param name="char_type"></param> public void CreateItemList(byte[] data, EngineEnum.PlayerEnum.CharactersType char_type) { // Initializing the packet writer PacketWriter PW = new PacketWriter(data); // Initializing basic stuff SByte unknow_number = 0x0A; Int32 item_number = 0; // Initializing items list List<int> rookieItemList = new List<int>(); List<int> lunaItemList = new List<int>(); List<int> rushItemList = new List<int>(); List<int> tippyItemList = new List<int>(); // Initializing inventory enums EngineEnum.IventoryEnum.ROOKIE_ITEM_LIST[] rookie_items = (EngineEnum.IventoryEnum.ROOKIE_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.ROOKIE_ITEM_LIST)); EngineEnum.IventoryEnum.LUNA_ITEM_LIST[] luna_items = (EngineEnum.IventoryEnum.LUNA_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.LUNA_ITEM_LIST)); EngineEnum.IventoryEnum.RUSH_ITEM_LIST[] rush_items = (EngineEnum.IventoryEnum.RUSH_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.RUSH_ITEM_LIST)); EngineEnum.IventoryEnum.TIPPY_ITEM_LIST[] tippy_items = (EngineEnum.IventoryEnum.TIPPY_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.TIPPY_ITEM_LIST)); switch (char_type) { case EngineEnum.PlayerEnum.CharactersType.CHARACTER_ROOKIE: item_number = rookie_items.Count(); for (int i = 0x24, j = 0; i < (item_number * 0x1D) && j < item_number; i += 0x1D, j++) { PW.WriteInt16(i, (Int16)rookie_items[j]); } break; // Load rookie items case EngineEnum.PlayerEnum.CharactersType.CHARACTER_LUNA: item_number = luna_items.Count(); for (int i = 0x24, j = 0; i < (item_number * 0x1D) && j < item_number; i += 0x1D, j++) { PW.WriteInt16(i, (Int16)luna_items[j]); } break; // Load luna items case EngineEnum.PlayerEnum.CharactersType.CHARACTER_RUSH: item_number = rush_items.Count(); for (int i = 0x24, j = 0; i < (item_number * 0x1D) && j < item_number; i += 0x1D, j++) { PW.WriteInt16(i, (Int16)rush_items[j]); } break; // Load rush items case EngineEnum.PlayerEnum.CharactersType.CHARACTER_TIPPY: item_number = tippy_items.Count(); for (int i = 0x24, j = 0; i < (item_number * 0x1D) && j < item_number; i += 0x1D, j++) { PW.WriteInt16(i, (Int16)tippy_items[j]); } break; // Load tippy items case EngineEnum.PlayerEnum.CharactersType.CHARACTER_KLAUS: // There is still no avaiable items for klaus case EngineEnum.PlayerEnum.CharactersType.CHARACTER_KARA: // There is still no avaiable items for kara break; } PW.WriteInt32(30, item_number); // Write some unknow number for now (each items) maybe something to do with duration? for (int i = 0x2E; i < (item_number * 0x1D); i += 0x1D) { PW.WriteSByte(i, unknow_number); } // Write the position of each items for (int i = 0x20, j = 0; i < (item_number * 0x1D) && j < (item_number * 0x1D); i += 0x1D, j++) { PW.WriteInt16(i, (Int16)j); } }
/// <summary> /// Create a trick list. /// </summary> /// <param name="grind_level"></param> /// <param name="backflip_level"></param> /// <param name="frontflip_level"></param> /// <param name="airtwist_level"></param> /// <param name="powerswing_level"></param> /// <param name="gripturn_level"></param> /// <param name="dash_level"></param> /// <param name="backskating_level"></param> /// <param name="jumpingsteer_level"></param> /// <param name="butting_level"></param> /// <param name="powerslide_level"></param> /// <param name="powerjump_level"></param> /// <param name="wallride_level"></param> /// <returns></returns> public static byte[] TrickList_Buff(int grind_level, int backflip_level, int frontflip_level, int airtwist_level, int powerswing_level, int gripturn_level, int dash_level, int backskating_level, int jumpingsteer_level, int butting_level, int powerslide_level, int powerjump_level, int wallride_level) { byte[] block = new byte[0x95]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x95, 0x839); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); // Write the trick list PW.WriteSByte(30, 0xD); // Tricks number PW.WriteInt16(32, (Int16)EngineEnum.WorldEnum.TrickCode.GRIND); PW.WriteSByte(40, 1); // Apply the trick PW.WriteInt16(41, (Int16)EngineEnum.WorldEnum.TrickCode.DASH); PW.WriteSByte(49, 1); // Apply the trick PW.WriteInt16(50, (Int16)EngineEnum.WorldEnum.TrickCode.BACK_SKATING); PW.WriteSByte(58, 1); // Apply the trick PW.WriteInt16(59, (Int16)EngineEnum.WorldEnum.TrickCode.BUTTING); PW.WriteSByte(67, 1); // Apply the trick PW.WriteInt16(68, (Int16)EngineEnum.WorldEnum.TrickCode.POWER_SLIDE); PW.WriteSByte(76, 1); // Apply the trick PW.WriteInt16(77, (Int16)EngineEnum.WorldEnum.TrickCode.BACK_FLIP); PW.WriteSByte(85, 1); // Apply the trick PW.WriteInt16(86, (Int16)EngineEnum.WorldEnum.TrickCode.FRONT_FLIP); PW.WriteSByte(94, 1); // Apply the trick PW.WriteInt16(95, (Int16)EngineEnum.WorldEnum.TrickCode.AIR_TWIST); PW.WriteSByte(103, 1); // Apply the trick PW.WriteInt16(104, (Int16)EngineEnum.WorldEnum.TrickCode.POWER_SWING); PW.WriteSByte(112, 1); // Apply the trick PW.WriteInt16(113, (Int16)EngineEnum.WorldEnum.TrickCode.GRIP_TURN); PW.WriteSByte(121, 1); // Apply the trick PW.WriteInt16(122, (Int16)EngineEnum.WorldEnum.TrickCode.JUMPING_STEER); PW.WriteSByte(130, 1); // Apply the trick PW.WriteInt16(131, (Int16)EngineEnum.WorldEnum.TrickCode.POWER_JUMP); PW.WriteSByte(139, 1); // Apply the trick PW.WriteInt16(140, (Int16)EngineEnum.WorldEnum.TrickCode.WALL_RIDE); PW.WriteSByte(148, 1); // Apply the trick // Write trick levels PW.WriteInt32(0x24, grind_level); PW.WriteInt32(0x2D, dash_level); PW.WriteInt32(0x36, backskating_level); PW.WriteInt32(0x3F, butting_level); PW.WriteInt32(0x48, powerslide_level); PW.WriteInt32(0x51, backflip_level); PW.WriteInt32(0x5A, frontflip_level); PW.WriteInt32(0x63, airtwist_level); PW.WriteInt32(0x6C, powerswing_level); PW.WriteInt32(0x75, gripturn_level); PW.WriteInt32(0x7E, powerjump_level); PW.WriteInt32(0x87, wallride_level); PW.WriteInt32(0x90, gripturn_level); return block; }
/// <summary> /// Still don't really know what can do this packet. /// </summary> /// <returns></returns> public static byte[] PlayerInfo_Buff() { byte[] block = new byte[0xD7]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0xD7, 0x90A); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteSByte(5, 4); PW.WriteSByte(9, 0x2D); PW.WriteString(11, EngineEnum.PacketEnum.PacketCommand.success_0); PW.WriteSByte(41, 5); PW.WriteSByte(45, 1); PW.WriteSByte(47, 0x32); PW.WriteString(49, "ID1_Testo_2"); // Thanks itsexe :) PW.WriteString(90, "ID1_Test"); // Thanks itsexe :) PW.WriteSByte(99, 2); PW.WriteSByte(101, 0xC); PW.WriteSByte(103, 5); PW.WriteSByte(105, 5); PW.WriteSByte(107, 45); PW.WriteSByte(115, 4); PW.WriteSByte(117, 0xC); PW.WriteSByte(119, 5); PW.WriteInt32(123, 6); PW.WriteInt32(127, 7); PW.WriteSByte(131, 0x40); PW.WriteSByte(133, 0x10); PW.WriteSByte(135, 7); PW.WriteSByte(139, 8); PW.WriteSByte(143, 9); PW.WriteSByte(147, 10); PW.WriteInt16(152, 11266); PW.WriteInt16(200, 3076); PW.WriteSByte(203, 2); PW.WriteSByte(207, 3); PW.WriteSByte(211, 3); return block; }
/// <summary> /// Select the server created. /// </summary> /// <param name="status"></param> /// <returns></returns> public static byte[] SelectServer_Buff(EngineEnum.LoginEnum.SelectServerStatus status) { byte[] block = new byte[0x12]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x12, 0x3EF); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteInt32(5, (int)status); return block; }
/// <summary> /// Create a player character list. /// </summary> /// <param name="isFirstTime"></param> /// <param name="char_type"></param> /// <param name="char_name"></param> /// <returns></returns> public static byte[] PlayerCharacterList_Buff(bool isFirstTime, EngineEnum.WorldEnum.CharactersType char_type, string char_name) { byte[] block = new byte[0x120]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x120, 0x90E); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); PW.WriteString(30, char_name); // Write the character's name, you can use some html code like: <#ff0000> or <glow> PW.WriteInt32(73, isFirstTime ? 1 : 0); // Create a character/or no PW.WriteUInt32(75, 0); // I don't know what is it PW.WriteUInt32(79, (UInt32)char_type); // Choose the desired character (luna, etc..) PW.WriteUInt32(83, 0); // I don't know what is it return block; }
/// <summary> /// Used to log the user. /// </summary> /// <param name="auth_key"></param> /// <returns></returns> public static byte[] Login_Buff(string auth_key) { byte[] block = new byte[0x2F]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x2F, 0x3F1); // Calc our packet header.. // Initialize the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header stack PW.WriteByteArray(0, c_block); // Write the packet's data stack PW.WriteSByte(5, 1); // I don't know what is it PW.WriteString(9, auth_key); // Write the player's auth key PW.WriteInt32(42, 700); // I don't know what is it PW.WriteSByte(46, 1); // I don't know what is it return block; }
/// <summary> /// Big ass messy code to load inventory stuff of each character. /// </summary> /// <param name="packet"></param> /// <param name="D"></param> /// <param name="char_type"></param> /// <param name="char_item_list"></param> /// <param name="char_list_inventory_size"></param> public static void LoadItemList(byte[] packet, EngineEnum.WorldEnum.CharactersType char_type) { // Initializing basic stuff SByte unknow_number = 0x0A; // Still not sure about this Int32 item_number = 0; // To tell the loop where to stop // Initializing items list List<int> rookieItemList = new List<int>(); List<int> lunaItemList = new List<int>(); List<int> rushItemList = new List<int>(); List<int> tippyItemList = new List<int>(); // Initializing inventory enums EngineEnum.IventoryEnum.ROOKIE_ITEM_LIST[] rookie_items = (EngineEnum.IventoryEnum.ROOKIE_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.ROOKIE_ITEM_LIST)); EngineEnum.IventoryEnum.LUNA_ITEM_LIST[] luna_items = (EngineEnum.IventoryEnum.LUNA_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.LUNA_ITEM_LIST)); EngineEnum.IventoryEnum.RUSH_ITEM_LIST[] rush_items = (EngineEnum.IventoryEnum.RUSH_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.RUSH_ITEM_LIST)); EngineEnum.IventoryEnum.TIPPY_ITEM_LIST[] tippy_items = (EngineEnum.IventoryEnum.TIPPY_ITEM_LIST[])Enum.GetValues(typeof(EngineEnum.IventoryEnum.TIPPY_ITEM_LIST)); // Initializing the packet writer PacketWriter PW = new PacketWriter(packet); switch(char_type) { case EngineEnum.WorldEnum.CharactersType.CHARACTER_ROOKIE: item_number = 150; foreach (var itemId in rookie_items) rookieItemList.Add((int)itemId); for (int pItem = 0x24, feItem = 0; pItem < (item_number * 0x1D) && feItem < item_number; pItem += 0x1D, feItem++) PW.WriteInt16(pItem, (Int16)rookieItemList[feItem]); break; // Load rookie items case EngineEnum.WorldEnum.CharactersType.CHARACTER_LUNA: item_number = 150; foreach (var itemId in luna_items) lunaItemList.Add((int)itemId); for (int pItem = 0x24, feItem = 0; pItem < (item_number * 0x1D) && feItem < item_number; pItem += 0x1D, feItem++) PW.WriteInt16(pItem, (Int16)lunaItemList[feItem]); break; // Load luna items case EngineEnum.WorldEnum.CharactersType.CHARACTER_RUSH: item_number = 100; foreach (var itemId in rush_items) rushItemList.Add((int)itemId); for (int pItem = 0x24, feItem = 0; pItem < (item_number * 0x1D) && feItem < item_number; pItem += 0x1D, feItem++) PW.WriteInt16(pItem, (Int16)rushItemList[feItem]); break; // Load rush items case EngineEnum.WorldEnum.CharactersType.CHARACTER_TIPPY: item_number = 124; foreach (var itemId in tippy_items) tippyItemList.Add((int)itemId); for (int pItem = 0x24, feItem = 0; pItem < (item_number * 0x1D) && feItem < item_number; pItem += 0x1D, feItem++) PW.WriteInt16(pItem, (Int16)tippyItemList[feItem]); break; // Load tippy items case EngineEnum.WorldEnum.CharactersType.CHARACTER_KLAUS: // There is still no avaiable items for klaus case EngineEnum.WorldEnum.CharactersType.CHARACTER_KARA: // There is still no avaiable items for kara break; } PW.WriteInt32(30, item_number); // I'm not sure if the packet really need this // Write the rank of each items (1,2,3,4, etc..) for (int pUnk = 0x2E; pUnk < (item_number * 0x1D); pUnk += 0x1D) PW.WriteSByte(pUnk, unknow_number); for (int nItem = 0x20, j = 0; nItem < (item_number * 0x1D) && j < (item_number * 0x1D); nItem += 0x1D, j++) PW.WriteInt16(nItem, (Int16)j); }
/// <summary> /// Send level infos to the client. /// </summary> /// <param name="level"></param> /// <param name="license"></param> /// <param name="exp"></param> /// <returns></returns> public static byte[] LevelInfo_Buff(Int32 level, Int32 license, Int32 exp) { byte[] block = new byte[0x29]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x29, 0x831); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); PW.WriteInt32(29, exp); PW.WriteInt32(33, level); PW.WriteInt32(37, license); return block; }
/// <summary> /// Create mate's infos. /// </summary> /// <param name="char_type"></param> /// <param name="char_name"></param> /// <param name="clan_name"></param> /// <param name="clan_id"></param> /// <param name="age"></param> /// <param name="level"></param> /// <param name="license"></param> /// <param name="zone_info"></param> /// <param name="zone_id"></param> /// <param name="bio_str"></param> /// <returns></returns> public static byte[] InfoChar_Buff(int char_type, string char_name, string clan_name, string clan_id, int age, int level, short license, string zone_info, int zone_id, string bio_str) { byte[] block = new byte[0x253]; // Create the packet's data base byte[] c_block = EngineUtils.PacketUtils.calcPacket(0x253, 0x920); // Calc the packet's header // Initializing the packet writer PacketWriter PW = new PacketWriter(block); // Write the packet's header PW.WriteByteArray(0, c_block); // Write the packet's data PW.WriteString(5, EngineEnum.PacketEnum.PacketCommand.success_0); PW.WriteString(39, char_name); // Write the character's name, you can use some html code like: <#ff0000> or <glow> PW.WriteString(156, clan_id); // Write the clan's ID, still don't know what is it exactly, I just use "CL#1", its a 4 lenght string PW.WriteString(160, clan_name); // Write the clan name PW.WriteSByte(0x26, (SByte)char_type); // Choose the desired character (luna, etc..) PW.WriteSByte(247, (SByte)age); // Write the age PW.WriteInt16(248, (Int16)level); // Write the level PW.WriteInt16(250, (Int16)license); // Write the liscence PW.WriteInt32(252, (Int32)zone_id); // Write the zone (France, etc...) check the list in mate_zip.txt PW.WriteString(256, zone_info); // Write the zone info PW.WriteString(377, bio_str); // Write the bio return block; }