Fixes dupe exception (#258)

- [X] Cleans up ActivatorUtil
- [X] Fixes dupe exception
- [X] Fixes a bug in BasePotion
- [X] Fixes a few possible memory leaks

Bumps release version
This commit is contained in:
Kamron Batman 2020-09-19 15:46:07 -07:00 • committed by GitHub
parent 4d6e584b6c
commit e9c1e4cbba
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
66 changed files with 597 additions and 496 deletions

View file

@ -842,7 +842,7 @@ namespace Server.Items
try
{
item = ActivatorUtil.CreateInstance(m_Decorations[random]) as Item;
item = m_Decorations[random].CreateInstance<Item>();
}
catch
{

View file

@ -594,7 +594,7 @@ namespace Server.Items
{
try
{
var res = (Item)ActivatorUtil.CreateInstance(CraftResources.GetInfo(m_Resource).ResourceTypes[0]);
var res = CraftResources.GetInfo(m_Resource).ResourceTypes[0].CreateInstance<Item>();
ScissorHelper(from, res, PlayerConstructed ? item.Resources[0].Amount / 2 : 1);
return true;

View file

@ -237,7 +237,7 @@ namespace Server.Items
var resourceType = info.ResourceTypes?[0] ?? item.Resources[0].ItemType;
var res = (Item)ActivatorUtil.CreateInstance(resourceType);
var res = resourceType.CreateInstance<Item>();
ScissorHelper(from, res, PlayerConstructed ? item.Resources[0].Amount / 2 : 1);

View file

@ -88,8 +88,7 @@ namespace Server.Items
_ => 0.0
};
var resourceType = info.ResourceTypes[0];
var ingot = (Item)ActivatorUtil.CreateInstance(resourceType);
var ingot = info.ResourceTypes[0].CreateInstance<Item>();
if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed ||
item is BaseWeapon weapon && weapon.PlayerConstructed ||

View file

@ -304,7 +304,7 @@ namespace Server.Items
if (level == 6 && Core.AOS)
{
cont.DropItem((Item)ActivatorUtil.CreateInstance(Artifacts.RandomElement()));
cont.DropItem(Artifacts.RandomElement().CreateInstance<Item>());
}
}

View file

@ -346,7 +346,7 @@ namespace Server.Items
public Item CreateInstance()
{
var item = (Item)ActivatorUtil.CreateInstance(Type);
var item = Type.CreateInstance<Item>();
if (Hue > 0)
{

View file

@ -245,7 +245,7 @@ namespace Server.Items
try
{
bc = (BaseCreature)ActivatorUtil.CreateInstance(m_SpawnTypes[level].RandomElement());
bc = m_SpawnTypes[level].RandomElement().CreateInstance<BaseCreature>();
}
catch
{

View file

@ -174,8 +174,7 @@ namespace Server.Items
if (NextSpawn < DateTime.UtcNow)
{
var map = Map;
var bc =
(BaseCreature)ActivatorUtil.CreateInstance(Creatures.RandomElement());
var bc = Creatures.RandomElement().CreateInstance<BaseCreature>();
var spawnLoc = GetSpawnPosition();

View file

@ -72,8 +72,14 @@ namespace Server.Items
bool ICommodity.IsDeedable => Core.ML;
public int OnCraft(
int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, BaseTool tool,
CraftItem craftItem, int resHue
int quality,
bool makersMark,
Mobile from,
CraftSystem craftSystem,
Type typeRes,
BaseTool tool,
CraftItem craftItem,
int resHue
)
{
if (craftSystem is DefAlchemy)
@ -151,11 +157,11 @@ namespace Server.Items
{
if (this is BaseExplosionPotion && Amount > 1)
{
var pot = (BasePotion)ActivatorUtil.CreateInstance(GetType());
var pot = GetType().CreateInstance<BaseExplosionPotion>();
Amount--;
if (from.Backpack?.Deleted != false)
if (from.Backpack?.Deleted == false)
{
from.Backpack.DropItem(pot);
}

View file

@ -90,7 +90,7 @@ namespace Server.Items
{
if (weapon.UsesRemaining > 0)
{
var ammo = ActivatorUtil.CreateInstance(weapon.AmmoType, weapon.UsesRemaining) as Item;
var ammo = weapon.AmmoType.CreateInstance<Item>(weapon.UsesRemaining);
if (ammo is INinjaAmmo ninaAmmo)
{

View file

@ -451,18 +451,18 @@ namespace Server.Items
if (type != null)
{
object obj;
IEntity entity;
try
{
obj = ActivatorUtil.CreateInstance(type);
entity = type.CreateInstance<IEntity>();
}
catch
{
obj = null;
entity = null;
}
if (obj is Item item)
if (entity is Item item)
{
var count = 1;
@ -492,7 +492,7 @@ namespace Server.Items
if (i + 1 < count)
{
item = ActivatorUtil.CreateInstance(type) as Item;
item = type.CreateInstance<Item>();
}
}
@ -513,7 +513,7 @@ namespace Server.Items
from.SendLocalizedMessage(1074853, m_Summoner.Name.ToString()); // You have been given ~1_name~
}
}
else if (obj is BaseCreature mob)
else if (entity is BaseCreature mob)
{
if (m_Creature?.Deleted == false || from.Followers + mob.ControlSlots > from.FollowersMax)
{
@ -536,6 +536,10 @@ namespace Server.Items
m_Creature = mob;
}
else
{
entity?.Delete();
}
OnAfterUse(from);
}