fixes [decorate and adds timestamp to world save (#87)

This commit is contained in:
Andrew Fryer 2020-02-19 20:37:12 -05:00 • committed by GitHub
parent d7f0227268
commit 717e192cf7
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
65 changed files with 261 additions and 118 deletions

View file

@ -1,11 +1,10 @@
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16 # Visual Studio Version 16
VisualStudioVersion = 16.0.29102.190 VisualStudioVersion = 16.0.29102.190
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Server", "Projects\Server\Server.csproj", "{5E93BB35-3661-4822-9A8A-859726BAD87F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Server", "Projects\Server\Server.csproj", "{5E93BB35-3661-4822-9A8A-859726BAD87F}"
EndProject EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Scripts", "Projects\Scripts\Scripts.csproj", "{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}" Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Scripts", "Projects\Scripts\Scripts.csproj", "{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -13,12 +12,12 @@ Global
Release|Any CPU = Release|Any CPU Release|Any CPU = Release|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5E93BB35-3661-4822-9A8A-859726BAD87F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {5E93BB35-3661-4822-9A8A-859726BAD87F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5E93BB35-3661-4822-9A8A-859726BAD87F}.Debug|Any CPU.Build.0 = Release|Any CPU {5E93BB35-3661-4822-9A8A-859726BAD87F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5E93BB35-3661-4822-9A8A-859726BAD87F}.Release|Any CPU.ActiveCfg = Release|Any CPU {5E93BB35-3661-4822-9A8A-859726BAD87F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5E93BB35-3661-4822-9A8A-859726BAD87F}.Release|Any CPU.Build.0 = Release|Any CPU {5E93BB35-3661-4822-9A8A-859726BAD87F}.Release|Any CPU.Build.0 = Release|Any CPU
{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Debug|Any CPU.ActiveCfg = Release|Any CPU {83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Debug|Any CPU.Build.0 = Release|Any CPU {83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Release|Any CPU.ActiveCfg = Release|Any CPU {83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Release|Any CPU.Build.0 = Release|Any CPU {83CF2484-BCCB-4B7C-9C5F-7AB43AEA5E8F}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection

View file

@ -1,11 +1,14 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection;
using Server.Engines.Quests.Haven; using Server.Engines.Quests.Haven;
using Server.Engines.Quests.Necro; using Server.Engines.Quests.Necro;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Commands namespace Server.Commands
{ {
@ -339,9 +342,9 @@ namespace Server.Commands
} }
if (fill) if (fill)
item = (Item)Activator.CreateInstance(m_Type, content); item = (Item)ActivatorUtil.CreateInstance(m_Type, content);
else else
item = (Item)Activator.CreateInstance(m_Type); item = (Item)ActivatorUtil.CreateInstance(m_Type);
} }
else if (m_Type.IsSubclassOf(typeofBaseDoor)) else if (m_Type.IsSubclassOf(typeofBaseDoor))
{ {
@ -359,16 +362,16 @@ namespace Server.Commands
} }
} }
item = (Item)Activator.CreateInstance(m_Type, facing); item = (Item)ActivatorUtil.CreateInstance(m_Type, facing);
} }
else else
{ {
item = (Item)Activator.CreateInstance(m_Type); item = (Item)ActivatorUtil.CreateInstance(m_Type);
} }
} }
catch (Exception e) catch (Exception e)
{ {
throw new Exception($"Bad type: {m_Type}", e); throw new TypeInitializationException(m_Type.ToString(), e);
} }
if (item is BaseAddon addon) if (item is BaseAddon addon)
@ -931,7 +934,16 @@ namespace Server.Commands
for (int j = 0; j < maps.Length; ++j) for (int j = 0; j < maps.Length; ++j)
{ {
item ??= Construct();
try
{
item ??= Construct();
}
catch(TypeInitializationException e)
{
Console.WriteLine($"{nameof(Generate)}() failed to load type: {e.TypeName}: {e.InnerException.Message}");
continue;
}
if (item == null) if (item == null)
continue; continue;

View file

@ -7,6 +7,7 @@ using Server.Engines.Quests.Haven;
using Server.Engines.Quests.Necro; using Server.Engines.Quests.Necro;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Commands namespace Server.Commands
{ {
@ -337,9 +338,9 @@ namespace Server.Commands
} }
if (fill) if (fill)
item = (Item)Activator.CreateInstance(m_Type, content); item = (Item)ActivatorUtil.CreateInstance(m_Type, content);
else else
item = (Item)Activator.CreateInstance(m_Type); item = (Item)ActivatorUtil.CreateInstance(m_Type);
} }
else if (m_Type.IsSubclassOf(typeofBaseDoor)) else if (m_Type.IsSubclassOf(typeofBaseDoor))
{ {
@ -357,11 +358,11 @@ namespace Server.Commands
} }
} }
item = (Item)Activator.CreateInstance(m_Type, facing); item = (Item)ActivatorUtil.CreateInstance(m_Type, facing);
} }
else else
{ {
item = (Item)Activator.CreateInstance(m_Type); item = (Item)ActivatorUtil.CreateInstance(m_Type);
} }
} }
catch (Exception e) catch (Exception e)

View file

@ -5,6 +5,7 @@ using System.Reflection;
using System.Text; using System.Text;
using System.Xml; using System.Xml;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Commands namespace Server.Commands
{ {
@ -271,7 +272,7 @@ namespace Server.Commands
public CategoryTypeEntry(Type type) public CategoryTypeEntry(Type type)
{ {
Type = type; Type = type;
Object = Activator.CreateInstance(type); Object = ActivatorUtil.CreateInstance(type);
} }
public Type Type{ get; } public Type Type{ get; }

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Globalization; using System.Globalization;
using System.Reflection; using System.Reflection;
@ -543,7 +544,7 @@ namespace Server.Commands.Generic
Type conditionalType = typeBuilder.CreateType(); Type conditionalType = typeBuilder.CreateType();
return (IConditional)Activator.CreateInstance(conditionalType); return (IConditional)ActivatorUtil.CreateInstance(conditionalType);
} }
} }
} }

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
@ -252,7 +253,7 @@ namespace Server.Commands.Generic
Type comparerType = typeBuilder.CreateType(); Type comparerType = typeBuilder.CreateType();
return (IComparer<T>)Activator.CreateInstance(comparerType); return (IComparer<T>)ActivatorUtil.CreateInstance(comparerType);
} }
} }
} }

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
@ -159,7 +160,7 @@ namespace Server.Commands.Generic
#endregion #endregion
Type comparerType = typeBuilder.CreateType(); Type comparerType = typeBuilder.CreateType();
return (IComparer<T>)Activator.CreateInstance(comparerType); return (IComparer<T>)ActivatorUtil.CreateInstance(comparerType);
} }
} }
} }

