void ActionAttack()
        {
            try
            {
                //Predefined info needs work!
                #region Predefined info
                byte NumberAttack = 2;
                int AttackType = 1;
                int[] found = new int[3];
                byte numbert = 1;
                int p_dmg = 0;
                byte status = 0, crit = 1;
                #endregion
                client.Send(Packet.ActionState(1, 1));
                //Bow information
                if (CheckBow())
                {
                    StopSkillTimer();
                    StopAttackTimer();
                    return;
                }

                WorldMgr.targetObject target = new WorldMgr.targetObject(Character.Action.Object, this);

                if (Character.Action.ImbueID != 0 && ObjData.Manager.SkillBase[Character.Action.ImbueID].Series.Remove(ObjData.Manager.SkillBase[Character.Action.ImbueID].Series.Length - 2) == "SKILL_CH_LIGHTNING_GIGONGTA")
                {
                    numbert = ActionGetObject(ref found, 2, target.x, target.y, Character.Action.Target, 5);
                }
                else found[1] = Character.Action.Target;

                if (Character.Information.Item.wID != 0)
                {
                    switch (ObjData.Manager.ItemBase[Character.Information.Item.wID].TypeID4)
                    {
                        //Chinese base skills
                        case 2:                 //One handed sword
                        case 3:
                            NumberAttack = 2;
                            AttackType = 2;
                            break;
                        case 4:                 //Spear attack + glavie
                        case 5:
                            NumberAttack = 1;
                            AttackType = 40;
                            break;
                        case 6:                 //Bow attack
                            NumberAttack = 1;
                            AttackType = 70;
                            break;
                        //Europe Base skills
                        case 7:
                            NumberAttack = 1;
                            AttackType = 7127; // One handed sword
                            break;
                        case 8:
                            NumberAttack = 1;
                            AttackType = 7128; // Two handed sword
                            break;
                        case 9:
                            NumberAttack = 2;
                            AttackType = 7129; // Axe basic attack
                            break;
                        case 10:
                            NumberAttack = 1;
                            AttackType = 9069; // Warlock base
                            break;
                        case 11:
                            NumberAttack = 1;
                            AttackType = 8454; // Staff / Tstaff
                            break;
                        case 12:
                            NumberAttack = 1;
                            AttackType = 7909; // Crossbow base
                            break;
                        case 13:
                            NumberAttack = 2; //Dagger
                            AttackType = 7910;
                            break;
                        case 14:
                            NumberAttack = 1;
                            AttackType = 9606; // Harp base
                            break;
                        case 15:
                            NumberAttack = 1;
                            AttackType = 9970; // Light staff cleric
                            break;
                        case 16:
                            NumberAttack = 1;
                            AttackType = ObjData.Manager.SkillBase[Character.Action.UsingSkillID].ID;
                            break;
                        default:
                            Console.WriteLine("Action attack case: {0} , SkillID = {1}" + ObjData.Manager.ItemBase[Character.Information.Item.wID].TypeID4, ObjData.Manager.SkillBase[Character.Action.UsingSkillID].ID);
                            break;
                    }
                }
                else
                {
                    //Punch attack
                    NumberAttack = 1;
                    AttackType = 1;
                }
                //Get casting id
                Character.Action.AttackingID = Character.Ids.GetCastingID();
                //Create new packet writer
                PacketWriter Writer = new PacketWriter();
                Writer.Create(OperationCode.SERVER_ACTION_DATA);
                Writer.Byte(1);
                Writer.Byte(2);
                Writer.Byte(0x30);
                Writer.DWord(AttackType);
                Writer.DWord(Character.Information.UniqueID);
                Writer.DWord(Character.Action.AttackingID);
                Writer.DWord(Character.Action.Target);
                Writer.Bool(true);
                Writer.Byte(NumberAttack);
                Writer.Byte(numbert);

                for (int t = 1; t <= numbert; t++)
                {
                    Writer.DWord(found[t]);

                    for (byte n = 1; n <= NumberAttack; n++)
                    {
                        //Set defaults
                        p_dmg = (int)Formule.gamedamage(Character.Stat.MaxPhyAttack, Character.Stat.AttackPower + MasteryGetPower(AttackType), 0, (double)target.PhyDef, Character.Information.Phy_Balance, Character.Stat.UpdatededPhyAttack);
                        status = 0;
                        crit = 0;
                        //Set target
                        target = new WorldMgr.targetObject(Helpers.GetInformation.GetObjects(found[t]), this);

                        //Make sure we dont get null error
                        if (Character.Action.UsingSkillID != 0)
                        {
                            //If we have an active imbue
                            if (ObjData.Manager.SkillBase[Character.Action.UsingSkillID].Definedname == ObjData.s_data.Definedtype.Imbue)
                            {
                                p_dmg += ObjData.Manager.SkillBase[Character.Action.UsingSkillID].MaxAttack;
                                p_dmg += Rnd.Next(0, p_dmg.ToString().Length);
                            }
                        }
                        if (status != 128)
                        {
                            status = target.HP((int)p_dmg);
                        }
                        else
                        {
                            target.GetDead();
                            Character.Action.nAttack = false;
                        }
                        Writer.Byte(status);
                        Writer.Byte(crit);
                        Writer.DWord(p_dmg);
                        Writer.Byte(0);
                        Writer.Word(0);

                        p_dmg = 0;
                    }
                }

                Send(Writer.GetBytes());
                client.Send(Packet.ActionState(2, 0));
            }
            catch (Exception ex)
            {
                Log.Exception(ex);
            }
        }