示例#1
0
        public static byte[] PrivateMessageCheck(WorldMgr.character c)
        {
            DB           ms     = new DB("SELECT * FROM message WHERE receiver='" + c.Information.Name + "'");
            PacketWriter Writer = new PacketWriter();
            int          count  = ms.Count();

            Writer.Create(OperationCode.SERVER_PM_MESSAGE);
            Writer.Byte(1);                     //Static
            Writer.Byte(Convert.ToByte(count)); //Total count
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    string   pmfrom    = reader.GetString(1);
                    string   pmto      = reader.GetString(2);
                    string   pmmessage = reader.GetString(3);
                    byte     pmstatus  = reader.GetByte(4);
                    DateTime pmdate    = Convert.ToDateTime(reader.GetDateTime(5));

                    Writer.Text(pmfrom);            // Message From
                    Writer.DWord(0x8A070000);       // date
                    Writer.DWord(0xC7058401);       // date
                    Writer.Byte(pmstatus);          // Status (0 = Unread) (1 = Read)
                }
                ms.Close();
            }
            return(Writer.GetBytes());
        }
示例#2
0
        public static byte[] GuildStorageGold(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_GUILD_STORAGE_GOLD);
            Writer.LWord(c.Network.Guild.StorageGold);
            return(Writer.GetBytes());
        }
示例#3
0
        public static byte[] JoinFormedRequest(WorldMgr.character requesting, WorldMgr.character owner)
        {
            //Create new packet writer
            PacketWriter Writer = new PacketWriter();

            //Add opcode for packet
            Writer.Create(OperationCode.SERVER_PARTY_JOIN_FORMED);
            //Character model information (Req).
            Writer.DWord(requesting.Information.Model);
            //Leader id
            Writer.DWord(requesting.Information.UniqueID);
            //Party id
            Writer.DWord(owner.Network.Party.ptid);
            //Static
            Writer.DWord(0);
            Writer.DWord(0);
            Writer.Byte(0);
            Writer.Byte(0xFF);
            //Write character unique id
            Writer.DWord(requesting.Information.UniqueID);
            //Write character name
            Writer.Text(requesting.Information.Name);
            //Write model information
            Writer.DWord(requesting.Information.Model);
            //Write level information
            Writer.Byte(requesting.Information.Level);
            //Static
            Writer.Byte(0xAA);
            //X and Y Sector
            Writer.Byte(requesting.Position.xSec);
            Writer.Byte(requesting.Position.ySec);
            //Static
            Writer.Word(0);
            Writer.Word(0);
            Writer.Word(0);
            Writer.Word(1);
            Writer.Word(1);
            //If character is in a guild
            if (requesting.Network.Guild != null)
            {
                //Write guild name
                Writer.Text(requesting.Network.Guild.Name);
            }
            //If character is not in a guild
            else
            {
                //Write word value 0
                Writer.Word(0);
            }
            //Static
            Writer.Byte(0);
            Writer.DWord(0);
            Writer.DWord(0);
            //Return all bytes to send
            return(Writer.GetBytes());
        }
        public static byte[] FriendInviteTarget(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_FRIEND_INVITE_SEND);
            Writer.DWord(c.Information.CharacterID);
            Writer.DWord(c.Information.UniqueID);
            Writer.Text(c.Information.Name);
            return(Writer.GetBytes());
        }
示例#5
0
        public static byte[] HonorRank(WorldMgr.character c)
        {
            DB           ms        = new DB("SELECT * FROM rank_honor");
            PacketWriter Writer    = new PacketWriter();
            int          countinfo = ms.Count();

            Writer.Create(OperationCode.SERVER_HONOR_RANK);
            Writer.Byte(1);
            int i = 0;

            Writer.Byte(Convert.ToByte(countinfo));
            using (SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    byte   rankicon   = reader.GetByte(1);
                    string rankname   = reader.GetString(2);
                    byte   ranklevel  = reader.GetByte(3);
                    byte   ranklevelc = reader.GetByte(4);
                    int    graduatesc = reader.GetInt32(5);
                    int    rankposc   = reader.GetInt32(6);

                    Writer.DWord(i + 1);
                    Writer.Byte(rankicon);
                    Writer.Text(rankname);
                    Writer.Byte(ranklevel);
                    Writer.Byte(ranklevelc);
                    Writer.DWord(graduatesc);
                    //If player has no guild, we write a 0 word value
                    if (c.Network.Guild.Name == null)
                    {
                        Writer.Word(0);
                    }
                    //If player has a guild we write the guild name.
                    else
                    {
                        Writer.Text(c.Network.Guild.Name);
                    }
                    i++;
                }
                ms.Close();
            }
            return(Writer.GetBytes());
        }
        public static byte[] PlayerStat(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_PLAYERSTAT);
            Writer.DWord((int)c.Stat.MinPhyAttack);
            Writer.DWord((int)c.Stat.MaxPhyAttack);
            Writer.DWord((int)c.Stat.MinMagAttack);
            Writer.DWord((int)c.Stat.MaxMagAttack);
            Writer.Word((ushort)c.Stat.PhyDef);
            Writer.Word((ushort)c.Stat.MagDef);
            Writer.Word((ushort)c.Stat.Hit);
            Writer.Word((ushort)c.Stat.Parry);
            Writer.DWord((int)c.Stat.Hp);
            Writer.DWord((int)c.Stat.Mp);
            Writer.Word((ushort)c.Stat.Strength);
            Writer.Word((ushort)c.Stat.Intelligence);
            return(Writer.GetBytes());
        }
        public static byte[] SpawnPortal(WorldMgr.Monsters o, WorldMgr.character c, int itemid)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_SOLO_SPAWN);
            Writer.DWord(o.ID);
            Writer.DWord(o.UniqueID);
            Writer.Byte(o.xSec);
            Writer.Byte(o.ySec);
            Writer.Float(Formule.packetx((float)o.x, o.xSec));
            Writer.Float(o.z);
            Writer.Float(Formule.packety((float)o.y, o.ySec));
            Writer.Word(0);
            Writer.Byte(1);
            Writer.Byte(0);
            Writer.Byte(1);
            Writer.Byte(6);
            Writer.Text(c.Information.Name);
            Writer.DWord(itemid);
            Writer.Byte(1);
            return(Writer.GetBytes());
        }
示例#8
0
        public static byte[] GuildStorageData(WorldMgr.character c)
        {
            DB           getstorage = new DB("SELECT * FROM char_items WHERE guild_storage_id='" + c.Network.Guild.Guildid + "' AND storagetype='3'");
            int          itemcount  = getstorage.Count();
            PacketWriter Writer     = new PacketWriter();

            Writer.Create(OperationCode.SERVER_GUILD_STORAGE3);
            Writer.Byte(c.Network.Guild.StorageSlots);
            Writer.Byte(itemcount);
            if (itemcount != 0)
            {
                using (System.Data.SqlClient.SqlDataReader reader = getstorage.Read())
                {
                    while (reader.Read())
                    {
                        Item.AddItemPacket(Writer, reader.GetByte(5), reader.GetInt32(2), reader.GetByte(4), reader.GetInt16(6), reader.GetInt32(7), reader.GetInt32(0), reader.GetInt32(9), reader.GetInt32(30));
                    }
                }
            }
            getstorage.Close();
            return(Writer.GetBytes());
        }
        public static byte[] FriendData(int target, byte type, string name, WorldMgr.character c, bool state)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_FRIEND_DATA);
            switch (type)
            {
            case 2:
                //Friend invite accepted
                Writer.Byte(2);
                Writer.DWord(target);              //Id
                Writer.Text(c.Information.Name);   //Name
                Writer.DWord(c.Information.Model); //Model
                break;

            case 3:
                //Remove friend from own list
                Writer.Byte(3);
                Writer.DWord(target);
                break;

            case 4:
                //Fried online / offline update
                Writer.Byte(4);
                Writer.DWord(target);
                Writer.Byte(state);
                break;

            case 5:
                //Send private message..
                Writer.Byte(8);
                Writer.Text(name);
                Writer.DWord(0);
                Writer.DWord(0);    //time info
                break;
            }
            return(Writer.GetBytes());
        }
