Beispiel #1
0
 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);
     }
 }
Beispiel #2
0
 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);
     }
 }
Beispiel #3
0
        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);
            }
        }
Beispiel #4
0
        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);
            }
        }
Beispiel #5
0
        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);
            }
        }