عرض مشاركة واحدة
قديم 2019-08-19, 04:04 AM
المشاركة 2
Hassan Emprator
.:: عضو خبير ::.
  • غير متواجد
افتراضي رد: مشكلة في الوار دروب
جرب بدل دا بي العندك كلاس wardrobe
كود:
using ProtoBuf;
using System;
using System.Runtime.InteropServices;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Collections.Concurrent;
using System.Text;
using System.Threading.Tasks;

namespace 
MrHassan.Network.GamePackets
{
    public 
sealed class CoatStorage
    
{
        public 
CoatStorage() { }
        public 
bool Read(byte[] packet)
        {
            
using (var memoryStream = new MemoryStream(packet))
            {
                
Info Serializer.DeserializeWithLengthPrefix<CoatStorageProto>(memoryStreamPrefixStyle.Fixed32);
            }
            return 
true;
        }
        public 
void Handle(Client.GameState client)
        {
            switch (
Info.ActionId)
            {
                case 
Action.Combine:
                    {
                        
ConquerItem ItemInInventory null;
                        
ConquerItem ItemInSystem null;
                        if (
client.Inventory.TryGetItem((uint)Info.ItemIdout ItemInInventory))
                        {
                            if (
client.Entity.StorageItems.TryGetValue((uint)Info.ItemGuidout ItemInSystem))
                            {
                                
ItemInSystem.Minutes += ItemInInventory.Minutes;
                                
Database.ConquerItemTable.UpdateMinutes(ItemInSystem);
                                if (
ItemInSystem.Minutes != 0)
                                {
                                    
uint num;
                                    if (
DateTime.Now >= ItemInSystem.TimeStamp.AddMinutes(ItemInSystem.Minutes))
                                    {
                                        
Database.ConquerItemTable.DeleteItem(ItemInSystem.UID);
                                    }
                                    else
                                    {
                                        
TimeSpan span = new TimeSpan(ItemInSystem.TimeStamp.AddMinutes(ItemInSystem.Minutes).Ticks);
                                        
TimeSpan span2 = new TimeSpan(DateTime.Now.Ticks);
                                        
num = (uint)(span.TotalSeconds span2.TotalSeconds);
                                        
ItemInSystem.TimeLeftInMinutes num;
                                    }
                                }

                                
client.Inventory.Remove(ItemInInventoryGame.Enums.ItemUse.Remove);
                                var 
proto = new CoatStorageProto();
                                
proto.ActionId Action.Combine;
                                
proto.ItemGuid Info.ItemGuid;
                                
proto.ItemId = (int)ItemInSystem.ID;
                                
proto.AddItem(ItemInSystem1);
                                
client.Send(FinalizeProtoBuf(proto));
                            }
                        }
                        break;

                    }
                case 
Action.Equipcheck:
                    
ConquerItem myItem;
                    if (
client.Inventory.TryGetItem(Info.ItemGuidout myItem))
                    {
                        var 
packet FinalizeProtoBuf(new CoatStorageProto()
                        {
                            
ActionId Info.ActionId,
                            
ItemGuid Info.ItemGuid,
                        });
                        
client.Send(packet);
                    }
                    break;
                case 
Action.Addtowardrobe:
                    {
                        if (!
CanEquip(Infoclient))
                        {
                            if (
client.Inventory.TryGetItem(Info.ItemGuidout myItem))
                            {
                                if (!
client.Entity.StorageItems.ContainsKey(myItem.UID))
                                    
client.Entity.StorageItems.Add(myItem.UIDmyItem);
                                
myItem.InWardrobe true;
                                
Database.ConquerItemTable.UpdateWardrobe(myItem.InWardrobemyItem.UID);
                                
client.Inventory.Remove(myItemGame.Enums.ItemUse.None);
                            }
                            break;
                        }
                        if (
client.Entity.StorageItems.TryGetValue(Info.ItemGuidout myItem))
                        {

                            foreach (var 
i in client.Entity.StorageItems.Values)
                            {
                                if (
i.Position == (byte)PacketHandler.GetPositionFromID(myItem.ID))
                                {
                                    if (
client.Equipment.TryGetItem((byte)i.Position) != null)
                                        
client.Equipment.Remove((byte)i.Positiontrue);
                                    
i.Position 0;
                                    
Database.ConquerItemTable.UpdateLocation(iclient);
                                }
                            }
                            
myItem.Position = (byte)PacketHandler.GetPositionFromID(myItem.ID);

                            if (!
client.Equipment.Add(myItem))
                            {
                                
client.Equipment.Remove((byte)myItem.Positiontrue);
                            }
                            var 
iu = new ItemUsage(true);
                            
iu.ID ItemUsage.Unknown5;
                            
iu.UID myItem.UID;
                            
iu.dwParam myItem.Position;
                            
client.Send(iu.ToArray());

                            
ClientEquip equips = new ClientEquip();
                            
equips.DoEquips(client);
                            
client.Send(equips.ToArray());

                            
Database.ConquerItemTable.UpdateLocation(myItemclient);
                            
client.Equipment.UpdateEntityPacket();
                            
client.Send(FinalizeProtoBuf(new CoatStorageProto()
                            {
                                
ActionId Info.ActionId,
                                
ItemGuid Info.ItemGuid,
                                
ItemId = (int)myItem.ID
                            
}));
                        }
                        else if (
client.Inventory.TryGetItem(Info.ItemGuidout myItem))
                        {
                            
client.Entity.StorageItems.Add(myItem.UIDmyItem);
                            
myItem.InWardrobe true;
                            
Database.ConquerItemTable.UpdateWardrobe(myItem.InWardrobemyItem.UID);
                            
client.Inventory.Remove(myItemGame.Enums.ItemUse.None);
                            
client.Send(FinalizeProtoBuf(new CoatStorageProto()
                            {
                                
ActionId Info.ActionId,
                                
ItemGuid Info.ItemGuid,
                                
ItemId = (int)myItem.ID
                            
}));
                            foreach (var 
i in client.Entity.StorageItems.Values)
                            {
                                if (
i.Position != && i.Position == (byte)PacketHandler.GetPositionFromID(myItem.ID))
                                {
                                    if (
client.Equipment.TryGetItem((byte)i.Position) != null)
                                        
client.Equipment.Remove((byte)i.Positiontrue);
                                    
i.Position 0;
                                    
Database.ConquerItemTable.UpdateLocation(iclient);
                                }
                            }
                            
myItem.Position = (byte)PacketHandler.GetPositionFromID(myItem.ID);

                            if (!
client.Equipment.Add(myItem))
                            {
                                
client.Equipment.Remove((byte)myItem.Positiontrue);

                            }
                            var 
iu = new ItemUsage(true);
                            
iu.ID ItemUsage.Unknown5;
                            
iu.UID myItem.UID;
                            
iu.dwParam myItem.Position;
                            
client.Send(iu.ToArray());

                            
ClientEquip equips = new ClientEquip();
                            
equips.DoEquips(client);
                            
client.Send(equips.ToArray());

                            
Database.ConquerItemTable.UpdateLocation(myItemclient);
                            
client.Equipment.UpdateEntityPacket();
                        }
                        break;
                    }
                case 
Action.Takeoff:
                    if (
client.Entity.StorageItems.TryGetValue(Info.ItemGuidout myItem))
                    {
                        
client.Send(FinalizeProtoBuf(new CoatStorageProto()
                        {
                            
ActionId Info.ActionId,
                            
ItemGuid Info.ItemGuid,
                            
ItemId = (int)myItem.ID
                        
}));

                        var 
pos = (byte)PacketHandler.GetPositionFromID(myItem.ID);
                        
client.Equipment.Remove(postrue);
                        
ClientEquip equips = new ClientEquip();
                        
equips.DoEquips(client);
                        if (
pos == 17)
                            
equips.SteedArmor 0;
                        else 
equips.Garment 0;
                        
client.Send(equips.ToArray());
                        
client.Equipment.UpdateEntityPacket();

                    }
                    break;
                case 
Action.Retrieve:
                    if (
client.Entity.StorageItems.TryGetValue(Info.ItemGuidout myItem) && client.Inventory.Count 40)
                    {
                        var 
pos = (byte)PacketHandler.GetPositionFromID(myItem.ID);
                        
client.Entity.StorageItems.Remove(myItem.UID);
                        
myItem.InWardrobe false;
                        
Database.ConquerItemTable.UpdateWardrobe(myItem.InWardrobemyItem.UID);
                        
client.Send(FinalizeProtoBuf(new CoatStorageProto()
                        {
                            
ActionId Info.ActionId,
                            
ItemGuid Info.ItemGuid,
                            
ItemId = (int)myItem.ID
                        
}));
                        
client.Inventory.Add(myItemGame.Enums.ItemUse.Move);
                        
ClientEquip equips = new ClientEquip();
                        
equips.DoEquips(client);
                        if (
pos == 17)
                            
equips.SteedArmor 0;
                        else 
equips.Garment 0;
                        
client.Send(equips.ToArray());
                        
client.Equipment.UpdateEntityPacket();
                    }
                    break;
            }
            new 
TitleStorage().CheckTitles(client);
        }

        private 
bool CanEquip(CoatStorageProto InfoClient.GameState client)
        {
            
ConquerItem myItem;

            if (
client.Inventory.TryGetItem(Info.ItemGuidout myItem) ||
            
client.Entity.StorageItems.TryGetValue(Info.ItemGuidout myItem) ||
            
client.Equipment.TryGetItem(Info.ItemGuidout myItem))
            {
                var 
dbInfo Database.ConquerItemInformation.BaseInformations.ContainsKey(myItem.ID) ?
                
Database.ConquerItemInformation.BaseInformations[myItem.ID] : null;
                if (
dbInfo == null)
                    return 
false;
                
bool isSteedArmor PacketHandler.GetPositionFromID(myItem.ID) == PacketHandler.Positions.SteedArmor;
                
bool CanEquipSteedArmor isSteedArmor && client.Entity.SubClasses.Classes.ContainsKey(9)
                    && 
client.Entity.SubClasses.Classes[9].Phase >= Database.ConquerItemInformation.BaseInformations[myItem.ID].Proficiency;

                if (!
isSteedArmor)
                {
                    var 
charSex = (client.Entity.Body == 1003 || client.Entity.Body == 1004) ? "Male" "Female";
                    if ((
dbInfo.Gender == charSex != "Male" dbInfo.Gender == false charSex != "Female"))
                    {
                        return 
false;
                    }
                }
                else if (
isSteedArmor && !CanEquipSteedArmor) return false;
            }
            else return 
false;
            return 
true;
        }

        private 
byte[] FinalizeProtoBuf(CoatStorageProto coatStorageProto)
        {
            
using (var memoryStream = new MemoryStream())
            {
                
Serializer.SerializeWithLengthPrefix(memoryStreamcoatStorageProtoPrefixStyle.Fixed32);
                var 
pkt = new byte[memoryStream.Length];
                
memoryStream.ToArray().CopyTo(pkt0);
                
Writer.Write((ushort)memoryStream.Length0pkt);
                
Writer.Write((ushort)33002pkt);

                return 
pkt;
            }
        }
        public 
void Login(Client.GameState client)
        {
            var 
pkt = new CoatStorageProto();
            foreach (var 
item in client.Entity.StorageItems.Values)
            {
                
pkt.AddItem(item,
                    
client.Entity.StorageItems.Values.Where(=> i.ID == item.ID).Count());
                
client.Send(FinalizeProtoBuf(pkt));

                if (
item.Position != 0)
                {
                    
client.Equipment.Add(item);

                    var 
iu = new ItemUsage(true);
                    
iu.ID ItemUsage.Unknown5;
                    
iu.UID item.UID;
                    
iu.dwParam item.Position;
                    
client.Send(iu.ToArray());

                    
ClientEquip equips = new ClientEquip();
                    
equips.DoEquips(client);
                    
client.Send(equips.ToArray());

                    
Database.ConquerItemTable.UpdateLocation(itemclient);
                    
client.Equipment.UpdateEntityPacket();
                }

            }
            var 
currentGarment client.Equipment.TryGetItem((byte)PacketHandler.Positions.Garment);
            if (
currentGarment != null && !client.Entity.StorageItems.ContainsKey(currentGarment.UID))
            {
                
client.Entity.StorageItems.Add(currentGarment.UIDcurrentGarment);
                
pkt.AddItem(currentGarment,
                    
client.Entity.StorageItems.Values.Where(=> i.ID == currentGarment.ID).Count());
                
pkt.Item.Equipped true;
                
client.Send(FinalizeProtoBuf(pkt));
            }
            var 
currentMountArmor client.Equipment.TryGetItem((byte)PacketHandler.Positions.SteedArmor);
            if (
currentMountArmor != null && !client.Entity.StorageItems.ContainsKey(currentMountArmor.UID))
            {
                
client.Entity.StorageItems.Add(currentMountArmor.UIDcurrentMountArmor);
                
pkt.AddItem(currentMountArmor,
                    
client.Entity.StorageItems.Values.Where(=> i.ID == currentMountArmor.ID).Count());
                
pkt.Item.Equipped true;
                
client.Send(FinalizeProtoBuf(pkt));
            }

        }


        public 
CoatStorageProto Info;

        public 
enum Action int
        
{
            
/// <summary>
            /// Load items in storage ...
            /// </summary>
            
Login 0,
            
Equipcheck 1,
            
Retrieve 2,
            
Combine 4,
            
Addtowardrobe 5,
            
Takeoff 6,
            
dwParam 7,
        }
    }
    [
ProtoContract]
    public class 
CoatStorageProto
    
{
        [
ProtoMember(1IsRequired true)]
        public 
CoatStorage.Action ActionId;
        [
ProtoMember(2IsRequired true)]
        public 
uint ItemGuid;
        [
ProtoMember(3IsRequired true)]
        public 
int ItemId;
        [
ProtoMember(4IsRequired true)]
        public 
int Junk;
        [
ProtoMember(5IsRequired true)]
        public 
ItemStorage Item;
        public 
void AddItem(ConquerItem itemint stack)
        {
            
Item = new ItemStorage();
            
Item.ItemUID item.UID;
            
Item.ItemID = (int)item.ID;
            
Item.Maximumdurability Item.Minimumdurability item.MaximDurability;
            
Item.Stack stack;
            
Item.FirstSocket = (int)item.SocketOne;
            
Item.SecondSocket = (int)item.SocketTwo;
            
Item.Plus item.Plus;
            
Item.Protection item.Bless;
            
Item.Bound item.Bound;
            
Item.Health item.Enchant;
            
Item.SocketProgress = (int)item.SocketProgress;
            
Item.Effect item.Effect;
            
Item.Color item.Color;
            
Item.CraftProgress = (int)item.PlusProgress;
            
Item.Locked item.Lock == true false;
            
Item.Suspicious false;
            
Item.Inscribed false;
            
Item.dwParam7 0;
            
Item.Equipped item.Position != 0;
            
Item.dwParam15 0;
            
Item.Time 0;
            
Item.SubTime 0;
        }

    }
    [
ProtoContract]
    public class 
ItemStorage
    
{
        [
ProtoMember(1IsRequired true)]
        public 
uint ItemUID;
        [
ProtoMember(2IsRequired true)]
        public 
int ItemID;
        [
ProtoMember(3IsRequired true)]
        public 
int SocketProgress;
        [
ProtoMember(4IsRequired true)]
        public 
int FirstSocket;
        [
ProtoMember(5IsRequired true)]
        public 
int SecondSocket;
        [
ProtoMember(6IsRequired true)]
        public 
Game.Enums.ItemEffect Effect;
        [
ProtoMember(7IsRequired true)]
        public 
int dwParam7;
        [
ProtoMember(8IsRequired true)]
        public 
int Plus;
        [
ProtoMember(9IsRequired true)]
        public 
int Protection;
        [
ProtoMember(10IsRequired true)]
        public 
bool Bound;
        [
ProtoMember(11IsRequired true)]
        public 
int Health;
        [
ProtoMember(12IsRequired true)]
        public 
bool Equipped;
        [
ProtoMember(13IsRequired true)]
        public 
bool Suspicious;
        [
ProtoMember(14IsRequired true)]
        public 
bool Locked;
        [
ProtoMember(15IsRequired true)]
        public 
int dwParam15;
        [
ProtoMember(16IsRequired true)]
        public 
Game.Enums.Color Color;
        [
ProtoMember(17IsRequired true)]
        public 
int CraftProgress;
        
/// <summary>
        /// Inscribed in guild arsenal 
        /// This class is for wardrobe items which are garments or mount armors so this filed is always false
        /// </summary>
        
[ProtoMember(18IsRequired true)]
        public 
bool Inscribed;
        
/// <summary>
        /// Time left in seconds !
        /// </summary>
        
[ProtoMember(19IsRequired true)]
        public 
int Time;
        
/// <summary>
        /// Time left in minutes (if item not activated only)
        /// </summary>
        
[ProtoMember(20IsRequired true)]
        public 
int SubTime;
        [
ProtoMember(21IsRequired true)]
        public 
int Stack;
        [
ProtoMember(22IsRequired true)]
        public 
int Minimumdurability;
        [
ProtoMember(23IsRequired true)]
        public 
int Maximumdurability;
    }
    public static class 
Storage
    
{
        private static 
string Path Constants.DataHolderPath "Storage.ini";

        public static 
void Read(out StorageInfo storageInfo)
        {
            
storageInfo = new StorageInfo();
            var 
reader = new IniFile(Path);
            {
                
storageInfo.Count reader.ReadInt32("Storage""StorageTypeCount"0);
                
storageInfo.Storages = new StorageInfo.Storage[storageInfo.Count];
                for (
int i 0storageInfo.Counti++)
                {
                    var 
mySection = (1).ToString();
                    
storageInfo.Storages[i] = new StorageInfo.Storage();
                    
storageInfo.Storages[i].Type reader.ReadInt32(mySection"Type"0);
                    
storageInfo.Storages[i].UnitCount reader.ReadInt32(mySection"UnitCount"0);
                    
storageInfo.Storages[i].ViewType reader.ReadInt32(mySection"ViewType"0);
                    
storageInfo.Storages[i].Units = new StorageInfo.Storage.Unit[storageInfo.Storages[i].UnitCount];
                    for (
int u 0storageInfo.Storages[i].UnitCountu++)
                    {
                        var 
unitSection mySection "-" + (1).ToString();
                        
storageInfo.Storages[i].Units[u] = new StorageInfo.Storage.Unit();
                        
storageInfo.Storages[i].Units[u].ID reader.ReadInt32(unitSection"ID"0);
                        
storageInfo.Storages[i].Units[u].AniSection reader.ReadString(unitSection"AniSection");
                        
storageInfo.Storages[i].Units[u].GetWayType3 reader.ReadInt32(unitSection"GetWayType3"0);
                        
storageInfo.Storages[i].Units[u].GetWayText3 reader.ReadString(unitSection"GetWayText3");
                        
storageInfo.Storages[i].Units[u].Param reader.ReadString(unitSection"Param");
                        
storageInfo.Storages[i].Units[u].Intro reader.ReadString(unitSection"Intro");
                    }

                }
            }
            
//Console.WriteLine("Storages loaded");
        
}
    }
    [
StructLayout(LayoutKind.Sequential)]
    public class 
StorageInfo
    
{
        public 
int Count;
        public 
Storage[] Storages;
        public class 
Storage
        
{
            public 
int Type;
            public 
int UnitCount;
            public 
int ViewType;
            public 
Unit[] Units;
            public class 
Unit
            
{
                public 
int ID;
                public 
string AniSection;
                public 
int GetWayType3;
                public 
string GetWayText3;
                public 
string Param;
                public 
string Intro;
            }
        }
        public 
Storage GetStorageByType(int Type)
        {
            foreach (var 
storage in Storages)
                if (
storage != null && storage.Type == Type)
                    return 
storage;
            return 
null;
        }
        public 
Storage.Unit GetUnitByID(int IDStorage _storage null)
        {
            if (
_storage != null)
            {
                foreach (var 
unit in _storage.Units)
                    if (
unit.ID == ID)
                        return 
unit;
            }
            else
            {
                foreach (var 
storage in Storages)
                    if (
storage != null)
                        foreach (var 
unit in storage.Units)
                            if (
unit.ID == ID)
                                return 
unit;
            }
            return 
null;
        }
    }
    public 
sealed class StorageManager
    
{
        public static 
StorageInfo Info;

        public static 
void Load()
        {
            try
            {
                
Storage.Read(out Info);
            }
            catch (
Exception e)
            {
                
Console.WriteLine(e);
            }
        }

        public static 
T Wing<T>(int _typeint _id)
        {
            
object value null;
            
int trash 0;
            if (
typeof(T) == typeof(bool))
            {
                
value int.TryParse(Info.GetUnitByID(_idInfo.GetStorageByType(_type)).Paramout trash);
            }
            else if (
typeof(T) == typeof(int))
            {
                var 
myType _type.ToString();
                var 
myID _id.ToString();


                while (
myID.Length 4)
                    
myID "0" myID;
                
value int.Parse(myType myID);
            }
            else
                throw new 
Exception("Unknow type : " typeof(T).Name);
            return (
T)Convert.ChangeType(valuetypeof(T));
        }

       public static 
int GetTitlePoints(short _typeshort _id)     
        {     
            if (
_type == && _id == 1000)     
                return 
150;     
            else if (
_type == 2018 && _id == 1)     
                return 
500;     
            else if (
_type == 2001 && _id == 2)     
                return 
300;     
            else if (
_type == 2002 && _id == 3)     
                return 
150;     
            else if (
_type == 2003 && _id == 4)     
                return 
300;     
            else if (
_type == 2004 && _id == 5)     
                return 
150;     
            else if (
_type == 2005 && _id == 6)     
                return 
150;     
            else if (
_type == 2006 && _id == 7)     
                return 
150;     
            else if (
_type == 2020 && _id == 2020)     
                return 
300;     
            else if (
_type == 2021 && _id == 2021)     
                return 
200;     
            else if (
_type == 2022 && _id == 2022)     
                return 
100;     
            else if (
_type == 2023 && _id == 2023)     
                return 
300;     
            else if (
_type == 2024 && _id == 2024)     
                return 
200;     
            else if (
_type == 2025 && _id == 2025)     
                return 
100;     
            else if (
_type == 2028 && _id == 2028)     
                return 
150;     
            else if (
_type == 2029 && _id == 2029)     
                return 
300;     
            else if (
_type == 2030 && _id == 2030)     
                return 
100;     
            else if (
_type == 2031 && _id == 2031)     
                return 
200;     
            else if (
_type == 6009 && _id == 6009)     
                return 
300;     
            else if (
_type == 6007 && _id == 6007)     
                return 
300;     
            else if (
_type == 6008 && _id == 6008)     
                return 
300;     
            else if (
_type == 2026 && _id == 2026)     
                return 
100;     
            else if (
_type == 2027 && _id == 2027)     
                return 
300;     
            else if (
_type == 2032 && _id == 2032)     
                return 
300;     
            else if (
_type == 2033 && _id == 2033)     
                return 
300;     
            else if (
_type == 6011 && _id == 6011)     
                return 
300;     
            else if (
_type == 2034 && _id == 2034)     
                return 
300;     
            else if (
_type == 2013 && _id == 14)     
                return 
300;     
            else if (
_type == 2014 && _id == 15)     
                return 
300;     
            else if (
_type == 2015 && _id == 16)     
                return 
300;     
            else if (
_type == 2016 && _id == 17)     
                return 
300;     
            else if (
_type == 2035 && _id == 2035)     
                return 
300;     
            else if (
_type == 2036 && _id == 2036)     
                return 
300;     
            else if (
_type == 2037 && _id == 2037)     
                return 
300;     
            else if (
_type == 2038 && _id == 2038)     
                return 
300;     
            else if (
_type == 2039 && _id == 2039)     
                return 
300;     
            else if (
_type == 2040 && _id == 2040)     
                return 
100;     
            else if (
_type == 2041 && _id == 2041)     
                return 
100;     
            else if (
_type == 2044 && _id == 2044)     
                return 
100;     
            else if (
_type == 2045 && _id == 2045)     
                return 
100;     
            else if (
_type == 6012 && _id == 6012)     
                return 
100;     
            else if (
_type == 2050 && _id == 2050)     
                return 
100;     
            else if (
_type == 2051 && _id == 2051)     
                return 
100;     
            else if (
_type == 2052 && _id == 2052)     
                return 
100;     
            else if (
_type == 2053 && _id == 2053)     
                return 
150;     
            else if (
_type == 2054 && _id == 2054)     
                return 
150;     
            else if (
_type == 2057 && _id == 2057)     
                return 
150;     
            else if (
_type == 2056 && _id == 2056)     
                return 
100;     
            else if (
_type == 2046 && _id == 2046)     
                return 
150;     
            else if (
_type == 2047 && _id == 2047)     
                return 
150;     
            else if (
_type == 2048 && _id == 2048)     
                return 
150;     
            else if (
_type == 2049 && _id == 2049)     
                return 
150;     
            else if (
_type == 2059 && _id == 2059)     
                return 
100;     
            else if (
_type == 2060 && _id == 2060)     
                return 
150;     
            else if (
_type == 2061 && _id == 2061)     
                return 
150;     
            else if (
_type == 2062 && _id == 2062)     
                return 
150;     
            else if (
_type == 6013 && _id == 6013)     
                return 
100;     
            else if (
_type == 6014 && _id == 6014)     
                return 
150;     
            else if (
_type == 6015 && _id == 6015)     
                return 
150;     
            else if (
_type == 6016 && _id == 6016)     
                return 
150;     
            else if (
_type == 6017 && _id == 6017)     
                return 
150;     
            else if (
_type == 2063 && _id == 2063)     
                return 
150;     
            else if (
_type == 2064 && _id == 2064)     
                return 
150;     
            else if (
_type == 2065 && _id == 2065)     
                return 
150;     
            return 
0;     
        
       }
        public static 
T Title<T>(int _typeint _id)
        {
            
object value null;
            
int trash 0;
            if (
typeof(T) == typeof(bool))
            {
                
value = !int.TryParse(Info.GetUnitByID(_idInfo.GetStorageByType(_type)).Paramout trash);
            }
            else if (
typeof(T) == typeof(int))
            {
                var 
myType _type.ToString();
                var 
myID _id.ToString();

                while (
myID.Length 4)
                    
myID "0" myID;
                
value int.Parse(myType myID);
            }
            else
                throw new 
Exception("Unknow type : " typeof(T).Name);
            return (
T)Convert.ChangeType(valuetypeof(T));
        }
    }
    public 
sealed class TitleStorage
    
{
        public 
TitleStorage() { }
        public 
bool Read(byte[] packet)
        {
            
using (var memoryStream = new MemoryStream(packet))
            {
                
Info Serializer.DeserializeWithLengthPrefix<TitleStorageProto>(memoryStreamPrefixStyle.Fixed32);
            }
            return 
true;
        }
        private 
bool CollectedRandMonkey(Client.GameState client)
        {
            return 
client.Entity.StorageItems.Values.Where(=> MonkeysValues.Contains(p.ID)).ToList().Count true false;
        }
        private 
bool CollectedCelestialFox(Client.GameState client)
        {
            return 
client.Entity.StorageItems.Values.Where(=> p.ID == 200595).ToList().Count true false;
        }
        private 
bool CollectedCelestialFoxFantasy(Client.GameState client)
        {
            return 
client.Entity.StorageItems.Values.Where(=> p.ID == 200596).ToList().Count true false;
        }
        List<
uintMonkeysValues = new List<uint>()
        {
            
200553,
            
200554,
            
200555,
            
200556,
            
200557,
            
200558,
            
200559,
            
200560
        
};
        private 
bool Collected8TypesMonkey(Client.GameState client)
        {
            List<
uintIDs = new List<uint>();
            var 
Dict client.Entity.StorageItems.Values.ToList();
            for (
int x 0Dict.Countx++)
            {
                if (
MonkeysValues.Contains(Dict[x].ID) && !IDs.Contains(Dict[x].ID))
                {
                    
IDs.Add(Dict[x].ID);
                }
            }
            return 
IDs.Count == true false;
        }
        private 
bool CollectedMonkey(Client.GameState clientuint ID)
        {
            return 
client.Entity.StorageItems.Values.Where(=> p.ID == ID).ToList().Count true false;
        }
        public 
void CheckTitles(Client.GameState client)
        {
            if (
client.Entity.haveallTitles) { GetAll(client); return; }
            
#region Titles And Wings Equips
            #region Wings
            #region Union Emperor
            
if (client.Union != null)
                if (
client.Union.IsKingdom())
                    if (
client.Union.IsLeader(client.Entity.UID))
                        new 
TitleStorage().AddTitle(client40011000false);
                    else
                        new 
TitleStorage().RemoveTitle(client40011000false);
                else
                    new 
TitleStorage().RemoveTitle(client40011000false);
            else
                new 
TitleStorage().RemoveTitle(client40011000false);
            
#endregion
            #region The Champion Of Elite Pk Tournament
            
if (client.Entity.Titles.ContainsKey(TitlePacket.Titles.ElitePKChamption_High))
            {
                
DateTime date DateTime.Now;
                for (
int i DateTime.Now.Day31i++)
                {
                    
date = new DateTime(DateTime.Now.YearDateTime.Now.Monthi);
                    if (
date.DayOfWeek == DayOfWeek.Friday)
                    {
                        
date = new DateTime(DateTime.Now.YearDateTime.Now.Monthi19550);
                        break;
                    }
                }
                if (
date.Day == DateTime.Now.Day && date.Hour == DateTime.Now.Hour && date.Year == DateTime.Now.Year && date.Minute == date.Minute && DateTime.Now.DayOfWeek != DayOfWeek.Friday)
                {
                    for (
int i 131i++)
                    {
                        
date = new DateTime(DateTime.Now.YearDateTime.Now.Month 1i);
                        if (
date.DayOfWeek == DayOfWeek.Friday)
                        {
                            
date = new DateTime(DateTime.Now.YearDateTime.Now.Month 1i19550);
                            break;
                        }
                    }
                }
                
TimeSpan timespan date DateTime.Now;
                
int time = (int)(timespan.TotalSeconds);
                new 
TitleStorage().AddTitle(client600120falsetime);
            }
            else
                new 
TitleStorage().RemoveTitle(client600120false);
            
#endregion
            #region Own a 5-star garment
            
if (Database.WardrobeTable.AmountStarGarments(client5) >= 1)
            {
                new 
TitleStorage().AddTitle(client600322false);
            }
            else
                new 
TitleStorage().RemoveTitle(client600322false);
            
#endregion
            #region Own a 5-star Mount armor
            
if (Database.WardrobeTable.AmountStarMounts(client5) >= 1)
            {
                new 
TitleStorage().AddTitle(client600423false);
            }
            else
                new 
TitleStorage().RemoveTitle(client600423false);
            
#endregion
            #region Prestige Score reaches 600,000
            
if (client.Entity.TotalPerfectionScore >= 600000)
            {
                new 
TitleStorage().AddTitle(client20262026false);
            }
            else
                new 
TitleStorage().RemoveTitle(client20262026false);
            
#endregion
            #region Stars Score reaches 324
            
if (client.Equipment.TotalStars >= 324)
            {
                new 
TitleStorage().AddTitle(client60076007false);
            }
            else
                new 
TitleStorage().RemoveTitle(client60076007false);
            
#endregion
            #region Stars Score reaches 216
            
if (client.Equipment.TotalStars >= 216)
            {
                new 
TitleStorage().AddTitle(client60086008false);
            }
            else
                new 
TitleStorage().RemoveTitle(client60086008false);
            
#endregion
            #endregion
            #region Titles
            #region Union Emperor
            
if (client.Union != null)
                if (
client.Union.IsKingdom())
                    if (
client.Union.IsLeader(client.Entity.UID))
                        new 
TitleStorage().AddTitle(client11000false);
                    else
                        new 
TitleStorage().RemoveTitle(client11000false);
                else
                    new 
TitleStorage().RemoveTitle(client11000false);
            else
                new 
TitleStorage().RemoveTitle(client11000false);
            
#endregion
            #region VIP
            
if (client.Entity.VIPLevel 0)
            {
                switch (
client.Entity.VIPLevel)
                {
                    case 
1:
                    case 
2:
                    case 
3:
                    case 
4:
                        {
                            new 
TitleStorage().AddTitle(client20302030false);
                            break;
                        }
                    case 
5:
                    case 
6:
                        {
                            new 
TitleStorage().AddTitle(client20292029false);
                            break;
                        }
                    case 
7:
                        {
                            new 
TitleStorage().AddTitle(client20312031false);
                            break;
                        }
                }
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20302030false);
                new 
TitleStorage().RemoveTitle(client20292029false);
                new 
TitleStorage().RemoveTitle(client20312031false);
            }
            
#endregion
            #region CollectedRandMonkey
            
if (CollectedRandMonkey(client))
            {
                new 
TitleStorage().AddTitle(client201314false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client201314false);
            }
            
#endregion
            #region Collect 8 kinds of permanent saint monkeys (can be activated via the Wardrobe after the event)
            
if (Collected8TypesMonkey(client))
            {
                new 
TitleStorage().AddTitle(client201617false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client201617false);
            }
            
#endregion
            #region Collect a permanent Solar Monkey
            
if (CollectedMonkey(client200559))
            {
                new 
TitleStorage().AddTitle(client201415false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client201415false);
            }
            
#endregion
            #region Collect a permanent Lunar Monkey
            
if (CollectedMonkey(client200560))
            {
                new 
TitleStorage().AddTitle(client201516false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client201516false);
            }
            
#endregion
            #region Tulip
            
if (client.Entity.MyFlowers != null && client.Entity.MyFlowers.RankTuilps == 1)
            {
                new 
TitleStorage().AddTitle(client60056005false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client60056005false);
            }
            
#endregion
            #region The Total Score of Chi Study Reaches 1.600 Points
            
if (client.ChiData.DragonPoints == 400 && client.ChiData.PhoenixPoints == 400 && client.ChiData.TigerPoints == 400 && client.ChiData.TurtlePoints == 400)
            {
                new 
TitleStorage().AddTitle(client20181false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20181false);
            }
            
#endregion
            #region Prestige Score reaches 400,000
            
if (client.Entity.TotalPerfectionScore >= 400000)
            {
                new 
TitleStorage().AddTitle(client20272027false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20272027false);
            }
            
#endregion
            #region The Total Score Of Jiang hu training reaches 81,000 points(Title)
            
if (client.Entity.MyJiang != null && client.Entity.MyJiang.Inner_Strength >= 81000)
            {
                new 
TitleStorage().AddTitle(client20045false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20045false);
            }
            
#endregion
            #region Complete 320 Achievement
            
if (client.Entity.MyAchievement.Count(client.Entity.UID) >= 320)
            {
                new 
TitleStorage().AddTitle(client20012false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20012false);
            }
            
#endregion
            #region Own 5 garments of 4-star or 5-star
            
if (Database.WardrobeTable.AmountStarGarments(client4) >= 5)
            {
                new 
TitleStorage().AddTitle(client20056false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20056false);
            }
            
#endregion
            #region Own 5 Mount of 4-star or 5-star
            
if (Database.WardrobeTable.AmountStarMounts(client4) >= 5)
            {
                new 
TitleStorage().AddTitle(client20067false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20067false);
            }
            
#endregion
            #region CelestialFox(200595)
            
if (CollectedCelestialFox(client))
            {
                new 
TitleStorage().AddTitle(client20502050false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20502050false);
            }
            
#endregion
            #region CelestialFox(Fantasy)(200596)
            
if (CollectedCelestialFoxFantasy(client))
            {
                new 
TitleStorage().AddTitle(client20512051false);
            }
            else
            {
                new 
TitleStorage().RemoveTitle(client20512051false);
            }
            
#endregion
            #endregion
            #endregion
            #region GM
            /*if (client.Account.State == Database.AccountTable.AccountState.GameMaster)
            {
                foreach (var title in Database.WardrobeTable.Titles.Values)
                {
                    AddTitle(client, (short)title.Type, (short)title.ID);
                }
            }*/
            #endregion
        
}
        public 
void Login(Client.GameState clientbool Crossed falsestring val "")
        {
            if (!
Crossed)
            {
                
CheckTitles(client);
                
using (var cmd = new Database.MySqlCommand(Database.MySqlCommandType.SELECT).Select("entities").Where("UID"client.Account.EntityID))
                
using (var reader = new Database.MySqlReader(cmd))
                {
                    if (
reader.Read())
                    {
                        if (
reader.ReadString("Wardrobe") != "")
                        {
                            if (
reader.ReadString("Wardrobe").Contains("~"))
                            {
                                var 
wing reader.ReadString("Wardrobe").Split('~')[0];
                                
int type Convert.ToInt32(wing.Split('-')[0]);
                                
int id Convert.ToInt32(wing.Split('-')[1]);
                                if (
client.Entity.Wings.ContainsKey((uint)type) && client.Entity.Wings.ContainsValue((uint)id))
                                {
                                    var 
pkt = new TitleStorageProto()
                                    {
                                        
ActionId Action.Update,
                                        
Points client.Entity.UTitlePoints,
                                        
Type type,
                                        
Id id,
                                        
Value = new TitleValue()
                                        {
                                            
Type type,
                                            
Id id,
                                            
Equipped true
                                        
}
                                    };
                                    
client.Send(FinalizeProtoBuf(pkt));
                                    
client.Entity.EquippedWing StorageManager.Wing<int>(typeid);
                                    
client.Entity.NowEquippedWing.Clear();
                                    
client.Entity.NowEquippedWing.Add(type "~" id);
                                }
                                var 
title reader.ReadString("Wardrobe").Split('~')[1];
                                
int type2 Convert.ToInt32(title.Split('-')[0]);
                                
int id2 Convert.ToInt32(title.Split('-')[1]);
                                if (
client.Entity.WTitles.ContainsKey((uint)type2) && client.Entity.WTitles.ContainsValue((uint)id2))
                                {
                                    var 
pkt = new TitleStorageProto()
                                    {
                                        
ActionId Action.Update,
                                        
Points client.Entity.UTitlePoints,
                                        
Type type2,
                                        
Id id2,
                                        
Value = new TitleValue()
                                        {
                                            
Type type2,
                                            
Id id2,
                                            
Equipped true
                                        
}
                                    };
                                    
client.Send(FinalizeProtoBuf(pkt));
                                    
client.Entity.EquippedTitle StorageManager.Title<int>(type2id2);
                                    
client.Entity.NowEquippedTitle.Clear();
                                    
client.Entity.NowEquippedTitle.Add(type2 "~" id2);
                                }
                            }
                        }

                    }
                }
            }
            else
            {
                if (
val != "")
                {
                    if (
val.Contains("~"))
                    {
                        
CheckTitles(client);
                        var 
wing val.Split('~')[0];
                        
int type Convert.ToInt32(wing.Split('-')[0]);
                        
int id Convert.ToInt32(wing.Split('-')[1]);
                        var 
pkt = new TitleStorageProto()
                        {
                            
ActionId Action.Update,
                            
Points client.Entity.UTitlePoints,
                            
Type type,
                            
Id id,
                            
Value = new TitleValue()
                            {
                                
Type type,
                                
Id id,
                                
Equipped true
                            
}
                        };
                        
client.Send(FinalizeProtoBuf(pkt));
                        
client.Entity.EquippedWing StorageManager.Wing<int>(typeid);
                        
client.Entity.NowEquippedWing.Clear();
                        
client.Entity.NowEquippedWing.Add(type "~" id);

                        var 
title val.Split('~')[1];
                        
int type2 Convert.ToInt32(title.Split('-')[0]);
                        
int id2 Convert.ToInt32(title.Split('-')[1]);
                        
pkt.Type type2;
                        
pkt.Id id2;
                        
pkt.Value.Type type2;
                        
pkt.Value.Id id2;
                        
client.Send(FinalizeProtoBuf(pkt));
                        
client.Entity.EquippedTitle StorageManager.Title<int>(type2id2);
                        
client.Entity.NowEquippedTitle.Clear();
                        
client.Entity.NowEquippedTitle.Add(type2 "~" id2);
                    }
                }
            }

        }
        public 
void Handle(Client.GameState client)
        {
            switch (
Info.ActionId)
            {
                case 
Action.Unequip:
                    {
                        if (
StorageManager.Wing<bool>(Info.TypeInfo.Id))
                        {
                            
client.Entity.EquippedWing 0;
                            
client.Entity.NowEquippedWing.Clear();
                        }
                        else if (
StorageManager.Title<bool>(Info.TypeInfo.Id))
                        {
                            
client.Entity.EquippedTitle 0;
                            
client.Entity.NowEquippedTitle.Clear();
                        }
                        
client.Send(FinalizeProtoBuf(Info));
                        break;
                    }
                case 
Action.Equip:
                    {
                        if (
client.Entity.UTitlePoints StorageManager.GetTitlePoints((short)Info.Type, (short)Info.Id))
                            break;
                        if (
StorageManager.Wing<bool>(Info.TypeInfo.Id))
                        {
                            
client.Entity.EquippedWing StorageManager.Wing<int>(Info.TypeInfo.Id);
                            
client.Entity.NowEquippedWing.Clear();
                            
client.Entity.NowEquippedWing.Add(Info.Type "~" Info.Id);
                        }
                        else if (
StorageManager.Title<bool>(Info.TypeInfo.Id))
                        {
                            
client.Entity.EquippedTitle StorageManager.Title<int>(Info.TypeInfo.Id);
                            
client.Entity.NowEquippedTitle.Clear();
                            
client.Entity.NowEquippedTitle.Add(Info.Type "~" Info.Id);
                        }

                        
Info = new TitleStorageProto()
                        {
                            
ActionId Action.Equip,
                            
Points client.Entity.UTitlePoints,
                            
Type Info.Type,
                            
Id Info.Id,
                        };

                        
client.Send(FinalizeProtoBuf(Info));
                        break;
                    }
            }
            new 
TitleStorage().CheckTitles(client);
        }
        public 
void GetAll(Client.GameState client)
        {
            foreach (var 
title in Database.WardrobeTable.Titles.Values)
            {
                
AddTitle(client, (short)title.Type, (short)title.IDfalse);
            }
            
client.Entity.haveallTitles true;
        }
        public 
void AddTitle(Client.GameState clientshort _typeshort _idbool equipped falseint TimeInSeconds 0)
        {
            if (
StorageManager.Wing<bool>(_type_id))
            {
                if (!
client.Entity.Wings.ContainsValue((uint)_id))
                    
client.Entity.Wings.Add((uint)_type, (uint)_id);
                else return;
            }
            else
            {
                if (!
client.Entity.WTitles.ContainsValue((uint)_id))
                    
client.Entity.WTitles.Add((uint)_type, (uint)_id);
                else return;
            }
            
client.Entity.UTitlePoints += StorageManager.GetTitlePoints(_type_id);
            var 
pkt = new TitleStorageProto()
            {
                
ActionId Action.Update,
                
Points client.Entity.UTitlePoints,
                
Value = new TitleValue()
                {
                    
Type _type,
                    
Id _id,
                    
Equipped equipped,
                    
Time TimeInSeconds,
                }
            };

            
client.Send(FinalizeProtoBuf(pkt));
            if (
equipped)
            {
                if (
StorageManager.Wing<bool>(_type_id))
                {
                    
client.Entity.EquippedWing StorageManager.Wing<int>(_type_id);
                    
client.Entity.NowEquippedWing.Clear();
                    
client.Entity.NowEquippedWing.Add(_type "~" _id);
                }
                else if (
StorageManager.Title<bool>(_type_id))
                {
                    
client.Entity.EquippedTitle StorageManager.Title<int>(_type_id);
                    
client.Entity.NowEquippedTitle.Clear();
                    
client.Entity.NowEquippedTitle.Add(_type "~" _id);
                }
            }
        }
        public 
void RemoveTitle(Client.GameState clientshort _typeshort _idbool equipped false)
        {
            if (
StorageManager.Wing<bool>(_type_id))
            {
                if (
client.Entity.Wings.ContainsValue((uint)_id))
                {
                    
client.Entity.Wings.Remove((uint)_type);
                    if (
client.Entity.EquippedWing == StorageManager.Wing<int>(_type_id))
                    {
                        
client.Entity.EquippedWing 0;
                        
client.Entity.NowEquippedWing.Clear();

                        var 
pkt = new TitleStorageProto()
                        {
                            
ActionId Action.Unequip,
                            
Id _id,
                            
Type _type,
                            
Points client.Entity.UTitlePoints,
                            
Value = new TitleValue()
                            {
                                
Type _type,
                                
Id _id,
                                
Equipped false
                            
}

                        };
                        
client.Send(FinalizeProtoBuf(pkt));

                    }
                    
client.Entity.UTitlePoints -= StorageManager.GetTitlePoints(_type_id);
                    var 
pkt2 = new TitleStorageProto()
                    {
                        
ActionId Action.RemoveTitle,
                        
Id _id,
                        
Type _type,
                        
Points client.Entity.UTitlePoints,
                        
Value = new TitleValue()
                        {
                            
Type _type,
                            
Id _id,
                            
Equipped false
                        
}
                    };
                    
client.Send(FinalizeProtoBuf(pkt2));
                }
                else return;
            }
            else
            {
                if (
client.Entity.WTitles.ContainsValue((uint)_id))
                {
                    
client.Entity.WTitles.Remove((uint)_type);
                    if (
client.Entity.EquippedTitle == StorageManager.Title<int>(_type_id))
                    {
                        
client.Entity.EquippedTitle 0;
                        
client.Entity.NowEquippedTitle.Clear();
                        var 
pkt = new TitleStorageProto()
                        {
                            
ActionId Action.Unequip,
                            
Id _id,
                            
Type _type,
                            
Points client.Entity.UTitlePoints,
                            
Value = new TitleValue()
                            {
                                
Type _type,
                                
Id _id,
                                
Equipped false
                            
}
                        };
                        
client.Send(FinalizeProtoBuf(pkt));
                    }
                    
client.Entity.UTitlePoints -= StorageManager.GetTitlePoints(_type_id);
                    var 
pkt2 = new TitleStorageProto()
                    {
                        
ActionId Action.RemoveTitle,
                        
Id _id,
                        
Type _type,
                        
Points client.Entity.UTitlePoints,
                        
Value = new TitleValue()
                        {
                            
Type _type,
                            
Id _id,
                            
Equipped false
                        
}
                    };
                    
client.Send(FinalizeProtoBuf(pkt2));
                }
                else return;
            }
        }
        public 
byte[] FinalizeProtoBuf(TitleStorageProto titleStorageProto)
        {
            
using (var memoryStream = new MemoryStream())
            {
                
Serializer.SerializeWithLengthPrefix(memoryStreamtitleStorageProtoPrefixStyle.Fixed32);
                var 
pkt = new byte[memoryStream.Length];
                
memoryStream.ToArray().CopyTo(pkt0);
                
Writer.Write((ushort)memoryStream.Length0pkt);
                
Writer.Write((ushort)33012pkt);

                return 
pkt;
            }
        }


        public 
TitleStorageProto Info;
        [
Flags]
        public 
enum Action int
        
{
            
Update 0,
            
UseTitle 1,
            
RemoveTitle 3,
            
Equip 4,
            
Unequip 5,
        }
    }
    [
ProtoContract]
    public class 
TitleStorageProto
    
{
        [
ProtoMember(1IsRequired true)]
        public 
TitleStorage.Action ActionId;
        [
ProtoMember(2IsRequired true)]
        public 
int Points;
        [
ProtoMember(3IsRequired true)]
        public 
int Type;
        [
ProtoMember(4IsRequired true)]
        public 
int Id;
        [
ProtoMember(5IsRequired true)]
        public 
TitleValue Value;
    }
    [
ProtoContract]
    public class 
TitleValue
    
{
        [
ProtoMember(1IsRequired true)]
        public 
int Type;
        [
ProtoMember(2IsRequired true)]
        public 
int Id;
        [
ProtoMember(3IsRequired true)]
        public 
bool Equipped;
        [
ProtoMember(4IsRequired true)]
        public 
int Time;
    }