Formatting FIxes (#58)
This commit is contained in:
parent
57fb9fb525
commit
096d39609e
1318 changed files with 11633 additions and 22129 deletions
|
|
@ -3,10 +3,7 @@ namespace Server.Items
|
|||
public class BookOfBushido : Spellbook
|
||||
{
|
||||
[Constructible]
|
||||
public BookOfBushido(ulong content = 0x3F) : base(content, 0x238C)
|
||||
{
|
||||
Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
}
|
||||
public BookOfBushido(ulong content = 0x3F) : base(content, 0x238C) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
|
||||
public BookOfBushido(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,10 +3,7 @@ namespace Server.Items
|
|||
public class BookOfChivalry : Spellbook
|
||||
{
|
||||
[Constructible]
|
||||
public BookOfChivalry(ulong content = 0x3FF) : base(content, 0x2252)
|
||||
{
|
||||
Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
}
|
||||
public BookOfChivalry(ulong content = 0x3FF) : base(content, 0x2252) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
|
||||
public BookOfChivalry(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,10 +3,7 @@ namespace Server.Items
|
|||
public class BookOfNinjitsu : Spellbook
|
||||
{
|
||||
[Constructible]
|
||||
public BookOfNinjitsu(ulong content = 0xFF) : base(content, 0x23A0)
|
||||
{
|
||||
Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
}
|
||||
public BookOfNinjitsu(ulong content = 0xFF) : base(content, 0x23A0) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
|
||||
public BookOfNinjitsu(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -196,10 +196,7 @@ namespace Server.Items
|
|||
from.SendMessage("This moongate does not seem to go anywhere.");
|
||||
}
|
||||
|
||||
public static bool IsInTown(Point3D p, Map map)
|
||||
{
|
||||
return map != null && Region.Find(p, map).GetRegion<GuardedRegion>()?.IsDisabled() == false;
|
||||
}
|
||||
public static bool IsInTown(Point3D p, Map map) => map != null && Region.Find(p, map).GetRegion<GuardedRegion>()?.IsDisabled() == false;
|
||||
|
||||
private class DelayTimer : Timer
|
||||
{
|
||||
|
|
|
|||
|
|
@ -290,10 +290,7 @@ namespace Server.Items
|
|||
{
|
||||
private RecallRune m_Rune;
|
||||
|
||||
public RenamePrompt(RecallRune rune)
|
||||
{
|
||||
m_Rune = rune;
|
||||
}
|
||||
public RenamePrompt(RecallRune rune) => m_Rune = rune;
|
||||
|
||||
public override void OnResponse(Mobile from, string text)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,37 +1,35 @@
|
|||
namespace Server.Items
|
||||
{
|
||||
public class MysticSpellbook : Spellbook
|
||||
{
|
||||
[Constructible]
|
||||
public MysticSpellbook(ulong content = 0)
|
||||
: base(content, 0x2D9D)
|
||||
{
|
||||
Layer = Layer.OneHanded;
|
||||
}
|
||||
|
||||
public MysticSpellbook(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override SpellbookType SpellbookType => SpellbookType.Mystic;
|
||||
|
||||
public override int BookOffset => 677;
|
||||
public override int BookCount => 16;
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
/*int version = */
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
namespace Server.Items
|
||||
{
|
||||
public class MysticSpellbook : Spellbook
|
||||
{
|
||||
[Constructible]
|
||||
public MysticSpellbook(ulong content = 0)
|
||||
: base(content, 0x2D9D) =>
|
||||
Layer = Layer.OneHanded;
|
||||
|
||||
public MysticSpellbook(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override SpellbookType SpellbookType => SpellbookType.Mystic;
|
||||
|
||||
public override int BookOffset => 677;
|
||||
public override int BookCount => 16;
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
/*int version = */
|
||||
reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,10 +3,7 @@ namespace Server.Items
|
|||
public class NecromancerSpellbook : Spellbook
|
||||
{
|
||||
[Constructible]
|
||||
public NecromancerSpellbook(ulong content = 0) : base(content, 0x2253)
|
||||
{
|
||||
Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
}
|
||||
public NecromancerSpellbook(ulong content = 0) : base(content, 0x2253) => Layer = Core.ML ? Layer.OneHanded : Layer.Invalid;
|
||||
|
||||
public NecromancerSpellbook(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -254,10 +254,8 @@ namespace Server.Items
|
|||
return AOS.Scale(v, 100 + EnhancePotions(m));
|
||||
}
|
||||
|
||||
public override bool StackWith(Mobile from, Item dropped, bool playSound)
|
||||
{
|
||||
return dropped is BasePotion potion && potion.m_PotionEffect == m_PotionEffect &&
|
||||
base.StackWith(from, potion, playSound);
|
||||
}
|
||||
public override bool StackWith(Mobile from, Item dropped, bool playSound) =>
|
||||
dropped is BasePotion potion && potion.m_PotionEffect == m_PotionEffect &&
|
||||
base.StackWith(from, potion, playSound);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,10 +9,7 @@ namespace Server.Items
|
|||
{
|
||||
private List<Mobile> m_Users = new List<Mobile>();
|
||||
|
||||
public BaseConflagrationPotion(PotionEffect effect) : base(0xF06, effect)
|
||||
{
|
||||
Hue = 0x489;
|
||||
}
|
||||
public BaseConflagrationPotion(PotionEffect effect) : base(0xF06, effect) => Hue = 0x489;
|
||||
|
||||
public BaseConflagrationPotion(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
@ -92,10 +89,7 @@ namespace Server.Items
|
|||
|
||||
private class ThrowTarget : Target
|
||||
{
|
||||
public ThrowTarget(BaseConflagrationPotion potion) : base(12, true, TargetFlags.None)
|
||||
{
|
||||
Potion = potion;
|
||||
}
|
||||
public ThrowTarget(BaseConflagrationPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
|
||||
|
||||
public BaseConflagrationPotion Potion{ get; }
|
||||
|
||||
|
|
@ -164,10 +158,7 @@ namespace Server.Items
|
|||
m_Timer?.Stop();
|
||||
}
|
||||
|
||||
public int GetDamage()
|
||||
{
|
||||
return Utility.RandomMinMax(m_MinDamage, m_MaxDamage);
|
||||
}
|
||||
public int GetDamage() => Utility.RandomMinMax(m_MinDamage, m_MaxDamage);
|
||||
|
||||
private void SetDamage(int min, int max)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -11,10 +11,7 @@ namespace Server.Items
|
|||
{
|
||||
private List<Mobile> m_Users = new List<Mobile>();
|
||||
|
||||
public BaseConfusionBlastPotion(PotionEffect effect) : base(0xF06, effect)
|
||||
{
|
||||
Hue = 0x48D;
|
||||
}
|
||||
public BaseConfusionBlastPotion(PotionEffect effect) : base(0xF06, effect) => Hue = 0x48D;
|
||||
|
||||
public BaseConfusionBlastPotion(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
@ -97,10 +94,7 @@ namespace Server.Items
|
|||
|
||||
private class ThrowTarget : Target
|
||||
{
|
||||
public ThrowTarget(BaseConfusionBlastPotion potion) : base(12, true, TargetFlags.None)
|
||||
{
|
||||
Potion = potion;
|
||||
}
|
||||
public ThrowTarget(BaseConfusionBlastPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
|
||||
|
||||
public BaseConfusionBlastPotion Potion{ get; }
|
||||
|
||||
|
|
|
|||
|
|
@ -3,10 +3,7 @@ namespace Server.Items
|
|||
public class DarkglowPotion : BasePoisonPotion
|
||||
{
|
||||
[Constructible]
|
||||
public DarkglowPotion() : base(PotionEffect.Darkglow)
|
||||
{
|
||||
Hue = 0x96;
|
||||
}
|
||||
public DarkglowPotion() : base(PotionEffect.Darkglow) => Hue = 0x96;
|
||||
|
||||
public DarkglowPotion(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -221,10 +221,7 @@ namespace Server.Items
|
|||
|
||||
private class ThrowTarget : Target
|
||||
{
|
||||
public ThrowTarget(BaseExplosionPotion potion) : base(12, true, TargetFlags.None)
|
||||
{
|
||||
Potion = potion;
|
||||
}
|
||||
public ThrowTarget(BaseExplosionPotion potion) : base(12, true, TargetFlags.None) => Potion = potion;
|
||||
|
||||
public BaseExplosionPotion Potion{ get; }
|
||||
|
||||
|
|
|
|||
|
|
@ -8,10 +8,7 @@ namespace Server.Items
|
|||
private static Dictionary<Mobile, Timer> m_Table = new Dictionary<Mobile, Timer>();
|
||||
|
||||
[Constructible]
|
||||
public InvisibilityPotion() : base(0xF0A, PotionEffect.Invisibility)
|
||||
{
|
||||
Hue = 0x48D;
|
||||
}
|
||||
public InvisibilityPotion() : base(0xF0A, PotionEffect.Invisibility) => Hue = 0x48D;
|
||||
|
||||
public InvisibilityPotion(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
@ -60,10 +57,7 @@ namespace Server.Items
|
|||
RemoveTimer(m);
|
||||
}
|
||||
|
||||
public static bool HasTimer(Mobile m)
|
||||
{
|
||||
return m_Table.ContainsKey(m);
|
||||
}
|
||||
public static bool HasTimer(Mobile m) => m_Table.ContainsKey(m);
|
||||
|
||||
public static void RemoveTimer(Mobile m, bool interrupted = false)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -3,10 +3,7 @@ namespace Server.Items
|
|||
public class ParasiticPotion : BasePoisonPotion
|
||||
{
|
||||
[Constructible]
|
||||
public ParasiticPotion() : base(PotionEffect.Parasitic)
|
||||
{
|
||||
Hue = 0x17C;
|
||||
}
|
||||
public ParasiticPotion() : base(PotionEffect.Parasitic) => Hue = 0x17C;
|
||||
|
||||
public ParasiticPotion(Serial serial) : base(serial)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -139,10 +139,7 @@ namespace Server.Items
|
|||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public SecureLevel Level{ get; set; }
|
||||
|
||||
public override bool AllowEquippedCast(Mobile from)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public override bool AllowEquippedCast(Mobile from) => true;
|
||||
|
||||
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -4,10 +4,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public ArcaneCircleScroll(int amount = 1)
|
||||
: base(600, 0x2D51, amount)
|
||||
{
|
||||
: base(600, 0x2D51, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public ArcaneCircleScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -33,10 +31,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public GiftOfRenewalScroll(int amount = 1)
|
||||
: base(601, 0x2D52, amount)
|
||||
{
|
||||
: base(601, 0x2D52, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public GiftOfRenewalScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -62,10 +58,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public ImmolatingWeaponScroll(int amount = 1)
|
||||
: base(602, 0x2D53, amount)
|
||||
{
|
||||
: base(602, 0x2D53, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public ImmolatingWeaponScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -91,10 +85,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public AttuneWeaponScroll(int amount = 1)
|
||||
: base(603, 0x2D54, amount)
|
||||
{
|
||||
: base(603, 0x2D54, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public AttuneWeaponScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -120,10 +112,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public ThunderstormScroll(int amount = 1)
|
||||
: base(604, 0x2D55, amount)
|
||||
{
|
||||
: base(604, 0x2D55, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public ThunderstormScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -149,10 +139,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public NatureFuryScroll(int amount = 1)
|
||||
: base(605, 0x2D56, amount)
|
||||
{
|
||||
: base(605, 0x2D56, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public NatureFuryScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -178,10 +166,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public SummonFeyScroll(int amount = 1)
|
||||
: base(606, 0x2D57, amount)
|
||||
{
|
||||
: base(606, 0x2D57, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public SummonFeyScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -207,10 +193,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public SummonFiendScroll(int amount = 1)
|
||||
: base(607, 0x2D58, amount)
|
||||
{
|
||||
: base(607, 0x2D58, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public SummonFiendScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -236,10 +220,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public ReaperFormScroll(int amount = 1)
|
||||
: base(608, 0x2D59, amount)
|
||||
{
|
||||
: base(608, 0x2D59, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public ReaperFormScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -265,10 +247,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public WildfireScroll(int amount = 1)
|
||||
: base(609, 0x2D5A, amount)
|
||||
{
|
||||
: base(609, 0x2D5A, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public WildfireScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -294,10 +274,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public EssenceOfWindScroll(int amount = 1)
|
||||
: base(610, 0x2D5B, amount)
|
||||
{
|
||||
: base(610, 0x2D5B, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public EssenceOfWindScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -323,10 +301,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public DryadAllureScroll(int amount = 1)
|
||||
: base(611, 0x2D5C, amount)
|
||||
{
|
||||
: base(611, 0x2D5C, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public DryadAllureScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -352,10 +328,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public EtherealVoyageScroll(int amount = 1)
|
||||
: base(612, 0x2D5D, amount)
|
||||
{
|
||||
: base(612, 0x2D5D, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public EtherealVoyageScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -381,10 +355,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public WordOfDeathScroll(int amount = 1)
|
||||
: base(613, 0x2D5E, amount)
|
||||
{
|
||||
: base(613, 0x2D5E, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public WordOfDeathScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -410,10 +382,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public GiftOfLifeScroll(int amount = 1)
|
||||
: base(614, 0x2D5F, amount)
|
||||
{
|
||||
: base(614, 0x2D5F, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public GiftOfLifeScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
@ -439,10 +409,8 @@ namespace Server.Items
|
|||
{
|
||||
[Constructible]
|
||||
public ArcaneEmpowermentScroll(int amount = 1)
|
||||
: base(615, 0x2D60, amount)
|
||||
{
|
||||
: base(615, 0x2D60, amount) =>
|
||||
Hue = 0x8FD;
|
||||
}
|
||||
|
||||
public ArcaneEmpowermentScroll(Serial serial)
|
||||
: base(serial)
|
||||
|
|
|
|||
|
|
@ -374,45 +374,21 @@ namespace Server.Items
|
|||
return SpellbookType.Invalid;
|
||||
}
|
||||
|
||||
public static Spellbook FindRegular(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Regular);
|
||||
}
|
||||
public static Spellbook FindRegular(Mobile from) => Find(from, -1, SpellbookType.Regular);
|
||||
|
||||
public static Spellbook FindNecromancer(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Necromancer);
|
||||
}
|
||||
public static Spellbook FindNecromancer(Mobile from) => Find(from, -1, SpellbookType.Necromancer);
|
||||
|
||||
public static Spellbook FindPaladin(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Paladin);
|
||||
}
|
||||
public static Spellbook FindPaladin(Mobile from) => Find(from, -1, SpellbookType.Paladin);
|
||||
|
||||
public static Spellbook FindSamurai(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Samurai);
|
||||
}
|
||||
public static Spellbook FindSamurai(Mobile from) => Find(from, -1, SpellbookType.Samurai);
|
||||
|
||||
public static Spellbook FindNinja(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Ninja);
|
||||
}
|
||||
public static Spellbook FindNinja(Mobile from) => Find(from, -1, SpellbookType.Ninja);
|
||||
|
||||
public static Spellbook FindArcanist(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Arcanist);
|
||||
}
|
||||
public static Spellbook FindArcanist(Mobile from) => Find(from, -1, SpellbookType.Arcanist);
|
||||
|
||||
public static Spellbook FindMystic(Mobile from)
|
||||
{
|
||||
return Find(from, -1, SpellbookType.Mystic);
|
||||
}
|
||||
public static Spellbook FindMystic(Mobile from) => Find(from, -1, SpellbookType.Mystic);
|
||||
|
||||
public static Spellbook Find(Mobile from, int spellID)
|
||||
{
|
||||
return Find(from, spellID, GetTypeForSpell(spellID));
|
||||
}
|
||||
public static Spellbook Find(Mobile from, int spellID) => Find(from, spellID, GetTypeForSpell(spellID));
|
||||
|
||||
public static Spellbook Find(Mobile from, int spellID, SpellbookType type)
|
||||
{
|
||||
|
|
@ -485,15 +461,9 @@ namespace Server.Items
|
|||
return list;
|
||||
}
|
||||
|
||||
public static Spellbook FindEquippedSpellbook(Mobile from)
|
||||
{
|
||||
return from.FindItemOnLayer(Layer.OneHanded) as Spellbook;
|
||||
}
|
||||
public static Spellbook FindEquippedSpellbook(Mobile from) => from.FindItemOnLayer(Layer.OneHanded) as Spellbook;
|
||||
|
||||
public static bool ValidateSpellbook(Spellbook book, int spellID, SpellbookType type)
|
||||
{
|
||||
return book.SpellbookType == type && (spellID == -1 || book.HasSpell(spellID));
|
||||
}
|
||||
public static bool ValidateSpellbook(Spellbook book, int spellID, SpellbookType type) => book.SpellbookType == type && (spellID == -1 || book.HasSpell(spellID));
|
||||
|
||||
public override bool AllowSecureTrade(Mobile from, Mobile to, Mobile newOwner, bool accepted)
|
||||
{
|
||||
|
|
@ -512,10 +482,7 @@ namespace Server.Items
|
|||
return base.CanEquip(from);
|
||||
}
|
||||
|
||||
public override bool AllowEquippedCast(Mobile from)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
public override bool AllowEquippedCast(Mobile from) => true;
|
||||
|
||||
public override bool OnDragDrop(Mobile from, Item dropped)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue