public static void UpdateStat(Client c) { using (OutPacket plew = new OutPacket(ServerOpcode.CHAR_STATUP_ACK)) { var chr = c.Character; Dictionary <InventoryType.EquipType, int> equip = InventoryPacket.getEquip(chr); plew.WriteInt(0); // length + CRC plew.WriteInt(0); plew.WriteShort(chr.MaxHp); plew.WriteShort(chr.MaxMp); plew.WriteShort(chr.Str); plew.WriteShort(chr.Dex); plew.WriteShort(chr.Vit); plew.WriteShort(chr.Int); plew.WriteShort(chr.MaxAttack); plew.WriteShort(chr.Attack); plew.WriteShort(chr.MaxMagic); plew.WriteShort(chr.Magic); plew.WriteShort(chr.Defense); plew.WriteByte(equip.ContainsKey(InventoryType.EquipType.Weapon) ? ItemFactory.weaponData[equip[InventoryType.EquipType.Weapon]].Speed : 0); // 攻擊速度 plew.WriteByte(equip.ContainsKey(InventoryType.EquipType.Weapon) ? ItemFactory.weaponData[equip[InventoryType.EquipType.Weapon]].AttackRange : 0); // 攻擊距離 plew.WriteShort(chr.Avoid); plew.WriteShort(chr.AbilityBonus); plew.WriteShort(chr.SkillBonus); plew.WriteShort(chr.UpgradeStr); plew.WriteShort(chr.UpgradeDex); plew.WriteShort(chr.UpgradeVit); plew.WriteShort(chr.UpgradeInt); plew.WriteShort(chr.UpgradeAttack); plew.WriteShort(chr.UpgradeMagic); plew.WriteShort(chr.UpgradeDefense); c.Send(plew); } }
public static void getStatusInfo(Client c) { using (OutPacket plew = new OutPacket(ServerOpcode.CHAR_ALL)) { var chr = c.Character; Dictionary <InventoryType.EquipType, int> equip = InventoryPacket.getEquip(chr); plew.WriteInt(0); // length + CRC plew.WriteInt(0); plew.WriteString(chr.Name, 20); plew.WriteString(chr.Title, 20); plew.WriteByte(chr.Gender); plew.WriteByte(chr.Level); plew.WriteByte(chr.Class); plew.WriteByte(chr.ClassLevel); plew.WriteByte(chr.Guild); plew.WriteByte(0); plew.WriteShort(chr.MaxHp); plew.WriteShort(chr.Hp); plew.WriteShort(chr.MaxMp); plew.WriteInt(chr.Mp); plew.WriteInt(GameConstants.getExpNeededForLevel(chr.Level)); plew.WriteInt(0); plew.WriteInt(chr.Exp); plew.WriteInt(0); plew.WriteShort(chr.Rank); plew.WriteShort(chr.MaxFury); // 憤怒值(Max) plew.WriteShort(chr.Fury); // 憤怒值 plew.WriteByte(3); plew.WriteByte(chr.JumpHeight); // 跳躍高度 plew.WriteShort(chr.Str); // 力量 plew.WriteShort(chr.Dex); // 精力 plew.WriteShort(chr.Vit); // 氣力 plew.WriteShort(chr.Int); // 智力 plew.WriteShort(chr.MaxAttack); // 攻擊力(Max) plew.WriteShort(chr.Attack); // 攻擊力(Min) plew.WriteShort(chr.MaxMagic); // 魔攻力(Max) plew.WriteShort(chr.Magic); // 魔攻力(Min) plew.WriteShort(chr.Defense); // 防禦力 plew.WriteByte(equip.ContainsKey(InventoryType.EquipType.Weapon) ? ItemFactory.weaponData[equip[InventoryType.EquipType.Weapon]].Speed : 0); // 攻擊速度 [Speed] plew.WriteByte(equip.ContainsKey(InventoryType.EquipType.Weapon) ? ItemFactory.weaponData[equip[InventoryType.EquipType.Weapon]].AttackRange : 0); // 攻擊距離 plew.WriteShort(chr.Avoid); // 迴避率 plew.WriteShort(chr.AbilityBonus); // 能力上升值 plew.WriteShort(chr.SkillBonus); // 技能上升值 plew.WriteShort(chr.UpgradeStr); // 力量+ plew.WriteShort(chr.UpgradeDex); // 敏捷+ plew.WriteShort(chr.UpgradeVit); // 氣力+ plew.WriteShort(chr.UpgradeInt); // 智力+ plew.WriteShort(chr.UpgradeAttack); // 攻擊力+ plew.WriteShort(chr.UpgradeMagic); // 魔攻力+ plew.WriteShort(chr.UpgradeDefense); // 防禦力+ plew.WriteShort(0); plew.WriteShort(0); // Not read c.Send(plew); } }
public static void warpToMap(Client c, Character chr, int CharacterID, short MapX, short MapY, short PositionX, short PositionY) { using (OutPacket plew = new OutPacket(ServerOpcode.ENTER_WARP_ACK)) { Dictionary <InventoryType.EquipType, int> equip = InventoryPacket.getEquip(chr); int WeaponUpgradeAttack = 0; if (equip.ContainsKey(InventoryType.EquipType.Weapon)) { WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level1 * 10; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level2 * 9; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level3 * 8; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level4 * 7; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level5 * 6; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level6 * 5; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level7 * 4; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level8 * 3; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level9 * 2; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level10 * 1; } plew.WriteInt(0); // length + CRC plew.WriteInt(0); plew.WriteInt(CharacterID); // 角色編號 plew.WriteString(chr.Name, 20); plew.WriteString(chr.Title, 20); plew.WriteShort(MapX); plew.WriteShort(MapY); plew.WriteShort(PositionX); plew.WriteShort(PositionY); plew.WriteByte(chr.Gender); plew.WriteByte(chr.Level); plew.WriteByte(chr.Class); plew.WriteByte(chr.ClassLevel); plew.WriteByte(chr.Guild); plew.WriteByte(0); // 光圈 plew.WriteByte(chr.IsHiding == false ? 0 : 1); plew.WriteByte(chr.IsFuring == false ? 0 : chr.FuringType); plew.WriteInt(0); // (byte) plew.WriteInt(chr.Hair); // 頭髮 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face) ? equip[InventoryType.EquipType.Face] : 0); // 臉上 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face2) ? equip[InventoryType.EquipType.Face2] : 0); // 臉下 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Hat) ? equip[InventoryType.EquipType.Hat] : 0); // 帽子 plew.WriteInt(chr.Eyes); // 眼睛 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Outfit) ? equip[InventoryType.EquipType.Outfit] : 0); // 衣服 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Dress) ? equip[InventoryType.EquipType.Dress] : 0); // 服裝 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Weapon) ? equip[InventoryType.EquipType.Weapon] : 0); // 武器 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Mantle) ? equip[InventoryType.EquipType.Mantle] : 0); // 披風 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Pet) ? equip[InventoryType.EquipType.Pet] : 0); // 靈物 plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Toy) ? equip[InventoryType.EquipType.Toy] : 0); // 玩物 // 寵物 plew.WriteString(chr.Pets.Name((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet), 20); // PetName plew.WriteInt(chr.Pets.Level((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); // PetLevel plew.WriteInt(chr.Pets.Hp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); // PetHP plew.WriteInt(chr.Pets.Mp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(chr.Pets.Exp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(chr.Pets.DecorateID((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Pet) ? chr.UseSlot[(byte)InventoryType.ItemType.Pet5] : 0); // 玩物 plew.WriteString("", 20); // ToyName plew.WriteInt(0); // ToyLevel plew.WriteInt(0); plew.WriteInt(0); plew.WriteInt(0); // plew.WriteShort(0); // (byte) plew.WriteShort(WeaponUpgradeAttack); // 武器 Glow ++ plew.WriteShort(0); plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[0])); plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[1])); plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[2])); plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[3])); plew.WriteByte(chr.IP.GetAddressBytes()[0]); plew.WriteByte(chr.IP.GetAddressBytes()[1]); plew.WriteByte(chr.IP.GetAddressBytes()[2]); plew.WriteByte(chr.IP.GetAddressBytes()[3]); plew.WriteHexString("1F 40"); // Port plew.WriteShort(0); // (byte) plew.WriteShort(0); plew.WriteHexString("00 00 00 00 00 00 00 00"); plew.WriteInt(-1); plew.WriteByte(0); plew.WriteByte(0); plew.WriteByte(0); plew.WriteByte(0); plew.WriteByte(0); plew.WriteByte(0); plew.WriteShort(-1); plew.WriteByte(-1); plew.WriteByte(0); // 觀戰 plew.WriteByte(0); plew.WriteByte(0); //Log.Inform("(My) MapX = {0} , MapY = {1}", MapX, MapY); //Log.Inform("(My) CharacterID = {0} 遠端IP = {1}.{2}.{3}.{4} , 虛擬IP = {5}.{6}.{7}.{8}", chr.CharacterID, int.Parse(chr.Client.Title.Split('.')[0]), int.Parse(chr.Client.Title.Split('.')[1]), int.Parse(chr.Client.Title.Split('.')[2]), int.Parse(chr.Client.Title.Split('.')[3]), chr.IP.GetAddressBytes()[0], chr.IP.GetAddressBytes()[1], chr.IP.GetAddressBytes()[2], chr.IP.GetAddressBytes()[3]); c.Send(plew); } }
public static void createUser(Client c, Map Map) { using (OutPacket plew = new OutPacket(ServerOpcode.USER_CREATE)) { var chr = Map.Characters; plew.WriteInt(0); // length + CRC plew.WriteInt(0); plew.WriteInt(Map.GetMapCharactersTotal()); // 玩家數量 for (int i = 0; i < Map.GetMapCharactersTotal(); i++) { Dictionary <InventoryType.EquipType, int> equip = null; try { equip = InventoryPacket.getEquip(chr[i]); } catch { equip = null; } int WeaponUpgradeAttack = 0; if (equip.ContainsKey(InventoryType.EquipType.Weapon)) { WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level1 * 10; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level2 * 9; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level3 * 8; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level4 * 7; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level5 * 6; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level6 * 5; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level7 * 4; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level8 * 3; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level9 * 2; WeaponUpgradeAttack += chr[i].Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level10 * 1; } plew.WriteInt(chr[i].CharacterID); // 玩家ID(-1) plew.WriteString(chr[i].Name, 20); // 玩家名稱 plew.WriteString(chr[i].Title, 20); // 玩家稱號 plew.WriteShort(chr[i].PlayerX); // 玩家 PositionX plew.WriteShort(chr[i].PlayerY); // 玩家 PositionY plew.WriteByte(chr[i].Gender); // 性別(1) plew.WriteByte(chr[i].Level); // 等級 plew.WriteByte(chr[i].Class); // 職業 plew.WriteByte(chr[i].ClassLevel); plew.WriteByte(chr[i].Guild); plew.WriteByte(0); // 光圈 plew.WriteByte(0); // 隱形 plew.WriteByte(chr[i].Shop != null ? 1 : 0); plew.WriteInt(chr[i].IsFuring == true ? chr[i].FuringType : 0); plew.WriteInt(chr[i].Hair); // 頭髮[Hair] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face) ? equip[InventoryType.EquipType.Face] : 0); // 臉上[Face] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face2) ? equip[InventoryType.EquipType.Face2] : 0); // 臉下[Face2] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Hat) ? equip[InventoryType.EquipType.Hat] : 0); // 頭部[Hat] plew.WriteInt(chr[i].Eyes); // 眼睛[Eyes] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Outfit) ? equip[InventoryType.EquipType.Outfit] : 0); // 衣服[Outfit] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Dress) ? equip[InventoryType.EquipType.Dress] : 0); // 服裝[Dress] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Weapon) ? equip[InventoryType.EquipType.Weapon] : 0); // 武器[Weapon] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Mantle) ? equip[InventoryType.EquipType.Mantle] : 0); // 披風[Mantle] plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Pet) ? equip[InventoryType.EquipType.Pet] : 0); // 靈物[Pet] //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.HairAcc) ? equip[InventoryType.EquipType.HairAcc] : 0); plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Toy) ? equip[InventoryType.EquipType.Toy] : 0); // 玩物[Toy] // 寵物 plew.WriteString(chr[i].Pets.Name((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet), 20); // PetName plew.WriteInt(chr[i].Pets.Level((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(chr[i].Pets.Hp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(chr[i].Pets.Mp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(chr[i].Pets.Exp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); plew.WriteInt(0); // 玩物 plew.WriteString("", 20); // ToyName plew.WriteInt(0); // ToyLevel plew.WriteInt(0); // ToyHP plew.WriteInt(0); // ToyMaxMP plew.WriteShort(WeaponUpgradeAttack); // 武器 Glow ++ plew.WriteShort(0); // 遠端IP位置 plew.WriteByte(int.Parse(chr[i].Client.Title.Split('.')[0])); plew.WriteByte(int.Parse(chr[i].Client.Title.Split('.')[1])); plew.WriteByte(int.Parse(chr[i].Client.Title.Split('.')[2])); plew.WriteByte(int.Parse(chr[i].Client.Title.Split('.')[3])); // 遠端虛擬IP位置 plew.WriteByte(chr[i].IP.GetAddressBytes()[0]); plew.WriteByte(chr[i].IP.GetAddressBytes()[1]); plew.WriteByte(chr[i].IP.GetAddressBytes()[2]); plew.WriteByte(chr[i].IP.GetAddressBytes()[3]); plew.WriteHexString("1F 40"); // 個人商店 plew.WriteString(chr[i].Shop != null ? chr[i].Shop.Name : "", 40); // 個人商店名稱 plew.WriteShort(0); plew.WriteShort(-1); plew.WriteShort(0); plew.WriteInt(0); plew.WriteInt(0); plew.WriteInt(-1); plew.WriteString("", 20); plew.WriteByte(0); plew.WriteByte(0); // Like Warp On Player Effect plew.WriteByte(0); plew.WriteByte(0); // 泡泡效果 plew.WriteByte(0); // 泡泡效果 plew.WriteByte(0); plew.WriteShort(0); plew.WriteShort(chr[i].CharacterID);// 玩家ID [Map Number] plew.WriteByte(-1); plew.WriteByte(0); plew.WriteByte(0); plew.WriteByte(0); plew.WriteShort(0); //Log.Inform("(Other) CharacterID = {0} 遠端IP = {1}.{2}.{3}.{4} , 虛擬IP = {5}.{6}.{7}.{8}", chr[i].CharacterID, int.Parse(chr[i].Client.Title.Split('.')[0]), int.Parse(chr[i].Client.Title.Split('.')[1]), int.Parse(chr[i].Client.Title.Split('.')[2]), int.Parse(chr[i].Client.Title.Split('.')[3]), chr[i].IP.GetAddressBytes()[0], chr[i].IP.GetAddressBytes()[1], chr[i].IP.GetAddressBytes()[2], chr[i].IP.GetAddressBytes()[3]); } c.Send(plew); } }
public static void warpToMap(Client c, Character chr, int CharacterID, short MapX, short MapY, short PositionX, short PositionY) { using (OutPacket plew = new OutPacket()) { Dictionary <InventoryType.EquipType, int> equip = InventoryPacket.getEquip(chr); int WeaponUpgradeAttack = 0; if (equip.ContainsKey(InventoryType.EquipType.Weapon)) { WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level1 * 10; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level2 * 9; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level3 * 8; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level4 * 7; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level5 * 6; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level6 * 5; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level7 * 4; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level8 * 3; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level9 * 2; WeaponUpgradeAttack += chr.Items[InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Weapon].Level10 * 1; } //plew.WriteInt(0); // length + CRC // plew.WriteInt(0); //plew.WriteInt(CharacterID); // 角色編號 //plew.WriteHexString("9C 01 81 00 D2 00 EF 02 78 6F 6C ED 08 05 01 1E 00 9C 01 BF 02 00 20 00 00 19 20 03 05"); //plew.WriteString(chr.Name, 20); //plew.WriteString(chr.Title, 20); //plew.WriteShort(MapX); //plew.WriteShort(MapY); //plew.WriteShort(PositionX); //plew.WriteShort(PositionY); //plew.WriteByte(chr.Gender); //plew.WriteByte(chr.Level); //plew.WriteByte(chr.Class); //plew.WriteByte(chr.ClassLevel); //plew.WriteByte(chr.Guild); //plew.WriteByte(0); // 光圈 //plew.WriteByte(chr.IsHiding == false ? 0 : 1); //plew.WriteByte(chr.IsFuring == false ? 0 : chr.FuringType); //plew.WriteInt(0); // (byte) //plew.WriteInt(chr.Hair); // 頭髮 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face) // ? equip[InventoryType.EquipType.Face] // : 0); // 臉上 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Face2) // ? equip[InventoryType.EquipType.Face2] // : 0); // 臉下 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Hat) // ? equip[InventoryType.EquipType.Hat] // : 0); // 帽子 //plew.WriteInt(chr.Eyes); // 眼睛 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Outfit) // ? equip[InventoryType.EquipType.Outfit] // : 0); // 衣服 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Dress) // ? equip[InventoryType.EquipType.Dress] // : 0); // 服裝 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Weapon) // ? equip[InventoryType.EquipType.Weapon] // : 0); // 武器 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Mantle) // ? equip[InventoryType.EquipType.Mantle] // : 0); // 披風 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Pet) // ? equip[InventoryType.EquipType.Pet] // : 0); // 靈物 //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Toy) // ? equip[InventoryType.EquipType.Toy] // : 0); // 玩物 // // 寵物 //plew.WriteString(chr.Pets.Name((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet), // 20); // PetName //plew.WriteInt(chr.Pets.Level((byte)InventoryType.ItemType.Equip, // (byte)InventoryType.EquipType.Pet)); // PetLevel //plew.WriteInt(chr.Pets.Hp((byte)InventoryType.ItemType.Equip, // (byte)InventoryType.EquipType.Pet)); // PetHP //plew.WriteInt(chr.Pets.Mp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); //plew.WriteInt(chr.Pets.Exp((byte)InventoryType.ItemType.Equip, (byte)InventoryType.EquipType.Pet)); //plew.WriteInt(chr.Pets.DecorateID((byte)InventoryType.ItemType.Equip, // (byte)InventoryType.EquipType.Pet)); //plew.WriteInt(equip.ContainsKey(InventoryType.EquipType.Pet) // ? chr.UseSlot[(byte)InventoryType.ItemType.Pet5] // : 0); //// 玩物 //plew.WriteString("", 20); // ToyName //plew.WriteInt(0); // ToyLevel //plew.WriteInt(0); //plew.WriteInt(0); //plew.WriteInt(0); //// //plew.WriteShort(0); // (byte) //plew.WriteShort(WeaponUpgradeAttack); // 武器 Glow ++ //plew.WriteShort(0); //plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[0])); //plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[1])); //plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[2])); //plew.WriteByte(int.Parse(chr.Client.Title.Split('.')[3])); //plew.WriteByte(chr.IP.GetAddressBytes()[0]); //plew.WriteByte(chr.IP.GetAddressBytes()[1]); //plew.WriteByte(chr.IP.GetAddressBytes()[2]); //plew.WriteByte(chr.IP.GetAddressBytes()[3]); //plew.WriteHexString("01 4F 00 98 13 EC 14 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 F4 00 01 00 00 08 0A 81 00 33 00 BC 0A 00 00 00 00 08 05 01 42 00 08 0A 4F 0B 00 E0 FF 00 E0 22 00 00 FF E0 5A 00 E0 22 8E E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FA 00 01 00 00 18 00 81 00 19 00 B2 00 18 31 6C EB 08 05 01 51 00 18 00 6E 01 00 20 00 00 52 20 03 00 36 20 03 03 00 00 B0 04 "); //plew.WriteHexString("1F 40"); // Port //plew.WriteShort(0); // (byte) //plew.WriteShort(0); // plew.WriteHexString("00 00 00 00 00 00 00 00"); // plew.WriteInt(-1); // plew.WriteByte(0); // plew.WriteByte(0); // plew.WriteByte(0); // plew.WriteByte(0); // plew.WriteByte(0); // plew.WriteByte(0); // plew.WriteShort(-1); // plew.WriteByte(-1); // plew.WriteByte(0); // 觀戰 // plew.WriteByte(0); // plew.WriteByte(0); plew.WriteHexString("9C 01 81 00 D2 00 EF 02 78 3F EC EB 08 05 01 1E 00 9C 01 BF 02 00 20 00 00 2E 20 03 05 79 72 74 74 30 30 20 08 E0 02 00 05 54 65 73 74 47 47 E0 02 10 20 00 00 01 20 01 07 43 00 B4 05 02 02 0B FF 60 00 20 13 06 00 00 EC EB D1 18 8A 20 07 E0 01 00 06 DD A1 8B 00 FB 5B 7C 60 10 02 7C B2 78 60 07 E0 07 00 02 45 54 89 E0 07 12 80 00 02 41 EC EB 80 08 E0 01 00 40 6B E0 01 0D E0 02 00 02 CC 41 08 C0 0D 05 98 CC 41 00 00 01 A0 00 00 CC 40 15 09 B8 16 10 CE A9 FE 24 B3 1F 40 40 27 E0 07 43 00 FF E0 0D 51 E0 07 00 E0 04 37 00 01 C0 9B 03 79 34 08 01 20 29 E0 07 53 80 00 E0 01 BF 02 01 01 82 A0 9F 00 2E A0 07 60 00 00 F6 E0 03 37 40 0B 40 4B 02 00 53 82 20 6B 01 FF FF 98 13 81 00 46 00 5F 14 00 00 00 00 08 05 01 4F 00 98 13 EC 14 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 F4 00 01 00 00 08 0A 81 00 33 00 BC 0A 00 00 00 00 08 05 01 42 00 08 0A 4F 0B 00 E0 FF 00 E0 22 00 00 FF E0 5A 00 E0 22 8E E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FA 00 01 00 00 05 01 44 00 2C 01 75 02 00 00 00 00 01 00 00 00 02 20 03 17 79 72 74 74 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 00 99 02 01 01 00 FF FF 00 00 00 00 00 00 00 D1 18 8A 00 00 00 00 00 00 00 00 00 00 00 00 00 DD A1 8B 00 FB 5B 7C 00 00 00 00 00 7C B2 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7F 00 00 01 00 00 00 00 1F 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 0F FF FF FF F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 0F F0 00 00 00 00 00 00"); //Log.Inform("(My) MapX = {0} , MapY = {1}", MapX, MapY); //Log.Inform("(My) CharacterID = {0} 遠端IP = {1}.{2}.{3}.{4} , 虛擬IP = {5}.{6}.{7}.{8}", chr.CharacterID, int.Parse(chr.Client.Title.Split('.')[0]), int.Parse(chr.Client.Title.Split('.')[1]), int.Parse(chr.Client.Title.Split('.')[2]), int.Parse(chr.Client.Title.Split('.')[3]), chr.IP.GetAddressBytes()[0], chr.IP.GetAddressBytes()[1], chr.IP.GetAddressBytes()[2], chr.IP.GetAddressBytes()[3]); System.Threading.Thread.Sleep(250); // plew.WriteHexString("9C 01 81 00 D2 00 EF 02 78 3F EC EB 08"); //CRC // plew.WriteHexString("05 01 1E 00 9C 01 BF 02 00 20 00 00 2E 20 03 05"); // Header // plew.WriteString("yrtt00"); // plew.WriteHexString("20 08 E0 02 00 05 54 65 73 74 47 47 E0 02 10 20 00 00 01 20 01 07 43 00 B4 05 02 02 0B FF 60 00 20 13 06 00 00 EC EB D1 18 8A 20 07 E0 01 00 06 DD A1 8B 00 FB 5B 7C 60 10 02 7C B2 78 60 07 E0 07 00 02 45 54 89 E0 07 12 80 00 02 41 EC EB 80 08 E0 01 00 40 6B E0 01 0D E0 02 00 02 CC 41 08 C0 0D 05 98 CC 41 00 00 01 A0 00 00 CC 40 15 09 B8 16 10 CE A9 FE 24 B3 1F 40 40 27 E0 07 43 00 FF E0 0D 51 E0 07 00 E0 04 37 00 01 C0 9B 03 79 34 08 01 20 29 E0 07 53 80 00 E0 01 BF 02 01 01 82 A0 9F 00 2E A0 07 60 00 00 F6 E0 03 37 40 0B 40 4B 02 00 53 82 20 6B 01 FF FF 98 13 81 00 46 00 5F 14 00 00 00 00 08 05 01 4F 00 98 13 EC 14 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 F4 00 01 00 00 08 0A 81 00 33 00 BC 0A 00 00 00 00 08 05 01 42 00 08 0A 4F 0B 00 E0 FF 00 E0 22 00 00 FF E0 5A 00 E0 22 8E E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FF 00 E0 FA 00 01 00 00 05 01 44 00 2C 01 75 02 00 00 00 00 01 00 00 00 02 20 03 17 79 72 74 74 30 30 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 55 00 99 02 01 01 00 FF FF 00 00 00 00 00 00 00 D1 18 8A 00 00 00 00 00 00 00 00 00 00 00 00 00 DD A1 8B 00 FB 5B 7C 00 00 00 00 00 7C B2 78 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 7F 00 00 01 00 00 00 00 1F 40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 0F FF FF FF F0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 22 0F F0 00 00 00 00 00 00"); c.SendCustom(plew); } }