public static void Inventory_Update(Packet packet) { int type = packet.ReadUInt8(); if (type == 1) { byte slot = packet.ReadUInt8(); ushort count = packet.ReadUInt16(); int index = Data.inventoryslot.IndexOf(slot); if (count > 0) { Data.inventorycount[index] = count; } else { Data.inventoryid.RemoveAt(index); Data.inventorytype.RemoveAt(index); Data.inventoryslot.RemoveAt(index); Data.inventorycount.RemoveAt(index); Data.inventorydurability.RemoveAt(index); Data.inventorylevel.RemoveAt(index); Data.inventoryname.RemoveAt(index); Data.maxdurability.RemoveAt(index); } } ItemsCount.CountManager(); Globals.MainWindow.UpdateInventory(); }
public static void Inventory_Update1(Packet packet) { Packet vienas = packet; int check = packet.ReadUInt8(); if (check == 1) { int typ = packet.ReadUInt8(); if (typ == 0) // Inventory <> Inventory { byte inv_1 = packet.ReadUInt8(); byte inv_2 = packet.ReadUInt8(); ushort count = packet.ReadUInt16(); int index_1 = Data.inventoryslot.IndexOf(inv_1); int index_2 = Data.inventoryslot.IndexOf(inv_2); if (index_2 == -1) { // No item, Moving ! Data.inventoryslot[index_1] = inv_2; if (itemid != 0) { Data.inventoryslot[Data.inventorytype.IndexOf(Items_Info.itemstypelist[Items_Info.itemsidlist.IndexOf(itemid)])] = intendtomove; itemid = 0; intendtomove = 0; } } else { // The item exist ! if (Data.inventorytype[index_1] == Data.inventorytype[index_2]) { // Items Are Same, Merge It ! if (Data.inventorycount[index_2] == Items_Info.items_maxlist[Items_Info.itemstypelist.IndexOf(Data.inventorytype[index_2])]) { // Items Are Maxed, Move It ! Data.inventoryslot[index_1] = inv_2; Data.inventoryslot[index_2] = inv_1; } else { // Items Are Same, Merge It ! if (Data.inventorycount[index_1] == count) { // Merged Everything, Delete The First Item ! Data.inventorycount[index_2] += count; Data.inventoryid.RemoveAt(index_1); Data.inventorytype.RemoveAt(index_1); Data.inventorycount.RemoveAt(index_1); Data.inventoryslot.RemoveAt(index_1); Data.inventorydurability.RemoveAt(index_1); Data.inventorylevel.RemoveAt(index_1); Data.inventoryname.RemoveAt(index_1); Data.maxdurability.RemoveAt(index_1); } else { // Merged Not Everything, Recalculate Quantity ! Data.inventorycount[index_2] += count; Data.inventorycount[index_1] -= count; } } } else { // Items Are Different, Move It ! Data.inventoryslot[index_1] = inv_2; Data.inventoryslot[index_2] = inv_1; } } Globals.MainWindow.UpdateInventory(); if (Buffas.changing_weapon) { LogicControl.Manager(); } if (Data.loopaction == "merge") { InventoryControl.MergeItems(); } } if (typ == 1) // Storage -> Storage { byte str_1 = packet.ReadUInt8(); byte str_2 = packet.ReadUInt8(); ushort count = packet.ReadUInt16(); int index_1 = Data.storageslot.IndexOf(str_1); int index_2 = Data.storageslot.IndexOf(str_2); if (index_2 == -1) { // No item, Moving ! Data.storageslot[index_1] = str_2; } else { //The item exist ! if (Data.storagetype[index_1] == Data.storagetype[index_2]) { // Items Are Same, Merge It ! if (Data.storagecount[index_2] == Items_Info.items_maxlist[Items_Info.itemstypelist.IndexOf(Data.storagetype[index_2])]) { // Items Are Maxed, Move It ! Data.storageslot[index_1] = str_2; Data.storageslot[index_2] = str_1; } else { // Items Are Same, Merge It ! if (Data.storagecount[index_1] == count) { // Merged Everything, Delete The First Item ! Data.storagecount[index_2] += count; string name = Items_Info.itemsnamelist[Items_Info.itemstypelist.IndexOf(Data.storagetype[index_1])]; //Globals.MainWindow.storage_list.Items.Remove(name); Data.storageid.RemoveAt(index_1); Data.storagetype.RemoveAt(index_1); Data.storagecount.RemoveAt(index_1); Data.storageslot.RemoveAt(index_1); Data.storagedurability.RemoveAt(index_1); Data.storagelevel.RemoveAt(index_1); Data.storagename.RemoveAt(index_1); } else { // Merged Not Everything, Recalculate Quantity ! Data.storagecount[index_2] += count; Data.storagecount[index_1] -= count; } } } else { // Items Are Different, Move It ! Data.storageslot[index_1] = str_2; Data.storageslot[index_2] = str_1; } } } if (typ == 2) // From INV to STR { byte slot_inv = packet.ReadUInt8(); byte slot_bnk = packet.ReadUInt8(); int index = Data.inventoryslot.IndexOf(slot_inv); Data.storageid.Add(Data.inventoryid[index]); Data.storagetype.Add(Data.inventorytype[index]); Data.storageslot.Add(slot_bnk); Data.storagecount.Add(Data.inventorycount[index]); Data.storagedurability.Add(Data.inventorydurability[index]); Data.storagelevel.Add(Data.inventorylevel[index]); Data.storagename.Add(Data.inventoryname[index]); Data.strmaxdurability.Add(Data.maxdurability[index]); Data.inventoryid.RemoveAt(index); Data.inventorytype.RemoveAt(index); Data.inventoryslot.RemoveAt(index); Data.inventorycount.RemoveAt(index); Data.inventorydurability.RemoveAt(index); Data.inventorylevel.RemoveAt(index); Data.inventoryname.RemoveAt(index); Data.maxdurability.RemoveAt(index); Globals.MainWindow.UpdateInventory(); //Globals.MainWindow.storage_list.Items.Clear(); for (int i = 0; i < Data.storageid.Count; i++) { uint id = Data.storageid[i]; string name = Items_Info.itemsnamelist[Items_Info.itemsidlist.IndexOf(id)]; //Globals.MainWindow.storage_list.Items.Add(name); } ItemsCount.CountManager(); StorageControl.StorageManager(Spawns.NPCID[Spawns.NPCType.IndexOf(Data.selectednpctype)]); } if (typ == 3) // From STR to INV { byte slot_bnk = packet.ReadUInt8(); byte slot_inv = packet.ReadUInt8(); int index = Data.storageslot.IndexOf(slot_bnk); Data.inventoryid.Add(Data.storageid[index]); Data.inventorytype.Add(Data.storagetype[index]); Data.inventoryslot.Add(slot_inv); Data.inventorycount.Add(Data.storagecount[index]); Data.inventorydurability.Add(Data.storagedurability[index]); Data.inventorylevel.Add(Data.storagelevel[index]); Data.inventoryname.Add(Data.storagename[index]); Data.maxdurability.Add(Data.strmaxdurability[index]); Data.storageid.RemoveAt(index); Data.storagetype.RemoveAt(index); Data.storageslot.RemoveAt(index); Data.storagecount.RemoveAt(index); Data.storagedurability.RemoveAt(index); Data.storagelevel.RemoveAt(index); Data.storagename.RemoveAt(index); Data.strmaxdurability.RemoveAt(index); Globals.MainWindow.UpdateInventory(); //Globals.MainWindow.storage_list.Items.Clear(); for (int i = 0; i < Data.storageid.Count; i++) { uint id = Data.storageid[i]; string name = Items_Info.itemsnamelist[Items_Info.itemsidlist.IndexOf(id)]; //Globals.MainWindow.storage_list.Items.Add(name); } ItemsCount.CountManager(); } if (typ == 6) // PICKED ITEM { byte slot = packet.ReadUInt8(); if (slot == 254) { packet.ReadUInt32(); } else { packet.ReadUInt32(); uint item_id = packet.ReadUInt32(); int index = Items_Info.itemsidlist.IndexOf(item_id); string type = Items_Info.itemstypelist[index]; if (type.StartsWith("ITEM_CH") || type.StartsWith("ITEM_EU")) { byte item_plus = packet.ReadUInt8(); packet.ReadUInt64(); uint durability = packet.ReadUInt32(); byte blueamm = packet.ReadUInt8(); for (int i = 0; i < blueamm; i++) { packet.ReadUInt8(); packet.ReadUInt16(); packet.ReadUInt32(); packet.ReadUInt8(); } Data.inventoryid.Add(item_id); Data.inventorytype.Add(type); Data.inventoryslot.Add(slot); Data.inventorycount.Add(1); Data.inventorydurability.Add(durability); Data.inventorylevel.Add(Items_Info.itemslevellist[index]); Data.inventoryname.Add(Items_Info.itemsnamelist[index]); Data.maxdurability.Add(Items_Info.itemsdurabilitylist[index]); Globals.MainWindow.UpdateInventory(); } else { ushort count = packet.ReadUInt16(); int indexas = Data.inventoryslot.IndexOf(slot); if (indexas != -1) { Data.inventorycount[indexas] = count; } else { Data.inventoryid.Add(item_id); Data.inventorytype.Add(type); Data.inventoryslot.Add(slot); Data.inventorydurability.Add(0); Data.inventorycount.Add(count); Data.inventorylevel.Add(Items_Info.itemslevellist[index]); Data.inventoryname.Add(Items_Info.itemsnamelist[index]); Data.maxdurability.Add(Items_Info.itemsdurabilitylist[index]); Globals.MainWindow.UpdateInventory(); } ItemsCount.CountManager(); } } } if (typ == 7) { byte slot = packet.ReadUInt8(); int index = Data.inventoryslot.IndexOf(slot); Data.inventoryid.RemoveAt(index); Data.inventorytype.RemoveAt(index); Data.inventoryslot.RemoveAt(index); Data.inventorycount.RemoveAt(index); Data.inventorydurability.RemoveAt(index); Data.inventorylevel.RemoveAt(index); Data.inventoryname.RemoveAt(index); Data.maxdurability.RemoveAt(index); Globals.MainWindow.UpdateInventory(); ItemsCount.CountManager(); } if (typ == 8) // Shop => Inventory { byte tab = packet.ReadUInt8(); byte slot = packet.ReadUInt8(); byte count = packet.ReadUInt8(); #region Finding Item Info uint item_id = 0; for (int i = 0; i < Data.ShopTabData.Length; i++) { if (Data.ShopTabData[i].StoreName.Replace("STORE_", "NPC_") == Data.selectednpctype) { item_id = Items_Info.itemsidlist[Items_Info.itemstypelist.IndexOf(Data.ShopTabData[i].Tab[tab].ItemType[slot])]; break; } } string item_type = Items_Info.itemstypelist[Items_Info.itemsidlist.IndexOf(item_id)]; #endregion if (count == 1) { byte inv_slot = packet.ReadUInt8(); ushort inv_count = packet.ReadUInt16(); Packet du = new Packet((ushort)WorldServerOpcodes.SERVER_OPCODES.SERVER_INVENTORYMOVEMENT); du.WriteUInt8(1); du.WriteUInt8(6); du.WriteUInt8(inv_slot); du.WriteUInt32(0); du.WriteUInt32(item_id); if (item_type.StartsWith("ITEM_CH") == false && item_type.StartsWith("ITEM_EU") == false) { du.WriteUInt16(inv_count); } else { du.WriteUInt8(0); du.WriteUInt64(0); du.WriteUInt32(Items_Info.itemsdurabilitylist[Items_Info.itemsidlist.IndexOf(item_id)]); du.WriteUInt8(0); du.WriteUInt16(1); du.WriteUInt16(2); } Proxy.ag_local_security.Send(du); Data.inventoryid.Add(item_id); Data.inventorytype.Add(item_type); Data.inventoryslot.Add(inv_slot); Data.inventorycount.Add(inv_count); Data.inventorydurability.Add(0); Data.inventorylevel.Add(Items_Info.itemslevellist[Items_Info.itemsidlist.IndexOf(item_id)]); Data.inventoryname.Add(Items_Info.itemsnamelist[Items_Info.itemsidlist.IndexOf(item_id)]); Data.maxdurability.Add(Items_Info.itemsdurabilitylist[Items_Info.itemsidlist.IndexOf(item_id)]); } else { for (int i = 0; i < count; i++) { byte inv_slot = packet.ReadUInt8(); Packet du = new Packet((ushort)WorldServerOpcodes.SERVER_OPCODES.SERVER_INVENTORYMOVEMENT); du.WriteUInt8(0x01); du.WriteUInt8(0x06); du.WriteUInt8(inv_slot); du.WriteUInt32(0x00000000); du.WriteUInt32(item_id); if (item_type.StartsWith("ITEM_CH") == false && item_type.StartsWith("ITEM_EU") == false) { du.WriteUInt16(1); } else { du.WriteUInt8(0x00); du.WriteUInt64(0x0000000000000000); du.WriteUInt32(Items_Info.itemsdurabilitylist[Items_Info.itemsidlist.IndexOf(item_id)]); du.WriteUInt8(0x00); du.WriteUInt16(1); du.WriteUInt16(2); } Proxy.ag_local_security.Send(du); Data.inventoryid.Add(item_id); Data.inventorytype.Add(item_type); Data.inventoryslot.Add(inv_slot); Data.inventorycount.Add(1); Data.inventorydurability.Add(0); Data.inventorylevel.Add(Items_Info.itemslevellist[Items_Info.itemsidlist.IndexOf(item_id)]); Data.inventoryname.Add(Items_Info.itemsnamelist[Items_Info.itemsidlist.IndexOf(item_id)]); Data.maxdurability.Add(Items_Info.itemsdurabilitylist[Items_Info.itemsidlist.IndexOf(item_id)]); } } Globals.MainWindow.UpdateInventory(); ItemsCount.CountManager(); System.Threading.Thread.Sleep(500); BuyControl.BuyManager(Spawns.NPCID[Spawns.NPCType.IndexOf(Data.selectednpctype)]); } if (typ == 9) // Inventory -> Shop { byte inv_slot = packet.ReadUInt8(); ushort count = packet.ReadUInt16(); int index = Data.inventoryslot.IndexOf(inv_slot); ushort real_count = Data.inventorycount[index]; if (count == real_count) { //Sold Everything - Delete Item Data.inventoryid.RemoveAt(index); Data.inventorytype.RemoveAt(index); Data.inventoryslot.RemoveAt(index); Data.inventorycount.RemoveAt(index); Data.inventorydurability.RemoveAt(index); Data.inventorylevel.RemoveAt(index); Data.inventoryname.RemoveAt(index); Data.maxdurability.RemoveAt(index); } else { //Reduce count of item ushort new_count = (ushort)(real_count - count); Data.inventorycount[index] = new_count; } Globals.MainWindow.UpdateInventory(); ItemsCount.CountManager(); SellControl.SellManager(Spawns.NPCID[Spawns.NPCType.IndexOf(Data.selectednpctype)]); } if (typ == 16) // From Pet Inventory To Pet Inventory { uint petid = packet.ReadUInt32(); byte pet_1 = packet.ReadUInt8(); byte pet_2 = packet.ReadUInt8(); ushort count = packet.ReadUInt16(); for (int i = 0; i < Pets.CharPets.Count; i++) { if (Pets.CharPets[i].UniqueID == petid) { if (Pets.CharPets[i].Inventory[pet_1].type == Pets.CharPets[i].Inventory[pet_2].type) { // Items Are Same, Merge It ! if (Pets.CharPets[i].Inventory[pet_2].count == Items_Info.items_maxlist[Items_Info.itemstypelist.IndexOf(Pets.CharPets[i].Inventory[pet_2].type)]) { // Items Are Maxed, Move It ! Pets.Inventory_ inv_temp = Pets.CharPets[i].Inventory[pet_1]; Pets.CharPets[i].Inventory[pet_1] = Pets.CharPets[i].Inventory[pet_2]; Pets.CharPets[i].Inventory[pet_2] = inv_temp; } else { if (Pets.CharPets[i].Inventory[pet_1].count == count) { // Merged Everything, Delete The First Item ! Pets.CharPets[i].Inventory[pet_2].count += count; string name = Items_Info.itemsnamelist[Items_Info.itemstypelist.IndexOf(Pets.CharPets[i].Inventory[pet_1].type)]; //Globals.MainWindow.pet_inv_list.Items.Remove(name); Pets.CharPets[i].Inventory[pet_1] = new Pets.Inventory_(); } else { // Merged Not Everything, Recalculate Quantity ! Pets.CharPets[i].Inventory[pet_2].count += count; Pets.CharPets[i].Inventory[pet_1].count -= count; } } } else { // Items Are Different, Move It ! Pets.Inventory_ inv_temp = Pets.CharPets[i].Inventory[pet_1]; Pets.CharPets[i].Inventory[pet_1] = Pets.CharPets[i].Inventory[pet_2]; Pets.CharPets[i].Inventory[pet_2] = inv_temp; } break; } } } if (typ == 26) // From Pet Inventory To Inventory { uint pet_id = packet.ReadUInt32(); for (int i = 0; i < Pets.CharPets.Count; i++) { if (pet_id == Pets.CharPets[i].UniqueID) { byte pet_slot = packet.ReadUInt8(); byte inv_slot = packet.ReadUInt8(); Data.inventoryid.Add(Pets.CharPets[i].Inventory[pet_slot].id); Data.inventorytype.Add(Pets.CharPets[i].Inventory[pet_slot].type); Data.inventoryslot.Add(inv_slot); Data.inventorydurability.Add(Pets.CharPets[i].Inventory[pet_slot].durability); Data.inventorycount.Add(Pets.CharPets[i].Inventory[pet_slot].count); Data.inventorylevel.Add(Pets.CharPets[i].Inventory[pet_slot].level); Data.inventoryname.Add(Pets.CharPets[i].Inventory[pet_slot].name); Data.maxdurability.Add(Pets.CharPets[i].Inventory[pet_slot].maxdurability); string name = Items_Info.itemsnamelist[Items_Info.itemstypelist.IndexOf(Pets.CharPets[i].Inventory[pet_slot].type)]; Globals.MainWindow.UpdateInventory(); //Globals.MainWindow.pet_inv_list.Items.Remove(name); Pets.CharPets[i].Inventory[pet_slot] = new Pets.Inventory_(); break; } } } if (typ == 27) // From Inventory To Pet Inventory { uint pet_id = packet.ReadUInt32(); for (int i = 0; i < Pets.CharPets.Count; i++) { if (pet_id == Pets.CharPets[i].UniqueID) { byte inv_slot = packet.ReadUInt8(); byte pet_slot = packet.ReadUInt8(); int inv_index = Data.inventoryslot.IndexOf(inv_slot); Pets.CharPets[i].Inventory[pet_slot].id = Data.inventoryid[inv_index]; Pets.CharPets[i].Inventory[pet_slot].type = Data.inventorytype[inv_index]; Pets.CharPets[i].Inventory[pet_slot].slot = pet_slot; Pets.CharPets[i].Inventory[pet_slot].durability = Data.inventorydurability[inv_index]; Pets.CharPets[i].Inventory[pet_slot].count = Data.inventorycount[inv_index]; Pets.CharPets[i].Inventory[pet_slot].level = Data.inventorylevel[inv_index]; Pets.CharPets[i].Inventory[pet_slot].name = Data.inventoryname[inv_index]; Pets.CharPets[i].Inventory[pet_slot].maxdurability = Data.maxdurability[inv_index]; //Globals.MainWindow.pet_inv_list.Items.Add(Items_Info.itemsnamelist[Items_Info.itemstypelist.IndexOf(Data.inventorytype[inv_index])]); Data.inventoryid.RemoveAt(inv_index); Data.inventorytype.RemoveAt(inv_index); Data.inventorycount.RemoveAt(inv_index); Data.inventorydurability.RemoveAt(inv_index); Data.inventoryslot.RemoveAt(inv_index); Data.inventorylevel.RemoveAt(inv_index); Data.inventoryname.RemoveAt(inv_index); Data.maxdurability.RemoveAt(inv_index); Globals.MainWindow.UpdateInventory(); break; } } } if (typ != 8) { Proxy.ag_local_security.Send(vienas); } } if (check == 2) { byte check1 = packet.ReadUInt8(); switch (check1) { case 0x03: //Unknown break; } } }
public static void CharData(Packet packet) { try { Globals.MainWindow.UnEnable(Globals.MainWindow.characterselect); Globals.MainWindow.UnEnable(Globals.MainWindow.charnameselect); Globals.MainWindow.UnEnable(Globals.MainWindow.charlist); Globals.MainWindow.UnEnable(Globals.MainWindow.selectcharbutton); #region ResetData Data.inventorycount.Clear(); Data.inventoryid.Clear(); Data.inventoryslot.Clear(); Data.inventorytype.Clear(); Data.inventorydurability.Clear(); Data.inventorylevel.Clear(); Data.inventoryname.Clear(); Data.maxdurability.Clear(); Data.storageid.Clear(); Data.storagetype.Clear(); Data.storagecount.Clear(); Data.storageslot.Clear(); Data.storagedurability.Clear(); Data.storagelevel.Clear(); Data.storagename.Clear(); Skill.Skills.Clear(); Data.char_horseid = 0; Data.storageopened = 0; #endregion #region Main packet.ReadUInt32(); Character.RefObjID = packet.ReadUInt32(); Character.Scale = packet.ReadUInt8(); Character.Level = packet.ReadUInt8(); Character.MaxLevel = packet.ReadUInt8(); int maxlvl = (int)Character.Level - 1; Character.ExpMax = Convert.ToUInt64(Character.explist[maxlvl]); Character.ExpOffset = packet.ReadUInt64(); Character.SExpOffset = packet.ReadUInt32(); Character.Gold = packet.ReadUInt64(); Character.SP = packet.ReadUInt32(); Character.RemainStatPoint = packet.ReadUInt16(); Character.BerserkLevel = packet.ReadUInt8(); Character.GatheredExpPoint = packet.ReadUInt32(); Character.CurrentHP = packet.ReadUInt32(); Character.CurrentMP = packet.ReadUInt32(); Character.AutoInvestExp = packet.ReadUInt8(); Character.DailyPK = packet.ReadUInt8(); Character.TotalPK = packet.ReadUInt16(); Character.PKPenaltyPoint = packet.ReadUInt32(); packet.ReadUInt8(); Globals.MainWindow.UpdateBar(); Globals.MainWindow.SetText(Globals.MainWindow.level, Convert.ToString(Level)); Globals.MainWindow.SetText(Globals.MainWindow.gold, Convert.ToString(Character.Gold)); Globals.MainWindow.SetText(Globals.MainWindow.berserklevel, String.Format("{0}/5", Character.BerserkLevel)); Globals.MainWindow.SetText(Globals.MainWindow.currentsp, Convert.ToString(Character.SP)); packet.ReadUInt8(); #endregion #region Items Character.InventorySize = packet.ReadUInt8(); Character.InventoryItemsCount = packet.ReadUInt8(); for (int i = 0; i < Character.InventoryItemsCount; i++) { byte ItemSlot = packet.ReadUInt8(); uint ItemRentType = packet.ReadUInt32(); switch (ItemRentType) { case 1: packet.ReadUInt16(); packet.ReadUInt32(); packet.ReadUInt32(); break; case 2: packet.ReadUInt16(); packet.ReadUInt16(); packet.ReadUInt32(); break; case 3: packet.ReadUInt16(); packet.ReadUInt32(); packet.ReadUInt32(); packet.ReadUInt16(); packet.ReadUInt32(); break; } uint ItemRefItemID = packet.ReadUInt32(); int index = Items_Info.itemsidlist.IndexOf(ItemRefItemID); string type = Items_Info.itemstypelist[index]; string name = Items_Info.itemsnamelist[index]; Data.inventoryname.Add(name); Data.inventoryslot.Add(ItemSlot); Data.inventorytype.Add(type); Data.inventorylevel.Add(Items_Info.itemslevellist[index]); Data.maxdurability.Add(Items_Info.itemsdurabilitylist[index]); Data.inventoryid.Add(ItemRefItemID); if (type.StartsWith("ITEM_CH") || type.StartsWith("ITEM_EU") || type.StartsWith("ITEM_MALL_AVATAR") || type.StartsWith("ITEM_ETC_E060529_GOLDDRAGONFLAG") || type.StartsWith("ITEM_EVENT_CH") || type.StartsWith("ITEM_EVENT_EU") || type.StartsWith("ITEM_EVENT_AVATAR_W_NASRUN") || type.StartsWith("ITEM_EVENT_AVATAR_M_NASRUN")) { byte OptLevel = packet.ReadUInt8(); ulong Variance = packet.ReadUInt64(); uint Durability = packet.ReadUInt32(); Data.inventorydurability.Add(Durability); byte MagParamNum = packet.ReadUInt8(); for (int k = 0; k < MagParamNum; k++) { uint MagParamType = packet.ReadUInt32(); uint MagParamValue = packet.ReadUInt32(); } byte OptType = packet.ReadUInt8(); byte OptCount = packet.ReadUInt8(); //1 => Socket for (int l = 0; l < OptCount; l++) { byte OptionSlot = packet.ReadUInt8(); uint OptionID = packet.ReadUInt32(); uint OptionnParam1 = packet.ReadUInt32(); //=> Reference to Socket } byte OptType1 = packet.ReadUInt8(); //2 => Advanced Elixir byte OptCount1 = packet.ReadUInt8(); for (int m = 0; m < OptCount1; m++) { byte OptionSlot1 = packet.ReadUInt8(); uint OptionID1 = packet.ReadUInt32(); uint OptionOptValue = packet.ReadUInt32(); //=> Advanced elixir in effect } Data.inventorycount.Add(1); } else if (((Data.Types.attack_spawn_types.IndexOf(type)) != -1) || (Data.Types.attack_types.IndexOf(type) != -1)) { byte Status = packet.ReadUInt8(); //1 => Unsumonned, 2 => Summonned, 3 => Alive, 4 => Dead if (Status == 2 || Status == 3 || Status == 4) { uint PetID = packet.ReadUInt32(); string PetName = packet.ReadAscii(); packet.ReadUInt8(); } Data.inventorycount.Add(1); Data.inventorydurability.Add(0); } else if (Data.Types.grabpet_spawn_types.IndexOf(type) != -1 || Data.Types.grab_types.IndexOf(type) != -1) { byte Status = packet.ReadUInt8(); //1 => Unsumonned, 2 => Summonned, 3 => Alive, 4 => Dead if (Status == 2 || Status == 3 || Status == 4) { uint PetID = packet.ReadUInt32(); string PetName = packet.ReadAscii(); uint SecondsToRentEndTime = packet.ReadUInt32(); packet.ReadUInt8(); } Data.inventorycount.Add(1); Data.inventorydurability.Add(0); } else if (type == "ITEM_ETC_TRANS_MONSTER") { packet.ReadUInt32(); Data.inventorycount.Add(1); Data.inventorydurability.Add(0); } else if (type.Contains("ITEM_ETC_ARCHEMY_ATTRSTONE") || type.Contains("ITEM_ETC_ARCHEMY_MAGICSTONE")) { ushort StoneStackCount = packet.ReadUInt16(); if (type.Contains("ITEM_ETC_ARCHEMY_MAGICSTONE_LUCK") == false) { byte AttributeAssimilationProbability = packet.ReadUInt8(); } Data.inventorycount.Add(StoneStackCount); Data.inventorydurability.Add(0); } else if (type.StartsWith("ITEM_MALL_MAGIC_CUBE")) { uint StoredItemCount = packet.ReadUInt32(); Data.inventorycount.Add(1); Data.inventorydurability.Add(0); } else if (type.Contains("ITEM_MALL_GACHA_CARD_WIN") || type.Contains("ITEM_MALL_GACHA_CARD_LOSE")) { ushort CouponStackCount = packet.ReadUInt16(); byte CouponMagParamNum = packet.ReadUInt8(); for (int n = 0; n < CouponMagParamNum; n++) { ulong CouponMagParamNumValue = packet.ReadUInt64(); } Data.inventorycount.Add(CouponStackCount); Data.inventorydurability.Add(0); } else { ushort ItemStackCount = packet.ReadUInt16(); Data.inventorycount.Add(ItemStackCount); Data.inventorydurability.Add(0); } } ItemsCount.CountManager(); Character.AvatarInventorySize = packet.ReadUInt8(); Character.AvatarInventoryItemCount = packet.ReadUInt8(); for (int i = 0; i < Character.AvatarInventoryItemCount; i++) { byte AvatarSlot = packet.ReadUInt8(); //Slot packet.ReadUInt32(); uint AvatarID = packet.ReadUInt32(); int index = Items_Info.itemsidlist.IndexOf(AvatarID); string type = Items_Info.itemstypelist[index]; string name = Items_Info.itemsnamelist[index]; byte ItemPlus = packet.ReadUInt8(); packet.ReadUInt64(); packet.ReadUInt32(); byte AvatarMagParamNum = packet.ReadUInt8(); for (int o = 0; o < AvatarMagParamNum; o++) { packet.ReadUInt32(); packet.ReadUInt32(); } packet.ReadUInt32(); } #endregion #region MasteryFlag packet.ReadUInt8(); Character.MasteryFlag = packet.ReadUInt8(); //0 = done, 1 = mastery while (MasteryFlag == 1) { uint MasteryID = packet.ReadUInt32(); byte MasteryLevel = packet.ReadUInt8(); MasteryFlag = packet.ReadUInt8(); //0 = done, 1 = mastery } packet.ReadUInt8(); Character.SkillFlag = packet.ReadUInt8(); //0 = done, 1 = mastery while (SkillFlag == 1) { uint SkillID = packet.ReadUInt32(); byte SkillEnable = packet.ReadUInt8(); SkillFlag = packet.ReadUInt8(); //0 = done, 1 = mastery int index = Skills_Info.skillsidlist.IndexOf(SkillID); System.Timers.Timer Timer = new System.Timers.Timer(); Skill NewSkill = new Skill(SkillID, Skills_Info.skillsnamelist[index], Skills_Info.skillstypelist[index], Skills_Info.skillslevellist[index], Skills_Info.skillbuffcheck[index], 0, Skills_Info.skillscasttimelist[index], Skills_Info.skillcooldownlist[index], Skills_Info.skillsmpreq[index], Skills_Info.skillbufftime[index], 0, Timer); Skill.Skills.Add(NewSkill); } Globals.MainWindow.Updatehealskill(); Globals.MainWindow.UpdateSkillList(); #endregion #region SkippingQuestPart //Read every Byte the compare them to the UniqueID got from opcode 3020, if equal then stop, if not keep reading the ByteArray Packet charid = new Packet(3020); charid.WriteUInt32(Character.UniqueID); charid.Lock(); byte idpart1 = charid.ReadUInt8(); byte idpart2 = charid.ReadUInt8(); byte idpart3 = charid.ReadUInt8(); byte idpart4 = charid.ReadUInt8(); while (true) { if (packet.ReadUInt8() == idpart1) { if (packet.ReadUInt8() == idpart2) { if (packet.ReadUInt8() == idpart3) { if (packet.ReadUInt8() == idpart4) { break; } } } } } #endregion #region CharacterData //Unique ID here has been taken by the comparison #Skipping Quest Part byte xsec = packet.ReadUInt8(); byte ysec = packet.ReadUInt8(); float xcoord = packet.ReadSingle(); float zcoord = packet.ReadSingle(); float ycoord = packet.ReadSingle(); if (ysec == 0x80) { cave.char_incave = true; cave.xsector = xsec; cave.zcoord = zcoord; cave.xcoord = xcoord; } else { cave.char_incave = false; } Character.X = Globals.CalculatePositionX(xsec, xcoord); Character.Y = Globals.CalculatePositionY(ysec, ycoord); string sector = (String.Format("{0:X2}{1:X2}", xsec, ysec)); int indexx = Character.locationsector.IndexOf(sector); if (indexx != -1) { string location = Character.location[indexx]; PortConfigs.TrainWindow.Label(PortConfigs.TrainWindow.location, location); } Globals.MainWindow.SetText(Globals.MainWindow.xlabel, Convert.ToString(Character.X)); Globals.MainWindow.SetText(Globals.MainWindow.ylabel, Convert.ToString(Character.Y)); packet.ReadUInt8(); packet.ReadUInt8(); byte move = packet.ReadUInt8(); // Flag packet.ReadUInt8(); // Running if (move == 1) { xsec = packet.ReadUInt8(); ysec = packet.ReadUInt8(); xcoord = packet.ReadUInt16(); packet.ReadUInt16(); ycoord = packet.ReadUInt16(); } else { packet.ReadUInt8(); // Unknown packet.ReadUInt16(); // Unknwon } byte StateFlag = packet.ReadUInt8(); packet.ReadUInt8(); //Action: 0 = None, 2 = Walking, 3 = Running, 4 = Sitting packet.ReadUInt8(); //Status: 0 = None, 2 = ??*GrowthPet, 3 = Invincible, 4 = Invisible packet.ReadUInt8(); Character.WalkSpeed = packet.ReadSingle(); Character.RunSpeed = packet.ReadSingle(); Character.BerserkSpeed = packet.ReadSingle(); byte ActiveBuffCount = packet.ReadUInt8(); for (int a = 0; a < ActiveBuffCount; a++) { uint skillid = packet.ReadUInt32(); int buffindex = Skills_Info.skillsidlist.IndexOf(skillid); string type = Skills_Info.skillstypelist[buffindex]; if (type.StartsWith("SKILL_EU_CLERIC_RECOVERYA_GROUP") || type.StartsWith("SKILL_EU_BARD_BATTLAA_GUARD") || type.StartsWith("SKILL_EU_BARD_DANCEA") || type.StartsWith("SKILL_EU_BARD_SPEEDUPA_HITRATE")) { packet.ReadUInt8(); } } Character.PlayerName = packet.ReadAscii(); Globals.MainWindow.SetText(Globals.MainWindow.charname, Character.PlayerName); #endregion #region Job string JobTitle = packet.ReadAscii(); byte JobType = packet.ReadUInt8(); //0 => None, 1 => Trader, 2 => Thief, 3 => Hunter byte JobLevel = packet.ReadUInt8(); uint JobEXP = packet.ReadUInt8(); uint JobContribution = packet.ReadUInt32(); uint JobReward = packet.ReadUInt32(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); packet.ReadUInt8(); Character.AccountID = packet.ReadUInt32(); Globals.MainWindow.SetText(Globals.MainWindow.accID, String.Format("{0:X8}", Character.AccountID)); Globals.MainWindow.UpdateInventory(); #endregion Globals.MainWindow.SetText(Globals.MainWindow.status, "Normal"); Globals.MainWindow.SetText(Globals.MainWindow.currentexp, Convert.ToString(Character.ExpOffset)); Globals.MainWindow.SetText(Globals.MainWindow.exppercent, String.Format("{0}%", Character.ExpOffset * 100 / ExpMax)); Globals.MainWindow.UpdateTray(); Globals.MainWindow.Enable(Globals.MainWindow.startbot); if (data_loaded == 0) { data_loaded = 1; Data.Statistic.sp_begin = (int)Character.SP; Data.Statistic.gold_begin = (long)Character.Gold; Configs.ReadConfigs(); System.Threading.Thread time_thread = new Thread(StartTimer); time_thread.Start(); System.Threading.Thread time_thread1 = new Thread(StartTimer1); time_thread1.Start(); } for (int i = 0; i < Skill.Skills.Count; i++) { Skill.Skills[i].index = i; } for (int i = 0; i < Globals.MainWindow.generalimbue.Items.Count; i++) { foreach (Skill skill in Skill.Skills) { if (skill.Name == Globals.MainWindow.generalimbue.Items[i].ToString()) { Skill.Imbue.Add(skill); break; } } } for (int i = 0; i < Globals.MainWindow.partyimbue.Items.Count; i++) { foreach (Skill skill in Skill.Skills) { if (skill.Name == Globals.MainWindow.partyimbue.Items[i].ToString()) { Skill.PartyImbue.Add(skill); break; } } } for (int i = 0; i < Globals.MainWindow.generalattack.Items.Count; i++) { foreach (Skill skill in Skill.Skills) { if (skill.Name == Globals.MainWindow.generalattack.Items[i].ToString()) { Skill.AttackSkills.Add(skill); break; } } } for (int i = 0; i < Globals.MainWindow.partyattack.Items.Count; i++) { foreach (Skill skill in Skill.Skills) { if (skill.Name == Globals.MainWindow.partyattack.Items[i].ToString()) { Skill.PartyAttackSkills.Add(skill); break; } } } for (int i = 0; i < Globals.MainWindow.buff.Items.Count; i++) { foreach (Skill skill in Skill.Skills) { if (skill.Name == Globals.MainWindow.buff.Items[i].ToString()) { skill.bufftype = 1; skill.BuffWaiting = 1; break; } } Buffas.buff_waiting = true; } for (int i = 0; i < Globals.MainWindow.secondbuff.Items.Count; i++) { foreach (Skill skill in Skill.Skills) { if (skill.Name == Globals.MainWindow.secondbuff.Items[i].ToString()) { skill.bufftype = 3; skill.BuffWaiting = 1; break; } } Buffas.buff_waiting = true; } if (Globals.MainWindow.Checked(Globals.MainWindow.autoparty) == true) { Party.CreateParty(); } if (Data.bot == true) { StartLooping.Start(); } } catch { } }