示例#10
0
        public static byte[] SendGuildInfo2(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_GUILD_ONLINE);
            Writer.DWord(c.Information.UniqueID);               // Guildmaster ID
            Writer.DWord(c.Network.Guild.Guildid);              // Guild ID
            Writer.Text(c.Network.Guild.Name);
            if (c.Network.Guild.GrantName != "")
            {
                Writer.Text(c.Network.Guild.GrantName);         // Guildmaster grand name len
            }
            else
            {
                Writer.Word(0);
            }
            Writer.DWord(0);                                    // ?
            Writer.DWord(0);                                    // ?
            Writer.DWord(0);                                    // ? Amount of guilds in union ?
            Writer.Byte(1);                                     // ?
            Writer.Byte(1);
            return(Writer.GetBytes());
        }
        public static byte[] ObjectSpawn(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_SOLO_SPAWN);
            /////////////////////////////////////////////////////// Character basic info
            #region Basic info
            Writer.DWord(c.Information.Model);
            Writer.Byte(c.Information.Volume);                                  //Char Volume
            Writer.Byte(c.Information.Title);                                   //Char Title
            Writer.Byte(c.Information.Pvpstate);                                //Pvp state
            if (c.Information.Pvpstate != 0)
            {
                c.Information.PvP = true;
            }
            Writer.Bool((c.Information.Level < 20 ? true : false));             //Beginners Icon

            Writer.Byte(c.Information.Slots);                                   // Amount of items
            #endregion
            /////////////////////////////////////////////////////// Item info
            #region Item info
            Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 8, 0, true);
            Writer.Byte(5);
            Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 5, 1, true);
            Writer.Byte(0);
            #endregion
            /////////////////////////////////////////////////////// Character Location / id
            #region Location info / state
            Writer.DWord(c.Information.UniqueID);
            Writer.Byte(c.Position.xSec);
            Writer.Byte(c.Position.ySec);
            Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec));
            Writer.Float(c.Position.z);
            Writer.Float(Formule.packety(c.Position.y, c.Position.ySec));
            Writer.Word(0);            //angle
            Writer.Bool(c.Position.Walking);
            Writer.Byte(1);            // walk:0 run:1 ;)
            //This should send the location information while moving. and where we moving
            if (c.Position.Walking)
            {
                Writer.Byte(c.Position.packetxSec);
                Writer.Byte(c.Position.packetySec);
                if (!FileDB.CheckCave(c.Position.packetxSec, c.Position.packetySec))
                {
                    Writer.Word(c.Position.packetX);
                    Writer.Word(c.Position.packetZ);
                    Writer.Word(c.Position.packetY);
                }
                else
                {
                    if (c.Position.packetX < 0)
                    {
                        Writer.Word(c.Position.packetX);
                        Writer.Word(0xFFFF);
                    }
                    else
                    {
                        Writer.DWord(c.Position.packetX);
                    }

                    Writer.DWord(c.Position.packetZ);

                    if (c.Position.packetY < 0)
                    {
                        Writer.Word(c.Position.packetY);
                        Writer.Word(0xFFFF);
                    }
                    else
                    {
                        Writer.DWord(c.Position.packetY);
                    }
                }

                /*byte[] x = BitConverter.GetBytes(c.Position.packetX);
                 * Array.Reverse(x);
                 * Writer.Buffer(x);
                 *
                 * Writer.Word(c.Position.packetZ);
                 *
                 * byte[] y = BitConverter.GetBytes(c.Position.packetY);
                 * Array.Reverse(y);
                 * Writer.Buffer(y);*/
            }
            else
            {
                Writer.Byte(1);
                Writer.Word(0);                //angle
            }


            Writer.Byte((byte)(c.State.LastState == 128 ? 2 : 1));

            Writer.Byte(0);
            //Info : If a player spawns at your location and is walking it send byte 3, else 0 byte.
            if (c.Transport.Right)
            {
                Writer.Byte(c.Transport.Horse.Walking == true ? 3 : 0);
            }
            else
            {
                Writer.Byte(c.Position.Walking == true ? 3 : 0);
            }

            Writer.Byte((byte)(c.Information.Berserking ? 1 : 0));
            Writer.Byte(0);
            Writer.Float(c.Speed.WalkSpeed);
            Writer.Float(c.Speed.RunSpeed);
            Writer.Float(c.Speed.BerserkSpeed);

            Writer.Byte(c.Action.Buff.count);
            for (byte b = 0; b < c.Action.Buff.SkillID.Length; b++)
            {
                if (c.Action.Buff.SkillID[b] != 0)
                {
                    Writer.DWord(c.Action.Buff.SkillID[b]);
                    Writer.DWord(c.Action.Buff.OverID[b]);
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Character Job information / name
            #region Job information & name
            Writer.Text(c.Information.Name);
            Writer.Byte(0);
            if (c.Transport.Right)
            {
                Writer.Byte(1);
                Writer.Byte(0);
                Writer.DWord(c.Transport.Horse.UniqueID);
            }

            else
            {
                Writer.Byte(0);
                Writer.Byte(0);
            }

            Writer.Byte(0);
            if (c.Network.Stall != null && c.Network.Stall.ownerID == c.Information.UniqueID)
            {
                Writer.Byte(0x04);
            }
            else
            {
                Writer.Byte(0);
            }
            //Writer.Byte(0);

            if (c.Network.Guild.Guildid > 0)
            {
                Writer.Text(c.Network.Guild.Name);
                if (c.Network.Guild.GrantName != "")
                {
                    Writer.DWord(0);                    //Icon ?
                    Writer.Text(c.Network.Guild.GrantName);
                }
                else
                {
                    Writer.DWord(0);                   //Icon
                    Writer.Word(0);                    //No grantname
                }
            }
            else
            {
                Writer.Word(0);                //No guild
                Writer.DWord(0);               //No icon
                Writer.Word(0);                //No grantname
            }

            Writer.DWord(0);            // emblem (guild)
            Writer.DWord(0);            // unique id (union)
            Writer.DWord(0);            //emblem (union)

            Writer.Byte(0);             // flag (guild_war)
            Writer.Byte(0);             // flag (fortress_rank)
            if (c.Network.Stall != null && c.Network.Stall.ownerID == c.Information.UniqueID)
            {
                Writer.Text3(c.Network.Stall.StallName);
                Writer.DWord(c.Information.StallModel);
            }
            Writer.Byte(0);

            #endregion
            /////////////////////////////////////////////////////// Pvp state
            #region pvpstate
            if (c.Information.Pvpstate > 0 || c.Information.Murderer)
            {
                Writer.Byte(0x22);
            }
            else
            {
                Writer.Byte(0xFF);
            }
            #endregion
            Writer.Byte(4);
            return(Writer.GetBytes());
        }
        public static byte[] ObjectSpawnJob(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_SOLO_SPAWN);

            /////////////////////////////////////////////////////// Character basic info
            #region Basic info
            Writer.DWord(c.Information.Model);
            Writer.Byte(c.Information.Volume);                                  //Char Volume
            Writer.Byte(c.Information.Title);                                   //Char Title
            Writer.Byte(c.Information.Pvpstate);                                //Pvp state
            if (c.Information.Pvpstate != 0)
            {
                c.Information.PvP = true;
            }
            Writer.Bool((c.Information.Level < 20 ? true : false));             //Beginners Icon

            Writer.Byte(c.Information.Slots);                                   // Amount of items
            #endregion
            /////////////////////////////////////////////////////// Item info
            #region Item info
            Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 8, 0, true);
            Writer.Byte(5);
            Function.Items.PrivateItemPacket(Writer, c.Information.CharacterID, 5, 1, true);
            Writer.Byte(0);
            #endregion
            /////////////////////////////////////////////////////// Character Location / id
            #region Location info / state
            Writer.DWord(c.Information.UniqueID);
            Writer.Byte(c.Position.xSec);
            Writer.Byte(c.Position.ySec);
            Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec));
            Writer.Float(c.Position.z);
            Writer.Float(Formule.packety(c.Position.y, c.Position.ySec));
            Writer.Word(0);            //angle
            Writer.Bool(c.Position.Walking);
            Writer.Byte(1);            // walk:0 run:1 ;)

            if (c.Position.Walking)
            {
                Writer.Byte(c.Position.packetxSec);
                Writer.Byte(c.Position.packetySec);

                if (!FileDB.CheckCave(c.Position.packetxSec, c.Position.packetySec))
                {
                    Writer.Word(c.Position.packetX);
                    Writer.Word(c.Position.packetZ);
                    Writer.Word(c.Position.packetY);
                }
                else
                {
                    if (c.Position.packetX < 0)
                    {
                        Writer.Word(c.Position.packetX);
                        Writer.Word(0xFFFF);
                    }
                    else
                    {
                        Writer.DWord(c.Position.packetX);
                    }

                    Writer.DWord(c.Position.packetZ);

                    if (c.Position.packetY < 0)
                    {
                        Writer.Word(c.Position.packetY);
                        Writer.Word(0xFFFF);
                    }
                    else
                    {
                        Writer.DWord(c.Position.packetY);
                    }
                }
            }
            else
            {
                Writer.Byte(1);
                Writer.Word(0);                //angle
            }


            Writer.Byte((byte)(c.State.LastState == 128 ? 2 : 1));
            Writer.Byte(0);
            Writer.Byte(3);
            Writer.Byte((byte)(c.Information.Berserking ? 1 : 0));

            Writer.Float(c.Speed.WalkSpeed);
            Writer.Float(c.Speed.RunSpeed);
            Writer.Float(c.Speed.BerserkSpeed);

            Writer.Byte(c.Action.Buff.count);
            for (byte b = 0; b < c.Action.Buff.SkillID.Length; b++)
            {
                if (c.Action.Buff.SkillID[b] != 0)
                {
                    Writer.DWord(c.Action.Buff.SkillID[b]);
                    Writer.DWord(c.Action.Buff.OverID[b]);
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Character Job information / name
            #region Job information & name
            Writer.Text(c.Job.Jobname);
            Writer.Byte(1);
            Writer.Byte(c.Job.level);            //Level job
            Writer.Byte(c.Information.Level);    //Level char
            Writer.Byte(0);

            if (c.Transport.Right)
            {
                Writer.Byte(1);
                Writer.Byte(0);
                Writer.DWord(c.Transport.Horse.UniqueID);
            }

            else
            {
                Writer.Byte(0);
                Writer.Byte(0);
            }

            Writer.Byte(0);
            Writer.Byte(0);

            if (c.Network.Guild.Guildid > 0)
            {
                Writer.Text(c.Network.Guild.Name);
            }
            else
            {
                Writer.Word(0);                //No guild
            }

            Writer.Byte(0);
            Writer.Byte(0xFF);
            Writer.Byte(4);
            #endregion
            return(Writer.GetBytes());
        }
        public static WorldMgr.character._usingSkill Info(int SkillID, WorldMgr.character Character)
        {
            //Create new global information
            WorldMgr.character._usingSkill info = new WorldMgr.character._usingSkill();
            //Wrap our function inside a catcher
            try
            {
                //Set default skill information
                info.MainSkill      = SkillID;
                info.SkillID        = new int[10];
                info.FoundID        = new int[10];
                info.TargetType     = new bool[10];
                info.NumberOfAttack = NumberAttack(SkillID, ref info.SkillID);
                info.Targethits     = 1;
                info.Distance       = Convert.ToByte(ObjData.Manager.SkillBase[SkillID].Distance);
                info.Tdistance      = 0;
                info.canUse         = true;
                //Switch on skills series
                switch (ObjData.Manager.SkillBase[SkillID].Series)
                {
                case "SKILL_EU_ROG_TRANSFORMA_MASK_A":
                    break;

                    #region Bicheon
                    #region Smashing Series
                case "SKILL_CH_SWORD_SMASH_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_SMASH_B":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_SMASH_C":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_SMASH_D":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_SMASH_E":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                    #endregion
                    #region Chain Sword Attack Series
                case "SKILL_CH_SWORD_CHAIN_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_CHAIN_B":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_CHAIN_C":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_CHAIN_D":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_CHAIN_E":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_CHAIN_F":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SWORD_CHAIN_G":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                    #endregion
                    #region Blade Force Series
                case "SKILL_CH_SWORD_GEOMGI_A":
                    info.Instant  = 0;
                    info.Distance = 4;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SWORD_GEOMGI_B":
                    info.Instant  = 0;
                    info.Distance = 4;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SWORD_GEOMGI_C":
                    info.Instant  = 0;
                    info.Distance = 4;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SWORD_GEOMGI_D":
                    info.Instant  = 0;
                    info.Distance = 4;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SWORD_GEOMGI_E":
                    info.Instant  = 0;
                    info.Distance = 4;
                    info.P_M      = false;
                    break;

                    #endregion
                    #region Hidden Blade Series
                case "SKILL_CH_SWORD_KNOCKDOWN_A":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.OzelEffect = 4;
                    break;

                case "SKILL_CH_SWORD_KNOCKDOWN_B":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 2;
                    info.OzelEffect = 4;
                    break;

                case "SKILL_CH_SWORD_KNOCKDOWN_C":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.OzelEffect = 4;
                    break;

                case "SKILL_CH_SWORD_KNOCKDOWN_D":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 3;
                    info.OzelEffect = 4;
                    break;

                    #endregion
                    #region Killing Heaven Blade Series
                case "SKILL_CH_SWORD_DOWNATTACK_A":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.OzelEffect = 5;
                    break;

                case "SKILL_CH_SWORD_DOWNATTACK_B":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.OzelEffect = 5;
                    break;

                case "SKILL_CH_SWORD_DOWNATTACK_C":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.OzelEffect = 5;
                    break;

                case "SKILL_CH_SWORD_DOWNATTACK_D":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.OzelEffect = 5;
                    break;

                    #endregion
                    #region Sword Dance Series
                case "SKILL_CH_SWORD_SPECIAL_A":
                    info.Instant    = 0;
                    info.Distance   = 4;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 7;
                    break;

                case "SKILL_CH_SWORD_SPECIAL_B":
                    info.Instant    = 0;
                    info.Distance   = 4;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 15;
                    break;

                case "SKILL_CH_SWORD_SPECIAL_C":
                    info.Instant    = 0;
                    info.Distance   = 4;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 15;
                    break;

                case "SKILL_CH_SWORD_SPECIAL_D":
                    info.Instant    = 0;
                    info.Distance   = 4;
                    info.P_M        = false;
                    info.Targethits = 4;
                    info.Tdistance  = 15;
                    break;
                    #endregion
                    #endregion

                    #region Heuksal
                    #region Annihilating Blade Series
                case "SKILL_CH_SPEAR_PIERCE_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_PIERCE_B":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_PIERCE_C":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_PIERCE_D":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_PIERCE_E":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                    #endregion
                    #region Heuksal Spear Series
                case "SKILL_CH_SPEAR_FRONTAREA_A":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 1;
                    break;

                case "SKILL_CH_SPEAR_FRONTAREA_B":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 1;
                    break;

                case "SKILL_CH_SPEAR_FRONTAREA_C":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 1;
                    break;

                case "SKILL_CH_SPEAR_FRONTAREA_D":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 2;
                    break;

                case "SKILL_CH_SPEAR_FRONTAREA_E":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 2;
                    break;

                    #endregion
                    #region Soul Departs Spear Series
                case "SKILL_CH_SPEAR_STUN_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_STUN_B":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_STUN_C":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_STUN_D":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_STUN_E":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                    #endregion
                    #region Ghost Spear Attack Series
                case "SKILL_CH_SPEAR_ROUNDAREA_A":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 2;
                    break;

                case "SKILL_CH_SPEAR_ROUNDAREA_B":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 3;
                    break;

                case "SKILL_CH_SPEAR_ROUNDAREA_C":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 4;
                    break;

                case "SKILL_CH_SPEAR_ROUNDAREA_D":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 5;
                    break;

                    #endregion
                    #region Chain Spear Attack Series
                case "SKILL_CH_SPEAR_CHAIN_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_CHAIN_B":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_CHAIN_C":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 2;
                    break;

                case "SKILL_CH_SPEAR_CHAIN_D":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_CH_SPEAR_CHAIN_E":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 3;
                    break;

                case "SKILL_CH_SPEAR_CHAIN_F":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 3;
                    break;

                    #endregion
                    #region Flying Dragon Spear Series
                case "SKILL_CH_SPEAR_SHOOT_A":
                    info.Instant  = 0;
                    info.Distance = 6;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SPEAR_SHOOT_B":
                    info.Instant  = 0;
                    info.Distance = 6;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SPEAR_SHOOT_C":
                    info.Instant  = 0;
                    info.Distance = 6;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_SPEAR_SHOOT_D":
                    info.Instant  = 0;
                    info.Distance = 6;
                    info.P_M      = false;
                    break;
                    #endregion
                    #endregion

                    #region Pacheon
                    #region Anti Devil Bow Series
                case "SKILL_CH_BOW_CRITICAL_A":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_CRITICAL_B":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_CRITICAL_C":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_CRITICAL_D":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_CRITICAL_E":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                    #endregion
                    #region Arrow Combo Attack Series
                case "SKILL_CH_BOW_CHAIN_A":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.Distance       = 7;
                    info.P_M            = false;
                    info.OzelEffect     = 5;
                    break;

                case "SKILL_CH_BOW_CHAIN_B":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 0;
                    info.Distance       = 7;
                    info.OzelEffect     = 5;
                    info.P_M            = false;
                    break;

                case "SKILL_CH_BOW_CHAIN_C":
                    info.NumberOfAttack = 4;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.Instant        = 0;
                    info.Distance       = 7;
                    info.OzelEffect     = 5;
                    info.P_M            = false;
                    break;

                case "SKILL_CH_BOW_CHAIN_D":
                    info.NumberOfAttack = 5;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.Instant        = 0;
                    info.Distance       = 7;
                    info.OzelEffect     = 5;
                    info.P_M            = false;
                    break;

                case "SKILL_CH_BOW_CHAIN_E":
                    info.NumberOfAttack = 6;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.SkillID[6]     = SkillID;
                    info.Instant        = 0;
                    info.Distance       = 7;
                    info.OzelEffect     = 5;
                    info.P_M            = false;
                    break;

                    #endregion
                    #region Autumn Wind Arrow Series
                case "SKILL_CH_BOW_PIERCE_A":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_PIERCE_B":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_PIERCE_C":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_PIERCE_D":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                    #endregion
                    #region Explosion Arrow Series
                case "SKILL_CH_BOW_AREA_A":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 4;
                    info.Tdistance  = 4;
                    break;

                case "SKILL_CH_BOW_AREA_B":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 4;
                    info.Tdistance  = 4;
                    break;

                case "SKILL_CH_BOW_AREA_C":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 4;
                    info.Tdistance  = 4;
                    break;

                case "SKILL_CH_BOW_AREA_D":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 4;
                    info.Tdistance  = 5;
                    break;

                    #endregion
                    #region Strong Bow Series
                case "SKILL_CH_BOW_POWER_A":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_POWER_B":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_POWER_C":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                case "SKILL_CH_BOW_POWER_D":
                    info.Instant  = 2;
                    info.Distance = 7;
                    info.P_M      = false;
                    break;

                    #endregion
                    #region Mind Bow Series
                case "SKILL_CH_BOW_SPECIAL_A":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 2;
                    info.Tdistance  = 20;
                    break;

                case "SKILL_CH_BOW_SPECIAL_B":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 3;
                    info.Tdistance  = 22;
                    break;

                case "SKILL_CH_BOW_SPECIAL_C":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 4;
                    info.Tdistance  = 23;
                    break;

                case "SKILL_CH_BOW_SPECIAL_D":
                    info.Instant    = 2;
                    info.Distance   = 7;
                    info.P_M        = false;
                    info.Targethits = 5;
                    info.Tdistance  = 24;
                    break;
                    #endregion
                    #endregion

                    #region Cold
                    #region Snow Storm Series
                case "SKILL_CH_COLD_GIGONGSUL_A":
                    info.Instant  = 2;
                    info.Distance = 5;
                    info.P_M      = true;

                    break;

                case "SKILL_CH_COLD_GIGONGSUL_B":
                    info.Instant    = 2;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 6;
                    break;

                case "SKILL_CH_COLD_GIGONGSUL_C":
                    info.Instant  = 2;
                    info.Distance = 5;
                    info.P_M      = true;
                    break;

                case "SKILL_CH_COLD_GIGONGSUL_D":
                    info.Instant    = 2;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 7;
                    break;
                    #endregion
                    #endregion

                    #region Light
                    #region Lion Shout Series
                case "SKILL_CH_LIGHTNING_CHUNDUNG_A":
                case "SKILL_CH_LIGHTNING_CHUNDUNG_B":
                case "SKILL_CH_LIGHTNING_CHUNDUNG_C":
                case "SKILL_CH_LIGHTNING_CHUNDUNG_D":
                case "SKILL_CH_LIGHTNING_CHUNDUNG_E":
                    info.Instant    = 0;
                    info.Distance   = 6;
                    info.P_M        = true;
                    info.Targethits = 3;
                    info.Tdistance  = 2;
                    break;

                    #endregion
                    #region Thunderbolt Force Series
                case "SKILL_CH_LIGHTNING_STORM_A":
                case "SKILL_CH_LIGHTNING_STORM_B":
                case "SKILL_CH_LIGHTNING_STORM_C":
                case "SKILL_CH_LIGHTNING_STORM_D":
                    info.Instant    = 2;
                    info.Distance   = 6;
                    info.P_M        = true;
                    info.Targethits = 3;
                    info.Tdistance  = 10;
                    break;
                    #endregion
                    #endregion

                    #region Fire
                    #region Flame Wave Series
                case "SKILL_CH_FIRE_GIGONGSUL_A":
                case "SKILL_CH_FIRE_GIGONGSUL_B":
                case "SKILL_CH_FIRE_GIGONGSUL_D":
                case "SKILL_CH_FIRE_GIGONGSUL_E":
                    info.Instant  = 2;
                    info.Distance = 6;
                    info.P_M      = true;
                    break;

                case "SKILL_CH_FIRE_GIGONGSUL_F":
                case "SKILL_CH_FIRE_GIGONGSUL_C":
                    info.Instant    = 2;
                    info.Distance   = 6;
                    info.P_M        = true;
                    info.Targethits = 3;
                    info.Tdistance  = 6;
                    break;
                    #endregion
                    #endregion

                    #region Force
                case "SKILL_CH_WATER_CURE_A":
                case "SKILL_CH_WATER_CURE_B":
                case "SKILL_CH_WATER_CURE_C":
                case "SKILL_CH_WATER_CURE_D":
                case "SKILL_CH_WATER_CURE_E":
                case "SKILL_CH_WATER_CURE_F":
                case "SKILL_CH_WATER_HEAL_A":
                case "SKILL_CH_WATER_HEAL_B":
                case "SKILL_CH_WATER_HEAL_C":
                case "SKILL_CH_WATER_HEAL_D":
                case "SKILL_CH_WATER_HEAL_E":
                case "SKILL_CH_WATER_HEAL_F":
                    if (Character.Action.Object != null || Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr")
                    {
                        info.canUse = false;
                    }

                    break;

                case "SKILL_CH_WATER_CANCEL_A":
                case "SKILL_CH_WATER_CANCEL_B":
                case "SKILL_CH_WATER_CANCEL_C":
                case "SKILL_CH_WATER_CANCEL_D":
                case "SKILL_CH_WATER_CANCEL_E":
                case "SKILL_CH_WATER_CANCEL_F":
                case "SKILL_CH_WATER_CANCEL_G":
                case "SKILL_CH_WATER_CANCEL_H":
                    if (Character.Action.Object != null || Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr")
                    {
                        info.canUse = false;
                    }

                    break;

                case "SKILL_CH_WATER_RESURRECTION_A":
                case "SKILL_CH_WATER_RESURRECTION_B":
                case "SKILL_CH_WATER_RESURRECTION_C":
                case "SKILL_CH_WATER_RESURRECTION_D":
                case "SKILL_CH_WATER_RESURRECTION_E":
                    if (Character.Action.Object != null || Character.Action.Object.GetType().ToString() == "CLGameServer.PlayerMgr")
                    {
                        info.canUse = false;
                    }

                    break;
                    #endregion

                    #region Europe
                    #region Europe Wizard
                    #region Earth
                case "SKILL_EU_WIZARD_EARTHA_POINT_A":
                    info.Instant    = 1;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_EARTHA_POINT_B":
                    info.Instant    = 1;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_EARTHA_AREA_A":
                    info.Instant    = 1;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_EARTHA_AREA_B":
                    info.Instant    = 1;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 10;
                    break;

                    #endregion
                    #region Cold
                case "SKILL_EU_WIZARD_COLDA_POINT_A":
                    info.Instant  = 1;
                    info.Distance = 5;
                    info.P_M      = true;
                    break;

                case "SKILL_EU_WIZARD_COLDA_POINT_B":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 1;
                    info.Distance       = 5;
                    info.P_M            = true;
                    break;

                case "SKILL_EU_WIZARD_COLDA_AREA_A":
                    info.Instant    = 1;
                    info.Distance   = 15;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_COLDA_AREA_B":
                    info.Instant    = 1;
                    info.Distance   = 5;
                    info.P_M        = true;
                    info.Targethits = 5;
                    info.Tdistance  = 10;
                    break;

                    #endregion
                    #region Fire
                case "SKILL_EU_WIZARD_FIREA_POINT_A":
                    info.Instant  = 1;
                    info.Distance = 15;
                    info.P_M      = true;
                    break;

                case "SKILL_EU_WIZARD_FIREA_SPRAY_A":
                    info.NumberOfAttack = 7;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.SkillID[6]     = SkillID;
                    info.SkillID[7]     = SkillID;
                    info.Instant        = 1;
                    info.Distance       = 15;
                    info.P_M            = true;
                    info.Targethits     = 3;
                    info.Tdistance      = 10;
                    break;

                case "SKILL_EU_WIZARD_FIREA_POINT_B":
                    info.Instant    = 1;
                    info.Distance   = 15;
                    info.P_M        = true;
                    info.Targethits = 3;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_FIREA_SPRAY_B":
                    info.NumberOfAttack = 7;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.SkillID[6]     = SkillID;
                    info.SkillID[7]     = SkillID;
                    info.Instant        = 1;
                    info.Distance       = 15;
                    info.P_M            = true;
                    info.Targethits     = 3;
                    info.Tdistance      = 10;
                    break;

                    #endregion
                    #region Light
                case "SKILL_EU_WIZARD_PSYCHICA_LIGHT_A":
                    info.Instant    = 1;
                    info.Distance   = 15;
                    info.P_M        = true;
                    info.Targethits = 2;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_PSYCHICA_AREA_A":
                    info.NumberOfAttack = 6;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.SkillID[6]     = SkillID;
                    info.Instant        = 1;
                    info.Distance       = 15;
                    info.P_M            = true;
                    info.Targethits     = 5;
                    info.Tdistance      = 10;
                    break;

                case "SKILL_EU_WIZARD_PSYCHICA_LIGHT_B":
                    info.Instant    = 1;
                    info.Distance   = 15;
                    info.P_M        = true;
                    info.Targethits = 3;
                    info.Tdistance  = 10;
                    break;

                case "SKILL_EU_WIZARD_PSYCHICA_AREA_B":
                    info.NumberOfAttack = 6;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.SkillID[6]     = SkillID;
                    info.Instant        = 1;
                    info.Distance       = 15;
                    info.P_M            = true;
                    info.Targethits     = 5;
                    info.Tdistance      = 10;
                    break;

                    #endregion
                    #endregion
                    #region Europe Warrior
                    #region Axe
                case "SKILL_EU_WARRIOR_DUALA_CROSS_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_TWIST_A":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_STUN_A":
                    info.Instant    = 0;
                    info.Targethits = 3;
                    info.P_M        = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_COUNTER_A":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 0;
                    info.Targethits     = 3;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_WHIRLWIND_A":
                    info.NumberOfAttack = 4;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.Instant        = 0;
                    info.Targethits     = 3;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_TWIST_B":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_COUNTER_B":
                    info.NumberOfAttack = 4;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.Instant        = 0;
                    info.Targethits     = 3;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_DUALA_WHIRLWIND_B":
                    info.NumberOfAttack = 5;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.Instant        = 0;
                    info.Targethits     = 3;
                    info.P_M            = false;
                    break;

                    #endregion
                    #region Two-Handed
                case "SKILL_EU_WARRIOR_TWOHANDA_DASH_A":
                    info.Instant    = 0;
                    info.Targethits = 3;
                    info.P_M        = false;
                    break;

                case "SKILL_EU_WARRIOR_TWOHANDA_RISING_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_EU_WARRIOR_TWOHANDA_CHARGE_A":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_TWOHANDA_CRY_A":
                    info.Targethits = 3;
                    info.Instant    = 0;
                    info.P_M        = false;
                    break;

                case "SKILL_EU_WARRIOR_TWOHANDA_CHARGE_B":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_TWOHANDA_CRY_B":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                    #endregion
                    #region One-Handed
                case "SKILL_EU_WARRIOR_ONEHANDA_STRIKE_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_EU_WARRIOR_ONEHANDA_SHIELD_A":
                    info.Instant    = 0;
                    info.Targethits = 3;
                    info.P_M        = false;
                    break;

                case "SKILL_EU_WARRIOR_ONEHANDA_PIERCE_A":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_ONEHANDA_CRITICAL_A":
                    info.Instant        = 0;
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_ONEHANDA_SHIELD_B":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Targethits     = 3;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_ONEHANDA_PIERCE_B":
                    info.NumberOfAttack = 4;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_WARRIOR_ONEHANDA_CRITICAL_B":
                    info.NumberOfAttack = 4;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                    #endregion
                    #region Warrior Others
                case "SKILL_EU_WARRIOR_FRENZYA_TOUNT_A":
                    info.Instant    = 0;
                    info.P_M        = false;
                    info.Distance   = 15;
                    info.Targethits = 3;
                    break;

                case "SKILL_EU_WARRIOR_FRENZYA_TOUNT_SPRINT_A":
                    info.Instant  = 0;
                    info.P_M      = false;
                    info.Distance = 15;
                    break;

                    #endregion
                    #endregion
                    #region Europe Rogue
                    #region Rogue
                case "SKILL_EU_ROG_BOWA_FAST_A":
                    info.Instant = 0;
                    break;

                case "SKILL_EU_ROG_BOWA_FAST_B":
                    info.Instant = 0;
                    break;

                case "SKILL_EU_ROG_BOWA_POWER_A":
                case "SKILL_EU_ROG_BOWA_POWER_B":
                case "SKILL_EU_ROG_BOWA_RANGE_A":
                case "SKILL_EU_ROG_BOWA_RANGE_B":
                case "SKILL_EU_ROG_BOWA_KNOCK_A":
                case "SKILL_EU_ROG_BOWA_KNOCK_B":
                    info.Instant = 1;
                    break;

                    #endregion
                    #region Dagger
                case "SKILL_EU_ROG_DAGGERA_CHAIN_A":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_ROG_DAGGERA_WOUND_A":
                    info.NumberOfAttack = 2;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_ROG_DAGGERA_SCREW_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_EU_ROG_DAGGERA_SLASH_A":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_ROG_STEALTHA_ATTACK_A":
                    info.Instant = 0;
                    info.P_M     = false;
                    break;

                case "SKILL_EU_ROG_DAGGERA_WOUND_B":
                    info.NumberOfAttack = 3;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                case "SKILL_EU_ROG_DAGGERA_SLASH_B":
                    info.NumberOfAttack = 5;
                    info.SkillID[1]     = SkillID;
                    info.SkillID[2]     = SkillID;
                    info.SkillID[3]     = SkillID;
                    info.SkillID[4]     = SkillID;
                    info.SkillID[5]     = SkillID;
                    info.Instant        = 0;
                    info.P_M            = false;
                    break;

                    #endregion
                    #endregion
                    #endregion
                default:
                    //Set default for skills that havent been added
                    info.Targethits = info.NumberOfAttack;
                    info.Tdistance  = 0;
                    info.Instant    = 2;
                    info.P_M        = false;
                    info.canUse     = true;
                    //Write info if skill not added
                    Log.Exception("Skill System Not Found Number of attacks : " + info.NumberOfAttack + " Skillname: " + ObjData.Manager.SkillBase[SkillID].Series);
                    break;
                }
                //Return information
                return(info);
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
            return(info);
        }
示例#14
0
        public static byte[] GuildUpdate(WorldMgr.character c, byte type, int memberid, int permissions, int donatedgp)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_GUILD_UPDATE);
            switch (type)
            {
            case 1:
                //Invited user to guild
                Writer.Byte(2);
                Writer.DWord(c.Information.CharacterID);
                Writer.Text(c.Information.Name);
                Writer.Byte(0x0A);     //Check
                Writer.Byte(c.Information.Level);
                Writer.DWord(0);       //Permissions below
                Writer.DWord(0);
                Writer.DWord(0);
                Writer.DWord(0);
                Writer.DWord(0);
                Writer.Word(0);
                Writer.DWord(c.Information.Model);     //Character Model For Icon In Guild
                Writer.Byte(0);
                Writer.Byte(c.Position.xSec);
                Writer.Byte(c.Position.ySec);
                Writer.DWord(0);
                Writer.DWord(0);
                Writer.Byte(1);
                break;

            case 2:
                //Disband guild
                Writer.Byte(1);
                break;

            case 3:
                //Transfer Leadership
                Writer.Byte(0x16);
                Writer.Byte(2);
                Writer.Byte(0x54);
                Writer.DWord(memberid);
                Writer.Byte(0);
                Writer.DWord(0xFFFFFFFF);
                Writer.Byte(1);
                Writer.DWord(c.Information.CharacterID);
                Writer.Byte(0x0A);
                Writer.DWord(0);
                Writer.Byte(0);
                break;

            case 4:
                //Change permissions
                Writer.Byte(0x16);
                Writer.Byte(1);
                Writer.Byte(0x10);
                Writer.DWord(c.Information.CharacterID);
                Writer.DWord(permissions);
                break;

            case 5:
                //Guild upgrade
                Writer.Byte(5);
                Writer.Byte(0x0C);    //Members allowed? 12
                Writer.Byte(c.Network.Guild.Level);
                Writer.DWord(c.Network.Guild.PointsTotal);
                break;

            //Invite user online
            case 6:
                //Static byte 6
                Writer.Byte(6);
                //Write member id
                Writer.DWord(c.Information.CharacterID);
                //Static byte 2
                Writer.Byte(2);
                //Online byte (If online byte = 0, If offline byte = 1).
                Writer.Byte(Convert.ToBoolean(c.Information.Online) ? 0 : 1);
                break;

            case 7:
                //User online / offline
                Writer.Byte(3);
                Writer.DWord(c.Information.CharacterID);
                Writer.Byte(2);
                break;

            case 8:
                //Update player level
                Writer.Byte(6);
                Writer.DWord(c.Information.CharacterID);
                Writer.Byte(1);
                Writer.Byte(c.Information.Level);
                break;

            case 9:
                //Update gp information guild
                Writer.Byte(6);
                Writer.DWord(c.Information.CharacterID);
                Writer.Byte(8);
                Writer.DWord(c.Network.Guild.DonateGP);
                break;

            case 10:
                //Update user location
                Writer.Byte(6);
                Writer.DWord(c.Information.CharacterID);
                Writer.Byte(0x80);    //need to check
                Writer.Byte(c.Position.xSec);
                Writer.Byte(c.Position.ySec);
                break;

            case 11:
                //Guild message update
                Writer.Byte(0x05);
                Writer.Byte(0x10);
                Writer.Text(c.Network.Guild.NewsTitle);
                Writer.Text(c.Network.Guild.NewsMessage);
                break;

            case 12:
                //Leave guild
                Writer.Byte(3);
                Writer.DWord(c.Information.CharacterID);
                Writer.Byte(1);
                break;

            case 13:
                //Donated gp #1
                Writer.Byte(5);
                Writer.Byte(8);
                Writer.DWord(donatedgp);
                break;

            case 14:
                //Union invite send
                Writer.Byte(c.Network.Guild.TotalMembers);
                Writer.DWord(c.Network.Guild.Guildid);
                Writer.Text(c.Network.Guild.Name);
                Writer.Byte(c.Network.Guild.Level);
                Writer.Text(c.Information.Name);
                Writer.DWord(c.Information.Model);
                Writer.Byte(0x11);    //??
                break;
            }
            return(Writer.GetBytes());
        }
        public static byte[] SendFriendList(byte count, WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_SEND_FRIEND_LIST);
            //Groups
            DB  ms         = new DB("SELECT * FROM friends_groups WHERE playerid='" + c.Information.CharacterID + "'");
            int groupcount = ms.Count();

            groupcount = groupcount + 1;
            Writer.Byte((byte)groupcount);

            Writer.Word(0);
            Writer.Text("NonClassified");
            int groupid = 0;

            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    string groupname = reader.GetString(2);
                    groupid = groupid + 1;
                    Writer.Word((short)groupid);
                    Writer.Text(groupname);
                }
            }
            //Friends
            Writer.Byte(count);
            ms = new DB("SELECT * FROM friends WHERE owner='" + c.Information.CharacterID + "'");
            using (System.Data.SqlClient.SqlDataReader reader = ms.Read())
            {
                while (reader.Read())
                {
                    int    model     = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "chartype"));
                    int    status    = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "Online"));
                    int    charid    = Convert.ToInt32(DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "id"));
                    string charname  = DB.GetData("SELECT * FROM character WHERE id='" + reader.GetInt32(2) + "'", "name");
                    string groupname = reader.GetString(4);

                    Writer.DWord(charid);               // Friend CharID
                    Writer.Text(charname);              // Friend Name
                    Writer.DWord(model);                // Friend Model Type
                    if (groupname == "none")
                    {
                        Writer.Word(0);
                    }
                    else
                    {
                        Writer.Word(groupid);
                    }

                    if (status != 0)
                    {
                        Writer.Byte(0);                 // Friend is online
                    }
                    else
                    {
                        Writer.Byte(1);                 // Inverted, Friend is offline
                    }
                }
                reader.Close();
            }
            ms.Close();
            return(Writer.GetBytes());
        }
        public static byte[] CharacterDataLoad(WorldMgr.character c)
        {
            PacketWriter Writer = new PacketWriter();

            Writer.Create(OperationCode.SERVER_PLAYERDATA);
            /////////////////////////////////////////////////////// Character basic info
            #region Basic info
            Writer.DWord(c.Ids.GetLoginID);
            Writer.DWord(c.Information.Model);
            Writer.Byte(c.Information.Volume);
            Writer.Byte(c.Information.Level);
            Writer.Byte(c.Information.Level);
            Writer.LWord(c.Information.XP);
            Writer.DWord(c.Information.SpBar);
            Writer.LWord(c.Information.Gold);
            Writer.DWord(c.Information.SkillPoint);
            Writer.Word(c.Information.Attributes);
            Writer.Byte(c.Information.BerserkBar);
            Writer.DWord(988);
            Writer.DWord(c.Stat.SecondHp);
            Writer.DWord(c.Stat.SecondMP);
            Writer.Bool(c.Information.Level < 20 ? true : false);
            #endregion
            /////////////////////////////////////////////////////// Character Player Kill Info
            #region Pk information
            //DB perfection reading with multiple data adapters... while this one is open i can still read anything else from the database
            //With no speed reduction...
            DB checkpk = new DB("SELECT * FROM character WHERE name ='" + c.Information.Name + "'");
            using (System.Data.SqlClient.SqlDataReader getinfo = checkpk.Read())
            {
                while (getinfo.Read())
                {
                    byte dailypk     = getinfo.GetByte(48);
                    byte pklevel     = getinfo.GetByte(49);
                    byte murderlevel = getinfo.GetByte(50);

                    Writer.Byte(dailypk);
                    Writer.Word(pklevel);
                    Writer.DWord(murderlevel);
                    if (murderlevel != 0)
                    {
                        c.Information.Murderer = true;
                    }
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Character Title
            #region Title
            Writer.Byte(c.Information.Title);
            #endregion
            /////////////////////////////////////////////////////// Character Pvpstate
            #region Pvp
            Writer.Byte(c.Information.Pvpstate);
            if (c.Information.Pvpstate > 0)
            {
                c.Information.PvP = true;
            }
            #endregion
            /////////////////////////////////////////////////////// Character Items
            #region Item

            Writer.Byte(c.Information.Slots);

            DB ms = new DB("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='0' AND storagetype='0'");
            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader msreader = ms.Read())
            {
                while (msreader.Read())
                {
                    short amount = msreader.GetInt16(6);

                    if (amount < 1)
                    {
                        amount = 1;
                    }
                    DB.query("UPDATE char_items SET quantity='" + amount + "' WHERE owner='" + c.Information.CharacterID + "' AND itemid='" + msreader.GetInt32(2) + "' AND id='" + msreader.GetInt32(0) + "' AND storagetype='0'");

                    if (msreader.GetByte(5) == 6)
                    {
                        c.Information.Item.wID = Convert.ToInt32(msreader.GetInt32(2));
                    }
                    if (msreader.GetByte(5) == 7)
                    {
                        c.Information.Item.sID     = msreader.GetInt32(2);
                        c.Information.Item.sAmount = msreader.GetInt16(6);
                    }

                    Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), amount, msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30));
                }
            }
            ms.Close();

            //Avatar
            Writer.Byte(5);

            ms = new DB("SELECT * FROM char_items WHERE owner='" + c.Information.CharacterID + "' AND slot >= '0' AND slot <= '" + c.Information.Slots + "' AND inavatar='1' AND storagetype='0'");

            Writer.Byte(ms.Count());
            using (System.Data.SqlClient.SqlDataReader msreader = ms.Read())
            {
                while (msreader.Read())
                {
                    Item.AddItemPacket(Writer, msreader.GetByte(5), msreader.GetInt32(2), msreader.GetByte(4), msreader.GetInt16(6), msreader.GetInt32(7), msreader.GetInt32(0), msreader.GetInt32(9), msreader.GetInt32(30));
                }
            }
            ms.Close();

            Writer.Byte(0);

            // job mastery
            Writer.Byte(0x0B);
            Writer.Byte(0);
            Writer.Byte(0);

            #endregion
            ///////////////////////////////////////////////////////  Mastery
            #region Mastery
            if (c.Information.Model <= 12000)
            {
                for (byte i = 1; i <= 7; i++)
                {
                    Writer.Byte(1);
                    Writer.DWord(c.Stat.Skill.Mastery[i]);
                    Writer.Byte(c.Stat.Skill.Mastery_Level[i]);
                }
            }
            else
            {
                if (c.Information.Model >= 14000)
                {
                    for (byte i = 1; i < 7; i++)
                    {
                        Writer.Byte(1);
                        Writer.DWord(c.Stat.Skill.Mastery[i]);
                        Writer.Byte(c.Stat.Skill.Mastery_Level[i]);
                    }
                }
            }
            #endregion
            /////////////////////////////////////////////////////// Skills
            #region Skill
            Writer.Byte(2);
            Writer.Byte(0);
            for (int i = 1; i <= c.Stat.Skill.AmountSkill; i++)
            {
                Writer.Byte(1);
                Writer.DWord(c.Stat.Skill.Skill[i]);
                Writer.Byte(1);
            }
            Writer.Byte(2);
            #endregion
            /////////////////////////////////////////////////////// Quests
            #region Quest
            Writer.Word(1);  // how many Quest ids completed/aborted
            Writer.DWord(1); // Quest id
            Writer.Byte(0);  //number of Quests that are live
            #endregion
            Writer.Byte(0);  //? for now
            /////////////////////////////////////////////////////// Talisman
            #region Talisman
            Writer.DWord(1);    //new
            Writer.DWord(1);    //new
            Writer.DWord(0);    //? for now
            Writer.DWord(0x0C); //new
            #endregion
            /////////////////////////////////////////////////////// Position + id + speed
            #region Character id / Position / Speed
            Writer.DWord(c.Information.UniqueID);
            Writer.Byte(c.Position.xSec);
            Writer.Byte(c.Position.ySec);
            if (!FileDB.CheckCave(c.Position.xSec, c.Position.ySec))
            {
                Writer.Float(Formule.packetx(c.Position.x, c.Position.xSec));
                Writer.Float(c.Position.z);
                Writer.Float(Formule.packety(c.Position.y, c.Position.ySec));
            }
            else
            {
                Writer.Float(Formule.cavepacketx(c.Position.x)); // Added for cave Coords
                Writer.Float(c.Position.z);
                Writer.Float(Formule.cavepackety(c.Position.y)); // Added for cave Coords
            }
            Writer.Word(0);                                      // Angle
            Writer.Byte(0);
            Writer.Byte(1);
            Writer.Byte(0);
            Writer.Word(0);                                                     // Angle
            Writer.Word(0);
            Writer.Byte(0);
            Writer.Bool(false); //berserk

            Writer.Byte(0);     //new ?

            Writer.Float(c.Speed.WalkSpeed);
            Writer.Float(c.Speed.RunSpeed);
            Writer.Float(c.Speed.BerserkSpeed);
            #endregion
            /////////////////////////////////////////////////////// Premium Tickets
            #region Premium ticket
            Writer.Byte(0); //ITEM_MALL_GOLD_TIME_SERVICE_TICKET_4W
            #endregion
            /////////////////////////////////////////////////////// GM Check + Name
            #region GM Check + Name
            Writer.Text(c.Information.Name);
            #endregion
            /////////////////////////////////////////////////////// Character jobs
            #region Character Job / hunter thief trader ( old job things )
            //Writer info with job name when on job

            /*if (c.Job.state == 1 && c.Job.Jobname != "0")
             * {
             *  Writer.Text(c.Job.Jobname);
             *  Writer.Byte(3);
             *  Writer.Byte(1);
             *  Writer.DWord(0);
             *  Writer.DWord(0);
             *  Writer.DWord(0);
             *  Writer.Byte(0);
             *  Writer.Byte(0);
             *  Writer.Byte(0);
             * }
             * //Write basic info noname
             * if (c.Job.Jobname == "0")
             * {
             *  Writer.Word(0);
             *  Writer.Byte(3);
             *  Writer.Byte(1);
             *  Writer.DWord(0);
             *  Writer.DWord(0);
             *  Writer.DWord(0);
             *  Writer.Byte(0);
             *  Writer.Byte(0);
             *  Writer.Byte(0);
             * }
             * //Write no info
             * else
             * {
             *  Writer.Word(0);
             *  Writer.Byte(0);
             *  Writer.Byte(1);
             *  Writer.DWord(0);
             *  Writer.DWord(0);
             *  Writer.DWord(0);
             *  Writer.Byte(0);
             *  Writer.Byte(0);
             *  Writer.Byte(0);
             * }*/
            #endregion
            #region New job system
            if (c.Job.state == 1)
            {
                Writer.Text(c.Job.Jobname);
                Writer.Byte(1);
                Writer.Byte(c.Job.level);         //Level job
                Writer.Byte(c.Information.Level); //Level char
                Writer.Byte(1);                   // job level? myb
                Writer.LWord(0);                  // job exp probably y
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
            }
            else
            {
                Writer.Word(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(2);  // job type
                Writer.Byte(1);  // job level? myb
                Writer.LWord(0); // job exp probably y
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
                Writer.Byte(0);
            }

            #endregion
            /////////////////////////////////////////////////////// Pvp / Pk State
            #region Pvp / Pk State
            if (c.Information.Pvpstate == 1 || c.Information.Murderer)
            {
                Writer.Byte(0x22);
            }
            else if (c.Information.Pvpstate == 0 || !c.Information.Murderer)
            {
                Writer.Byte(0xFF);
            }
            #endregion
            /////////////////////////////////////////////////////// Guide Data
            #region Guide Data this data stacks on itself so if guide id is 0400000000000000 and next guide is 0300000000000000 the data to send is 0700000000000000

            for (int i = 0; i < 8; ++i)         //Main Guide Packet Info
            {
                Writer.Byte(c.Guideinfo.G1[i]); //Reads From Int Array
            }
            #endregion
            /////////////////////////////////////////////////////// Account / Gm Check
            #region Account ID + Gm Check
            Writer.DWord(c.Account.ID);
            Writer.Byte(c.Information.GM);
            #endregion
            /////////////////////////////////////////////////////// Quickbar + Autopotion
            #region Bar information
            Writer.Byte(7);
            PlayerQuickBar(Writer, c.Information.CharacterID);
            PlayerAutoPot(Writer, c.Information.CharacterID);
            #endregion
            /////////////////////////////////////////////////////// Academy
            #region Academy
            Writer.Byte(0); // number of player in academy

            /* // if we have players there
             * Writer.Byte(1);
             * Writer.Text("asd");
             */
            Writer.Byte(0);//added byte today for 1.310
            Writer.Byte(0);
            Writer.Word(1);
            Writer.Word(1);
            Writer.Byte(0);
            Writer.Byte(1);
            #endregion
            return(Writer.GetBytes());
        }