public override MagicWeapon Create(ItemQuality quality)
        {
            //1. Roll pour avoir l'alteration
            AbstractWeaponTableLine secondRoll;

            do
            {
                int alteration = MagicItemCreation.Instance.Dices.d100();

                secondRoll = WeaponCreation.WeaponsTable.GetLineFromDice(alteration, quality);
            } while (secondRoll.GetType() != typeof(WeaponTableLine)); //On reroll tant qu'on a pas trouvé une ligne qu'on peut utiliser en tant que deuxième roll (si Create existe c'est un cas spécial et donc on ne peut pas l'utiliser)

            MagicWeapon baseWeapon = new MagicWeapon(quality);

            //On ne devrait pas avoir de cas speciaux au deuxieme roll
            baseWeapon.AlterationBonus = secondRoll.AlterationBonus;
            baseWeapon.Type            = ItemType.Weapon;
            baseWeapon.Range           = MagicItemCreation.Instance.ChosenRange;

            //2. Ajout de capa speciale
            //Roll sur la table des capa melee
            if (MagicItemCreation.Instance.ChosenRange == Range.Melee)
            {
                int capa = MagicItemCreation.Instance.Dices.d100();

                WeaponSpecialAbilitiesTableLine ligne = MeleeWeaponSpecialAbilitiesTable.GetLineFromDice(capa, quality);

                if (ligne.Modify != null) //Cas speciaux on appelle la fonction pour modifier
                {
                    ligne.Modify(baseWeapon);
                }
                else //Sinon on modifie a la main
                {
                    baseWeapon.Abilities = new List <String> {
                        ligne.Name
                    };
                    baseWeapon.BasePriceModifier = ligne.BaseAlterationModifier;
                }
            }
            else //Roll sur la table des capa distance
            {
                int capa = MagicItemCreation.Instance.Dices.d100();

                WeaponSpecialAbilitiesTableLine ligne = RangedWeaponSpecialAbilitiesTable.GetLineFromDice(capa, quality);

                if (ligne.Modify != null) //Cas speciaux on appelle la fonction pour modifier
                {
                    ligne.Modify(baseWeapon);
                }
                else //Sinon on modifie a la main
                {
                    baseWeapon.Abilities = new List <String> {
                        ligne.Name
                    };
                    baseWeapon.BasePriceModifier = ligne.BaseAlterationModifier;
                }
            }

            //3. On trouve le prix
            baseWeapon.Price = WeaponCreation.WeaponsTable.GetLineFromAlterationBonus(baseWeapon.AlterationBonus + baseWeapon.BasePriceModifier).Price;

            return(baseWeapon);
        }