View file

@ -4,6 +4,7 @@ using Server.Gumps;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Regions; using Server.Regions;
using Server.Utilities;
namespace Server.Engines.CannedEvil namespace Server.Engines.CannedEvil
{ {
@ -363,7 +364,7 @@ namespace Server.Engines.CannedEvil
{ {
prot.SendLocalizedMessage(1049368); // You have been rewarded for your dedication to Justice! prot.SendLocalizedMessage(1049368); // You have been rewarded for your dedication to Justice!
if (Activator.CreateInstance(scroll.GetType()) is SpecialScroll scrollDupe) if (ActivatorUtil.CreateInstance(scroll.GetType()) is SpecialScroll scrollDupe)
{ {
scrollDupe.Skill = scroll.Skill; scrollDupe.Skill = scroll.Skill;
scrollDupe.Value = scroll.Value; scrollDupe.Value = scroll.Value;
@ -552,7 +553,7 @@ namespace Server.Engines.CannedEvil
try try
{ {
Champion = Activator.CreateInstance(ChampionSpawnInfo.GetInfo(m_Type).Champion) as Mobile; Champion = ActivatorUtil.CreateInstance(ChampionSpawnInfo.GetInfo(m_Type).Champion) as Mobile;
} }
catch catch
{ {
@ -689,7 +690,7 @@ namespace Server.Engines.CannedEvil
{ {
try try
{ {
return Activator.CreateInstance(types[Utility.Random(types.Length)]) as Mobile; return ActivatorUtil.CreateInstance(types[Utility.Random(types.Length)]) as Mobile;
} }
catch catch
{ {

View file

@ -5,6 +5,7 @@ using Server.Commands;
using Server.Factions; using Server.Factions;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Engines.Craft namespace Server.Engines.Craft
{ {
@ -139,7 +140,7 @@ namespace Server.Engines.Craft
try try
{ {
item = Activator.CreateInstance(type) as Item; item = ActivatorUtil.CreateInstance(type) as Item;
} }
catch catch
{ {
@ -930,7 +931,7 @@ namespace Server.Engines.Craft
} }
else else
{ {
item = Activator.CreateInstance(ItemType) as Item; item = ActivatorUtil.CreateInstance(ItemType) as Item;
} }
if (item != null) if (item != null)
@ -1113,7 +1114,7 @@ namespace Server.Engines.Craft
try try
{ {
cc = Activator.CreateInstance(m_CraftItem.ItemType, m_From, m_CraftItem, m_CraftSystem, cc = ActivatorUtil.CreateInstance(m_CraftItem.ItemType, m_From, m_CraftItem, m_CraftSystem,
m_TypeRes, m_Tool, quality) as CustomCraft; m_TypeRes, m_Tool, quality) as CustomCraft;
} }
catch catch

View file

@ -2,6 +2,7 @@ using System;
using Server.Ethics; using Server.Ethics;
using Server.Items; using Server.Items;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Engines.Craft namespace Server.Engines.Craft
{ {
@ -82,7 +83,7 @@ namespace Server.Engines.Craft
return SmeltResult.NoSkill; return SmeltResult.NoSkill;
Type resourceType = info.ResourceTypes[0]; Type resourceType = info.ResourceTypes[0];
Item ingot = (Item)Activator.CreateInstance(resourceType); Item ingot = (Item)ActivatorUtil.CreateInstance(resourceType);
if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed || if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed ||
item is BaseWeapon weapon && weapon.PlayerConstructed || item is BaseWeapon weapon && weapon.PlayerConstructed ||
@ -159,4 +160,4 @@ namespace Server.Engines.Craft
} }
} }
} }
} }

View file

@ -2,6 +2,7 @@ using System;
using Server.Engines.BulkOrders; using Server.Engines.BulkOrders;
using Server.Items; using Server.Items;
using Server.Spells; using Server.Spells;
using Server.Utilities;
namespace Server.Engines.Craft namespace Server.Engines.Craft
{ {
@ -49,7 +50,7 @@ namespace Server.Engines.Craft
if (typeItem != null) if (typeItem != null)
{ {
object o = Activator.CreateInstance(typeItem); object o = ActivatorUtil.CreateInstance(typeItem);
if (o is SpellScroll scroll) if (o is SpellScroll scroll)
{ {

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Regions; using Server.Regions;
using Server.Utilities;
namespace Server.Engines.Doom namespace Server.Engines.Doom
{ {
@ -298,7 +299,7 @@ namespace Server.Engines.Doom
if (type == null) if (type == null)
return; return;
object obj = Activator.CreateInstance(type); object obj = ActivatorUtil.CreateInstance(type);
if (obj is Item item) if (obj is Item item)
{ {

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -19,7 +20,7 @@ namespace Server.Factions
{ {
try try
{ {
return Activator.CreateInstance(Definition.Type) as BaseFactionGuard; return ActivatorUtil.CreateInstance(Definition.Type) as BaseFactionGuard;
} }
catch catch
{ {
@ -27,4 +28,4 @@ namespace Server.Factions
} }
} }
} }
} }

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Reflection; using System.Reflection;
@ -36,7 +37,7 @@ namespace Server.Factions
{ {
try try
{ {
return Activator.CreateInstance(type); return ActivatorUtil.CreateInstance(type);
} }
catch catch
{ {

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -19,7 +20,7 @@ namespace Server.Factions
{ {
try try
{ {
return Activator.CreateInstance(Definition.Type, town, faction) as BaseFactionVendor; return ActivatorUtil.CreateInstance(Definition.Type, town, faction) as BaseFactionVendor;
} }
catch catch
{ {
@ -27,4 +28,4 @@ namespace Server.Factions
} }
} }
} }
} }

View file

@ -3,6 +3,7 @@ using System.IO;
using Server.Factions; using Server.Factions;
using Server.Mobiles; using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server namespace Server
{ {
@ -174,7 +175,7 @@ namespace Server
public Type Type{ get; } public Type Type{ get; }
public Item Construct() => Activator.CreateInstance(Type) as Item; public Item Construct() => ActivatorUtil.CreateInstance(Type) as Item;
} }
} }
} }

View file

@ -1,6 +1,7 @@
using System; using System;
using Server.Engines.Craft; using Server.Engines.Craft;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Factions namespace Server.Factions
{ {
@ -50,7 +51,7 @@ namespace Server.Factions
{ {
try try
{ {
return Activator.CreateInstance(TrapType, m_Faction, from) as BaseFactionTrap; return ActivatorUtil.CreateInstance(TrapType, m_Faction, from) as BaseFactionTrap;
} }
catch catch
{ {

View file

@ -12,6 +12,7 @@ using Server.Spells.Seventh;
using Server.Spells.Sixth; using Server.Spells.Sixth;
using Server.Spells.Third; using Server.Spells.Third;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Factions namespace Server.Factions
{ {
@ -86,7 +87,7 @@ namespace Server.Factions
if (entry.Chance > Utility.Random(100)) if (entry.Chance > Utility.Random(100))
{ {
releaseTime = DateTime.UtcNow + entry.Hold; releaseTime = DateTime.UtcNow + entry.Hold;
return (Spell)Activator.CreateInstance(entry.Spell, mob, null); return (Spell)ActivatorUtil.CreateInstance(entry.Spell, mob, null);
} }
} }
@ -656,7 +657,7 @@ namespace Server.Factions
if (types.Count > 1) if (types.Count > 1)
spell = new BlessSpell(m_Guard); spell = new BlessSpell(m_Guard);
else if (types.Count == 1) else if (types.Count == 1)
spell = Activator.CreateInstance(types[0], m_Guard, null) as Spell; spell = ActivatorUtil.CreateInstance(types[0], m_Guard, null) as Spell;
} }
else if (types.Count > 0) else if (types.Count > 0)
{ {
@ -694,7 +695,7 @@ namespace Server.Factions
if (types.Count > 1) if (types.Count > 1)
spell = new CurseSpell(m_Guard); spell = new CurseSpell(m_Guard);
else if (types.Count == 1) else if (types.Count == 1)
spell = (Spell)Activator.CreateInstance(types[0], m_Guard, null); spell = (Spell)ActivatorUtil.CreateInstance(types[0], m_Guard, null);
} }
} }
} }

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using Server.Items; using Server.Items;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Engines.Harvest namespace Server.Engines.Harvest
{ {
@ -220,7 +221,7 @@ namespace Server.Engines.Harvest
{ {
try try
{ {
return Activator.CreateInstance(type) as Item; return ActivatorUtil.CreateInstance(type) as Item;
} }
catch catch
{ {

View file

@ -2,6 +2,7 @@ using System;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Engines.Harvest namespace Server.Engines.Harvest
{ {
@ -258,7 +259,7 @@ namespace Server.Engines.Harvest
if (map == null) if (map == null)
return; return;
if (Activator.CreateInstance(res.Types[2], 25) is BaseCreature spawned) if (ActivatorUtil.CreateInstance(res.Types[2], 25) is BaseCreature spawned)
{ {
int offset = Utility.Random(8) * 2; int offset = Utility.Random(8) * 2;

View file

@ -9,6 +9,7 @@ using Server.Gumps;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Engines.MLQuests namespace Server.Engines.MLQuests
{ {
@ -62,7 +63,7 @@ namespace Server.Engines.MLQuests
try try
{ {
quest = Activator.CreateInstance(type) as MLQuest; quest = ActivatorUtil.CreateInstance(type) as MLQuest;
} }
catch catch
{ {

View file

@ -1,9 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using Server.Gumps; using Server.Gumps;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Engines.MLQuests.Objectives namespace Server.Engines.MLQuests.Objectives
{ {
@ -45,7 +46,7 @@ namespace Server.Engines.MLQuests.Objectives
for (int i = 0; i < Amount; ++i) for (int i = 0; i < Amount; ++i)
{ {
if (!(Activator.CreateInstance(Delivery) is Item item)) if (!(ActivatorUtil.CreateInstance(Delivery) is Item item))
continue; continue;
delivery.Add(item); delivery.Add(item);

View file

@ -1,7 +1,8 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Server.Engines.MLQuests.Items; using Server.Engines.MLQuests.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Engines.MLQuests.Rewards namespace Server.Engines.MLQuests.Rewards
{ {
@ -53,7 +54,7 @@ namespace Server.Engines.MLQuests.Rewards
try try
{ {
spawnedItem = Activator.CreateInstance(m_Type) as Item; spawnedItem = ActivatorUtil.CreateInstance(m_Type) as Item;
} }
catch (Exception e) catch (Exception e)
{ {

View file

@ -2,6 +2,7 @@ using System;
using Server.Mobiles; using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -280,7 +281,7 @@ namespace Server.Items
if (contains) if (contains)
{ {
GreenThornsEffect effect = GreenThornsEffect effect =
(GreenThornsEffect)Activator.CreateInstance(taep.Effect, land.Location, from.Map, from); (GreenThornsEffect)ActivatorUtil.CreateInstance(taep.Effect, land.Location, from.Map, from);
return effect; return effect;
} }
} }

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Engines.Plants namespace Server.Engines.Plants
{ {
@ -40,6 +41,6 @@ namespace Server.Engines.Plants
return null; return null;
} }
public Item CreateResource() => (Item)Activator.CreateInstance(ResourceType); public Item CreateResource() => (Item)ActivatorUtil.CreateInstance(ResourceType);
} }
} }

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
namespace Server.Engines.Quests namespace Server.Engines.Quests
@ -8,7 +9,7 @@ namespace Server.Engines.Quests
{ {
try try
{ {
return Activator.CreateInstance(type); return ActivatorUtil.CreateInstance(type);
} }
catch catch
{ {

View file

@ -2,6 +2,7 @@ using System;
using System.Xml; using System.Xml;
using Server.Mobiles; using Server.Mobiles;
using Server.Regions; using Server.Regions;
using Server.Utilities;
namespace Server.Engines.Quests namespace Server.Engines.Quests
{ {
@ -26,7 +27,7 @@ namespace Server.Engines.Quests
if (m is PlayerMobile player && player.Quest == null && QuestSystem.CanOfferQuest(m, m_Quest)) if (m is PlayerMobile player && player.Quest == null && QuestSystem.CanOfferQuest(m, m_Quest))
try try
{ {
QuestSystem qs = (QuestSystem)Activator.CreateInstance(m_Quest, player); QuestSystem qs = (QuestSystem)ActivatorUtil.CreateInstance(m_Quest, player);
qs.SendOffer(); qs.SendOffer();
} }
catch (Exception ex) catch (Exception ex)
@ -35,4 +36,4 @@ namespace Server.Engines.Quests
} }
} }
} }
} }

View file

@ -8,6 +8,7 @@ using Server.Mobiles;
using Server.Multis; using Server.Multis;
using Server.Network; using Server.Network;
using Server.Regions; using Server.Regions;
using Server.Utilities;
namespace Server.Misc namespace Server.Misc
{ {
@ -152,7 +153,7 @@ namespace Server.Misc
try try
{ {
i = Activator.CreateInstance( i = ActivatorUtil.CreateInstance(
m_LesserArtifacts[(int)DropEra - 1][Utility.Random(m_LesserArtifacts[(int)DropEra - 1].Length)]) m_LesserArtifacts[(int)DropEra - 1][Utility.Random(m_LesserArtifacts[(int)DropEra - 1].Length)])
as as
Item; Item;
@ -528,7 +529,7 @@ namespace Server.Gumps
try try
{ {
item = (Item)Activator.CreateInstance(t.Type); item = (Item)ActivatorUtil.CreateInstance(t.Type);
} }
catch catch
{ {

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
namespace Server.Engines.VeteranRewards namespace Server.Engines.VeteranRewards
@ -64,7 +65,7 @@ namespace Server.Engines.VeteranRewards
{ {
try try
{ {
Item item = Activator.CreateInstance(ItemType, Args) as Item; Item item = ActivatorUtil.CreateInstance(ItemType, Args) as Item;
if (item is IRewardItem rewardItem) if (item is IRewardItem rewardItem)
rewardItem.IsRewardItem = true; rewardItem.IsRewardItem = true;
@ -79,4 +80,4 @@ namespace Server.Engines.VeteranRewards
return null; return null;
} }
} }
} }

View file

@ -1,6 +1,7 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Gumps namespace Server.Gumps
{ {
@ -42,7 +43,7 @@ namespace Server.Gumps
{ {
try try
{ {
item = Activator.CreateInstance(type) as Item; item = ActivatorUtil.CreateInstance(type) as Item;
} }
catch (Exception ex) catch (Exception ex)
{ {

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Events.Halloween namespace Server.Events.Halloween
{ {
@ -35,8 +36,8 @@ namespace Server.Events.Halloween
public static DateTime FinishHalloween => new DateTime(2012, 11, 15); public static DateTime FinishHalloween => new DateTime(2012, 11, 15);
public static Item RandomGMBeggerItem => public static Item RandomGMBeggerItem =>
(Item)Activator.CreateInstance(m_GMBeggarTreats[Utility.Random(m_GMBeggarTreats.Length)]); (Item)ActivatorUtil.CreateInstance(m_GMBeggarTreats[Utility.Random(m_GMBeggarTreats.Length)]);
public static Item RandomTreat => (Item)Activator.CreateInstance(m_Treats[Utility.Random(m_Treats.Length)]); public static Item RandomTreat => (Item)ActivatorUtil.CreateInstance(m_Treats[Utility.Random(m_Treats.Length)]);
} }
} }

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using Server.ContextMenus; using Server.ContextMenus;
using Server.Multis; using Server.Multis;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -692,7 +693,7 @@ namespace Server.Items
try try
{ {
item = Activator.CreateInstance(m_Decorations[random]) as Item; item = ActivatorUtil.CreateInstance(m_Decorations[random]) as Item;
} }
catch catch
{ {

View file

@ -4,6 +4,7 @@ using Server.Engines.Craft;
using Server.Ethics; using Server.Ethics;
using Server.Factions; using Server.Factions;
using Server.Network; using Server.Network;
using Server.Utilities;
using AMA = Server.Items.ArmorMeditationAllowance; using AMA = Server.Items.ArmorMeditationAllowance;
using AMT = Server.Items.ArmorMaterialType; using AMT = Server.Items.ArmorMaterialType;
@ -560,7 +561,7 @@ namespace Server.Items
if (item?.Resources.Count == 1 && item.Resources.GetAt(0).Amount >= 2) if (item?.Resources.Count == 1 && item.Resources.GetAt(0).Amount >= 2)
try try
{ {
Item res = (Item)Activator.CreateInstance(CraftResources.GetInfo(m_Resource).ResourceTypes[0]); Item res = (Item)ActivatorUtil.CreateInstance(CraftResources.GetInfo(m_Resource).ResourceTypes[0]);
ScissorHelper(from, res, PlayerConstructed ? item.Resources.GetAt(0).Amount / 2 : 1); ScissorHelper(from, res, PlayerConstructed ? item.Resources.GetAt(0).Amount / 2 : 1);
return true; return true;

View file

@ -4,6 +4,7 @@ using Server.Engines.Craft;
using Server.Ethics; using Server.Ethics;
using Server.Factions; using Server.Factions;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -210,7 +211,7 @@ namespace Server.Items
Type resourceType = info.ResourceTypes?[0] ?? item.Resources.GetAt(0).ItemType; Type resourceType = info.ResourceTypes?[0] ?? item.Resources.GetAt(0).ItemType;
Item res = (Item)Activator.CreateInstance(resourceType); Item res = (Item)ActivatorUtil.CreateInstance(resourceType);
ScissorHelper(from, res, PlayerConstructed ? item.Resources.GetAt(0).Amount / 2 : 1); ScissorHelper(from, res, PlayerConstructed ? item.Resources.GetAt(0).Amount / 2 : 1);

View file

@ -4,6 +4,7 @@ using System.Linq;
using Server.ContextMenus; using Server.ContextMenus;
using Server.Engines.Craft; using Server.Engines.Craft;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -77,7 +78,7 @@ namespace Server.Items
}; };
Type resourceType = info.ResourceTypes[0]; Type resourceType = info.ResourceTypes[0];
Item ingot = (Item)Activator.CreateInstance(resourceType); Item ingot = (Item)ActivatorUtil.CreateInstance(resourceType);
if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed || if (item is DragonBardingDeed || item is BaseArmor armor && armor.PlayerConstructed ||
item is BaseWeapon weapon && weapon.PlayerConstructed || item is BaseWeapon weapon && weapon.PlayerConstructed ||

View file

@ -4,6 +4,7 @@ using Server.ContextMenus;
using Server.Engines.PartySystem; using Server.Engines.PartySystem;
using Server.Gumps; using Server.Gumps;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -286,7 +287,7 @@ namespace Server.Items
} }
if (level == 6 && Core.AOS) if (level == 6 && Core.AOS)
cont.DropItem((Item)Activator.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)])); cont.DropItem((Item)ActivatorUtil.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]));
} }
public override bool CheckLocked(Mobile from) public override bool CheckLocked(Mobile from)

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -316,7 +317,7 @@ namespace Server.Items
public Item CreateInstance() public Item CreateInstance()
{ {
Item item = (Item)Activator.CreateInstance(Type); Item item = (Item)ActivatorUtil.CreateInstance(Type);
if (Hue > 0) if (Hue > 0)
item.Hue = Hue; item.Hue = Hue;

View file

@ -7,6 +7,7 @@ using Server.Engines.Harvest;
using Server.Mobiles; using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -224,7 +225,7 @@ namespace Server.Items
try try
{ {
bc = (BaseCreature)Activator.CreateInstance( bc = (BaseCreature)ActivatorUtil.CreateInstance(
m_SpawnTypes[level][Utility.Random(m_SpawnTypes[level].Length)]); m_SpawnTypes[level][Utility.Random(m_SpawnTypes[level].Length)]);
} }
catch catch

View file

@ -1,6 +1,7 @@
using System; using System;
using Server.Mobiles; using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -195,7 +196,7 @@ namespace Server.Items
{ {
Map map = Map; Map map = Map;
BaseCreature bc = BaseCreature bc =
(BaseCreature)Activator.CreateInstance(Creatures[Utility.Random(Creatures.Length)]); (BaseCreature)ActivatorUtil.CreateInstance(Creatures[Utility.Random(Creatures.Length)]);
Point3D spawnLoc = GetSpawnPosition(); Point3D spawnLoc = GetSpawnPosition();
@ -230,4 +231,4 @@ namespace Server.Items
from.SendLocalizedMessage(500446); // That is too far away. from.SendLocalizedMessage(500446); // That is too far away.
} }
} }
} }

View file

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using Server.Engines.ConPVP; using Server.Engines.ConPVP;
using Server.Engines.Craft; using Server.Engines.Craft;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -141,7 +142,7 @@ namespace Server.Items
{ {
if (this is BaseExplosionPotion && Amount > 1) if (this is BaseExplosionPotion && Amount > 1)
{ {
BasePotion pot = (BasePotion)Activator.CreateInstance(GetType()); BasePotion pot = (BasePotion)ActivatorUtil.CreateInstance(GetType());
Amount--; Amount--;

View file

@ -6,6 +6,7 @@ using Server.Spells.Chivalry;
using Server.Spells.Necromancy; using Server.Spells.Necromancy;
using Server.Spells.Ninjitsu; using Server.Spells.Ninjitsu;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
/* /*
* There really was no prettier way to do this, other than the one * There really was no prettier way to do this, other than the one
@ -85,7 +86,7 @@ namespace Server.Items
{ {
if (weapon.UsesRemaining > 0) if (weapon.UsesRemaining > 0)
{ {
INinjaAmmo ammo = Activator.CreateInstance(weapon.AmmoType, weapon.UsesRemaining) as INinjaAmmo; INinjaAmmo ammo = ActivatorUtil.CreateInstance(weapon.AmmoType, weapon.UsesRemaining) as INinjaAmmo;
ammo.Poison = weapon.Poison; ammo.Poison = weapon.Poison;
ammo.PoisonCharges = weapon.PoisonCharges; ammo.PoisonCharges = weapon.PoisonCharges;

View file

@ -6,6 +6,7 @@ using Server.Spells.Fourth;
using Server.Spells.Necromancy; using Server.Spells.Necromancy;
using Server.Spells.Second; using Server.Spells.Second;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -228,7 +229,7 @@ namespace Server.Items
try try
{ {
obj = Activator.CreateInstance(type); obj = ActivatorUtil.CreateInstance(type);
} }
catch catch
{ {
@ -260,7 +261,7 @@ namespace Server.Items
from.PlaceInBackpack(item); from.PlaceInBackpack(item);
if (i + 1 < count) if (i + 1 < count)
item = Activator.CreateInstance(type) as Item; item = ActivatorUtil.CreateInstance(type) as Item;
} }
if (item is Board) if (item is Board)

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server namespace Server
{ {
@ -689,7 +690,7 @@ namespace Server
{ {
try try
{ {
return Activator.CreateInstance(type) as Item; return ActivatorUtil.CreateInstance(type) as Item;
} }
catch catch
{ {
@ -738,4 +739,4 @@ namespace Server
#endregion #endregion
} }
} }

View file

@ -2,6 +2,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server namespace Server
{ {
@ -886,7 +887,7 @@ namespace Server
else if (Type == typeof(SummonAirElementalScroll)) // high scroll else if (Type == typeof(SummonAirElementalScroll)) // high scroll
item = RandomScroll(2, 8, 8); item = RandomScroll(2, 8, 8);
else else
item = Activator.CreateInstance(Type) as Item; item = ActivatorUtil.CreateInstance(Type) as Item;
return item; return item;
} }
@ -959,4 +960,4 @@ namespace Server
return v; return v;
} }
} }
} }

View file

@ -1,6 +1,7 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server namespace Server
{ {
@ -26,7 +27,7 @@ namespace Server
public static void GiveArtifactTo(Mobile m) public static void GiveArtifactTo(Mobile m)
{ {
if (!(Activator.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]) is Item item)) if (!(ActivatorUtil.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]) is Item item))
return; return;
if (m.AddToBackpack(item)) if (m.AddToBackpack(item))
@ -73,4 +74,4 @@ namespace Server
|| region.IsPartOf("The Palace of Paroxysmus") || region.IsPartOf("The Palace of Paroxysmus")
|| region.IsPartOf("Labyrinth"); || region.IsPartOf("Labyrinth");
} }
} }

View file

@ -23,6 +23,7 @@ using Server.Spells.Necromancy;
using Server.Spells.Sixth; using Server.Spells.Sixth;
using Server.Spells.Spellweaving; using Server.Spells.Spellweaving;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Mobiles namespace Server.Mobiles
{ {
@ -2170,7 +2171,7 @@ namespace Server.Mobiles
return null; return null;
Type type = m_SpellAttack[Utility.Random(m_SpellAttack.Count)]; Type type = m_SpellAttack[Utility.Random(m_SpellAttack.Count)];
return Activator.CreateInstance(type, this, null) as Spell; return ActivatorUtil.CreateInstance(type, this, null) as Spell;
} }
public Spell GetDefenseSpellRandom() public Spell GetDefenseSpellRandom()
@ -2179,7 +2180,7 @@ namespace Server.Mobiles
return null; return null;
Type type = m_SpellDefense[Utility.Random(m_SpellDefense.Count)]; Type type = m_SpellDefense[Utility.Random(m_SpellDefense.Count)];
return Activator.CreateInstance(type, this, null) as Spell; return ActivatorUtil.CreateInstance(type, this, null) as Spell;
} }
public Spell GetSpellSpecific(Type type) public Spell GetSpellSpecific(Type type)
@ -2188,11 +2189,11 @@ namespace Server.Mobiles
for (i = 0; i < m_SpellAttack.Count; i++) for (i = 0; i < m_SpellAttack.Count; i++)
if (m_SpellAttack[i] == type) if (m_SpellAttack[i] == type)
return Activator.CreateInstance(type, this, null) as Spell; return ActivatorUtil.CreateInstance(type, this, null) as Spell;
for (i = 0; i < m_SpellDefense.Count; i++) for (i = 0; i < m_SpellDefense.Count; i++)
if (m_SpellDefense[i] == type) if (m_SpellDefense[i] == type)
return Activator.CreateInstance(type, this, null) as Spell; return ActivatorUtil.CreateInstance(type, this, null) as Spell;
return null; return null;
} }

View file

@ -33,6 +33,7 @@ using Server.Spells.Seventh;
using Server.Spells.Sixth; using Server.Spells.Sixth;
using Server.Spells.Spellweaving; using Server.Spells.Spellweaving;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
using BaseQuestGump = Server.Engines.MLQuests.Gumps.BaseQuestGump; using BaseQuestGump = Server.Engines.MLQuests.Gumps.BaseQuestGump;
using QuestOfferGump = Server.Engines.MLQuests.Gumps.QuestOfferGump; using QuestOfferGump = Server.Engines.MLQuests.Gumps.QuestOfferGump;
using RankDefinition = Server.Guilds.RankDefinition; using RankDefinition = Server.Guilds.RankDefinition;
@ -3080,7 +3081,7 @@ namespace Server.Mobiles
try try
{ {
ammo = Activator.CreateInstance(kvp.Key) as Item; ammo = ActivatorUtil.CreateInstance(kvp.Key) as Item;
} }
catch catch
{ {

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Mobiles namespace Server.Mobiles
{ {
@ -179,7 +180,7 @@ namespace Server.Mobiles
public static void GiveArtifactTo(Mobile m) public static void GiveArtifactTo(Mobile m)
{ {
Item item = (Item)Activator.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]); Item item = (Item)ActivatorUtil.CreateInstance(Artifacts[Utility.Random(Artifacts.Length)]);
if (m.AddToBackpack(item)) if (m.AddToBackpack(item))
m.SendMessage("As a reward for slaying the mighty paragon, an artifact has been placed in your backpack."); m.SendMessage("As a reward for slaying the mighty paragon, an artifact has been placed in your backpack.");
@ -215,4 +216,4 @@ namespace Server.Mobiles
} }
} }
} }
} }

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Mobiles namespace Server.Mobiles
{ {
@ -27,6 +28,6 @@ namespace Server.Mobiles
public override bool CanCacheDisplay => false; public override bool CanCacheDisplay => false;
public override IEntity GetEntity() => (IEntity)Activator.CreateInstance(Type, m_Content); public override IEntity GetEntity() => (IEntity)ActivatorUtil.CreateInstance(Type, m_Content);
} }
} }

View file

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Mobiles namespace Server.Mobiles
{ {
@ -94,10 +95,10 @@ namespace Server.Mobiles
public virtual IEntity GetEntity() public virtual IEntity GetEntity()
{ {
if (Args == null || Args.Length == 0) if (Args == null || Args.Length == 0)
return (IEntity)Activator.CreateInstance(Type); return (IEntity)ActivatorUtil.CreateInstance(Type);
return (IEntity)Activator.CreateInstance(Type, Args); return (IEntity)ActivatorUtil.CreateInstance(Type, Args);
//return (Item)Activator.CreateInstance( m_Type ); //return (Item)ActivatorUtil.CreateInstance( m_Type );
} }
//Attempt to restock with item, (return true if restock successful) //Attempt to restock with item, (return true if restock successful)

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using Server.Gumps; using Server.Gumps;
using Server.Items; using Server.Items;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Mobiles namespace Server.Mobiles
{ {
@ -193,7 +194,7 @@ namespace Server.Mobiles
else else
args[i] = origArgs[i]; args[i] = origArgs[i];
Gump g = Activator.CreateInstance(buyInfo.GumpType, args) as Gump; Gump g = ActivatorUtil.CreateInstance(buyInfo.GumpType, args) as Gump;
m_From.SendGump(g); m_From.SendGump(g);
} }

View file

@ -7,6 +7,7 @@ using Server.Multis;
using Server.Network; using Server.Network;
using Server.Regions; using Server.Regions;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Items namespace Server.Items
{ {
@ -568,7 +569,7 @@ namespace Server.Items
else else
args = new object[] { from }; args = new object[] { from };
return Activator.CreateInstance(Type, args) as BaseHouse; return ActivatorUtil.CreateInstance(Type, args) as BaseHouse;
} }
catch catch
{ {

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Xml; using System.Xml;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Regions namespace Server.Regions
{ {
@ -171,7 +172,7 @@ namespace Server.Regions
try try
{ {
Activator.CreateInstance(m_GuardType, m_GuardParams); ActivatorUtil.CreateInstance(m_GuardType, m_GuardParams);
} }
catch catch
{ {

View file

@ -4,6 +4,7 @@ using System.IO;
using System.Xml; using System.Xml;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Regions namespace Server.Regions
{ {
@ -157,7 +158,7 @@ namespace Server.Regions
protected override void Init() protected override void Init()
{ {
Mobile mob = (Mobile)Activator.CreateInstance(Type); Mobile mob = (Mobile)ActivatorUtil.CreateInstance(Type);
m_Land = !mob.CantWalk; m_Land = !mob.CantWalk;
m_Water = mob.CanSwim; m_Water = mob.CanSwim;
@ -186,7 +187,7 @@ namespace Server.Regions
return mobile; return mobile;
} }
protected virtual Mobile CreateMobile() => (Mobile)Activator.CreateInstance(Type); protected virtual Mobile CreateMobile() => (Mobile)ActivatorUtil.CreateInstance(Type);
} }
public class SpawnItem : SpawnType public class SpawnItem : SpawnType
@ -221,7 +222,7 @@ namespace Server.Regions
protected override void Init() protected override void Init()
{ {
Item item = (Item)Activator.CreateInstance(Type); Item item = (Item)ActivatorUtil.CreateInstance(Type);
m_Height = item.ItemData.Height; m_Height = item.ItemData.Height;
@ -239,7 +240,7 @@ namespace Server.Regions
return item; return item;
} }
protected virtual Item CreateItem() => (Item)Activator.CreateInstance(Type); protected virtual Item CreateItem() => (Item)ActivatorUtil.CreateInstance(Type);
} }
public class SpawnTreasureChest : SpawnItem public class SpawnTreasureChest : SpawnItem

View file

@ -1,3 +1,4 @@
using Server.Utilities;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -83,7 +84,7 @@ namespace Server.Spells
try try
{ {
spm = Activator.CreateInstance(type) as SpecialMove; spm = ActivatorUtil.CreateInstance(type) as SpecialMove;
} }
catch catch
{ {
@ -123,7 +124,7 @@ namespace Server.Spells
try try
{ {
return (Spell)Activator.CreateInstance(t, m_Params); return (Spell)ActivatorUtil.CreateInstance(t, m_Params);
} }
catch catch
{ {
@ -147,7 +148,7 @@ namespace Server.Spells
try try
{ {
return (Spell)Activator.CreateInstance(t, m_Params); return (Spell)ActivatorUtil.CreateInstance(t, m_Params);
} }
catch catch
{ {

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Spells.Fifth namespace Server.Spells.Fifth
{ {
@ -63,7 +64,7 @@ namespace Server.Spells.Fifth
if (CheckSequence()) if (CheckSequence())
try try
{ {
BaseCreature creature = (BaseCreature)Activator.CreateInstance(m_Types[Utility.Random(m_Types.Length)]); BaseCreature creature = (BaseCreature)ActivatorUtil.CreateInstance(m_Types[Utility.Random(m_Types.Length)]);
//creature.ControlSlots = 2; //creature.ControlSlots = 2;

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Items; using Server.Items;
using Server.Utilities;
namespace Server.Spells.First namespace Server.Spells.First
{ {
@ -75,7 +76,7 @@ namespace Server.Spells.First
try try
{ {
item = (Item)Activator.CreateInstance(Type); item = (Item)ActivatorUtil.CreateInstance(Type);
} }
catch catch
{ {

View file

@ -5,6 +5,7 @@ using Server.Engines.Quests.Necro;
using Server.Items; using Server.Items;
using Server.Mobiles; using Server.Mobiles;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server.Spells.Necromancy namespace Server.Spells.Necromancy
{ {
@ -298,7 +299,7 @@ namespace Server.Spells.Necromancy
try try
{ {
summoned = Activator.CreateInstance(toSummon) as Mobile; summoned = ActivatorUtil.CreateInstance(toSummon) as Mobile;
} }
catch catch
{ {

View file

@ -3,6 +3,7 @@ using System.Collections.Generic;
using Server.Gumps; using Server.Gumps;
using Server.Mobiles; using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Utilities;
namespace Server.Spells.Necromancy namespace Server.Spells.Necromancy
{ {
@ -170,7 +171,7 @@ namespace Server.Spells.Necromancy
{ {
try try
{ {
BaseCreature bc = (BaseCreature)Activator.CreateInstance(entry.Type); BaseCreature bc = (BaseCreature)ActivatorUtil.CreateInstance(entry.Type);
// TODO: Is this right? // TODO: Is this right?
bc.Skills.MagicResist.Base = m_From.Skills.MagicResist.Base; bc.Skills.MagicResist.Base = m_From.Skills.MagicResist.Base;

View file

@ -1,5 +1,6 @@
using System; using System;
using Server.Mobiles; using Server.Mobiles;
using Server.Utilities;
namespace Server.Spells.Spellweaving namespace Server.Spells.Spellweaving
{ {
@ -39,7 +40,7 @@ namespace Server.Spells.Spellweaving
try try
{ {
bc = Activator.CreateInstance<T>(); bc = ActivatorUtil.CreateInstance<T>();
} }
catch catch
{ {
@ -53,4 +54,4 @@ namespace Server.Spells.Spellweaving
} }
} }
} }
} }

View file

@ -36,6 +36,7 @@ using Server.Mobiles;
using Server.Network; using Server.Network;
using Server.Prompts; using Server.Prompts;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server namespace Server
{ {
@ -4690,7 +4691,7 @@ namespace Server
Item item; Item item;
try try
{ {
item = (Item)Activator.CreateInstance(oldItem.GetType()); item = (Item)ActivatorUtil.CreateInstance(oldItem.GetType());
} }
catch catch
{ {

View file

@ -24,6 +24,7 @@ using System.IO;
using System.Xml; using System.Xml;
using Server.Network; using Server.Network;
using Server.Targeting; using Server.Targeting;
using Server.Utilities;
namespace Server namespace Server
{ {
@ -780,7 +781,7 @@ namespace Server
Region region = null; Region region = null;
try try
{ {
region = (Region)Activator.CreateInstance(type, xmlReg, map, parent); region = (Region)ActivatorUtil.CreateInstance(type, xmlReg, map, parent);
} }
catch (Exception ex) catch (Exception ex)
{ {

View file

@ -3,8 +3,7 @@
<PropertyGroup> <PropertyGroup>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<ApplicationIcon>MUO.ico</ApplicationIcon> <ApplicationIcon>MUO.ico</ApplicationIcon>
<StartupObject> <StartupObject>Server.Core</StartupObject>
</StartupObject>
<AssemblyName>ModernUO</AssemblyName> <AssemblyName>ModernUO</AssemblyName>
<Win32Resource /> <Win32Resource />
<Version>0.2.1</Version> <Version>0.2.1</Version>

View file

@ -0,0 +1,73 @@
using System;
using System.Linq;
using System.Reflection;
namespace Server.Utilities
{
public static class ActivatorUtil
{
public static ConstructorInfo GetConstructor(Type type)
{
try
{
return type.GetConstructor(Type.EmptyTypes)
?? type.GetConstructors().Single(info => info.GetParameters().All(x => x.IsOptional))
?? throw new TypeInitializationException(type.ToString(), new Exception($"There is no empty/default constructor for {type}"));
}
catch (Exception e)
{
throw new TypeInitializationException(type.ToString(), e);
}
}
public static ConstructorInfo GetConstructor(Type type, params Type[] args)
{
try
{
return args.All(x => x != null) ? type.GetConstructor(args) : null ?? type.GetConstructors().Single(info =>
{
var paramList = info.GetParameters().ToList();
// If more args are given than parameters, skip.
if (args.Length > paramList.Count)
return false;
// check all given args map to params.
for (int i = 0; i < args.Length; i++)
{
// if a null reference is passed, but the type is not nullable
if ((args[i] == null && paramList[i].ParameterType.IsValueType)
// or if an arg is not null and is not assignable to the parameter type, skip.
|| !(args[i] == null || paramList[i].ParameterType.IsAssignableFrom(args[i])))
return false;
}
// If there are more parameters, check if they any are not optional, if any are not, skip.
// Otherwise all checks have passed. We have found a match
return args.Length <= paramList.Count || paramList.GetRange(args.Length, paramList.Count - args.Length).All(x => x.IsOptional);
}) ?? throw new Exception($"There is no empty/default constructor for {type}");
}
catch (Exception e)
{
throw new TypeInitializationException(type.ToString(), e);
}
}
public static object CreateInstance(Type type)
{
var cctor = GetConstructor(type);
var args = cctor.GetParameters();
if (args.Length == 0)
return cctor.Invoke(Type.EmptyTypes);
var argList = new object[args.Length];
Array.Fill(argList, Type.Missing);
return cctor.Invoke(argList);
}
public static object CreateInstance(Type type, params object[] args)
{
if (args == null || args.Length == 0)
return CreateInstance(type);
var cctor = GetConstructor(type, args.Select(x => x?.GetType()).ToArray());
return cctor.Invoke(args);
}
public static T CreateInstance<T>() => (T)CreateInstance(typeof(T));
public static T CreateInstance<T>(params object[] args) => (T)CreateInstance(typeof(T), args);
}
}

View file

@ -629,7 +629,7 @@ namespace Server
SaveStrategy strategy = SaveStrategy.Acquire(); SaveStrategy strategy = SaveStrategy.Acquire();
Console.WriteLine("Core: Using {0} save strategy", strategy.Name.ToLowerInvariant()); Console.WriteLine("Core: Using {0} save strategy", strategy.Name.ToLowerInvariant());
Console.Write("World: Saving..."); Console.Write($"[{DateTime.UtcNow.ToLongTimeString()}] World: Saving...");
Stopwatch watch = Stopwatch.StartNew(); Stopwatch watch = Stopwatch.StartNew();