Modernization Fixes & Updates to Default Values (#3)

This commit is contained in:
Kamron Batman 2018-10-28 00:33:16 -07:00 • committed by GitHub
parent 445eddff68
commit dcf64091b1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
768 changed files with 10507 additions and 14196 deletions

View file

@ -44,9 +44,9 @@ namespace Server.Engines.Quests.Ambitious
}
else
{
QuestObjective obj = qs.FindObjective(typeof(ReturnAfterKillsObjective));
QuestObjective obj = qs.FindObjective<ReturnAfterKillsObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -56,7 +56,9 @@ namespace Server.Engines.Quests.Ambitious
}
else
{
if (qs.FindObjective(typeof(GetRewardObjective)) is GetRewardObjective lastObj && !lastObj.Completed)
GetRewardObjective lastObj = qs.FindObjective<GetRewardObjective>();
if (lastObj?.Completed == false)
{
bool bagOfSending = lastObj.BagOfSending;
bool powderOfTranslocation = lastObj.PowderOfTranslocation;
@ -95,9 +97,9 @@ namespace Server.Engines.Quests.Ambitious
if (from is PlayerMobile player)
if (player.Quest is AmbitiousQueenQuest qs && qs.RedSolen == RedSolen)
{
QuestObjective obj = qs.FindObjective(typeof(GatherFungiObjective));
QuestObjective obj = qs.FindObjective<GatherFungiObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
if (dropped is ZoogiFungus fungi)
{
if (fungi.Amount >= 50)

View file

@ -77,49 +77,53 @@ namespace Server.Engines.Quests.Collector
{
QuestSystem qs = player.Quest;
if (qs is CollectorQuest)
if (qs.FindObjective(typeof(CaptureImagesObjective)) is CaptureImagesObjective obj && !obj.Completed)
if (!(qs is CollectorQuest))
return;
CaptureImagesObjective obj = qs.FindObjective<CaptureImagesObjective>();
if (obj?.Completed != false)
return;
if (targeted is Mobile)
{
CaptureResponse response = obj.CaptureImage(
targeted.GetType().Name == "GreaterMongbat"
? new Mongbat().GetType()
: targeted.GetType(), out ImageType image);
switch (response)
{
if (targeted is Mobile)
case CaptureResponse.Valid:
{
CaptureResponse response = obj.CaptureImage(
targeted.GetType().Name == "GreaterMongbat"
? new Mongbat().GetType()
: targeted.GetType(), out ImageType image);
player.SendLocalizedMessage(
1055125); // The enchanted paints swirl for a moment then an image begins to take shape. *Click*
player.AddToBackpack(new PaintedImage(image));
switch (response)
{
case CaptureResponse.Valid:
{
player.SendLocalizedMessage(
1055125); // The enchanted paints swirl for a moment then an image begins to take shape. *Click*
player.AddToBackpack(new PaintedImage(image));
break;
}
case CaptureResponse.AlreadyDone:
{
player.SendAsciiMessage(0x2C,
"You have already captured the image of this creature");
break;
}
case CaptureResponse.Invalid:
{
player.SendLocalizedMessage(
1055124); // You have no interest in capturing the image of this creature.
break;
}
}
break;
}
else
case CaptureResponse.AlreadyDone:
{
player.SendAsciiMessage(0x35, "You have no interest in that.");
}
player.SendAsciiMessage(0x2C,
"You have already captured the image of this creature");
return;
break;
}
case CaptureResponse.Invalid:
{
player.SendLocalizedMessage(
1055124); // You have no interest in capturing the image of this creature.
break;
}
}
}
else
{
player.SendAsciiMessage(0x35, "You have no interest in that.");
}
return;
}
from.SendLocalizedMessage(1010085); // You cannot use this.

View file

@ -1,5 +1,5 @@
using System;
using System.Collections;
using System.Linq;
using Server.Mobiles;
namespace Server.Engines.Quests.Collector
@ -56,6 +56,8 @@ namespace Server.Engines.Quests.Collector
new ImageTypeInfo(9746, typeof(Juggernaut), 55, 38)
};
private static ImageType[] m_ImageTypeList;
public ImageTypeInfo(int figurine, Type type, int x, int y)
{
Figurine = figurine;
@ -70,34 +72,26 @@ namespace Server.Engines.Quests.Collector
public int Name => Figurine < 0x4000 ? 1020000 + Figurine : 1078872 + Figurine;
public int X{ get; }
public int Y{ get; }
public static ImageTypeInfo Get(ImageType image)
{
int index = (int)image;
if (index >= 0 && index < m_Table.Length)
return m_Table[index];
return m_Table[0];
return m_Table[index >= 0 && index < m_Table.Length ? index : 0];
}
public static ImageType[] RandomList(int count)
{
ArrayList list = new ArrayList(m_Table.Length);
for (int i = 0; i < m_Table.Length; i++)
list.Add((ImageType)i);
ImageType[] images = new ImageType[count];
for (int i = 0; i < images.Length; i++)
if (m_ImageTypeList == null)
{
int index = Utility.Random(list.Count);
images[i] = (ImageType)list[index];
list.RemoveAt(index);
m_ImageTypeList = new ImageType[m_Table.Length];
for (int i = 0; i < m_Table.Length; i++)
m_ImageTypeList[i] = (ImageType)i;
}
return images;
ImageType[] array = m_ImageTypeList.ToArray();
Utility.Shuffle(array);
return array.Take(count).ToArray();
}
}
}

View file

@ -58,9 +58,9 @@ namespace Server.Engines.Quests.Collector
{
Direction = GetDirectionTo(player);
QuestObjective obj = qs.FindObjective(typeof(FindAlbertaObjective));
QuestObjective obj = qs.FindObjective<FindAlbertaObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
else if (qs.IsObjectiveInProgress(typeof(SitOnTheStoolObjective)))
qs.AddConversation(new AlbertaStoolConversation());

View file

@ -55,9 +55,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
QuestObjective obj = qs.FindObjective(typeof(ReturnPearlsObjective));
QuestObjective obj = qs.FindObjective<ReturnPearlsObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -71,9 +71,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
obj = qs.FindObjective(typeof(ReturnPaintingObjective));
obj = qs.FindObjective<ReturnPaintingObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -91,9 +91,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
obj = qs.FindObjective(typeof(ReturnAutographObjective));
obj = qs.FindObjective<ReturnAutographObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -111,9 +111,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
obj = qs.FindObjective(typeof(ReturnToysObjective));
obj = qs.FindObjective<ReturnToysObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
@ -124,9 +124,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
obj = qs.FindObjective(typeof(MakeRoomObjective));
obj = qs.FindObjective<MakeRoomObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
if (GiveReward(player))
{

View file

@ -60,9 +60,9 @@ namespace Server.Engines.Quests.Collector
{
Direction = GetDirectionTo(player);
QuestObjective obj = qs.FindObjective(typeof(FindGabrielObjective));
QuestObjective obj = qs.FindObjective<FindGabrielObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -72,9 +72,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
obj = qs.FindObjective(typeof(ReturnSheetMusicObjective));
obj = qs.FindObjective<ReturnSheetMusicObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
else if (qs.IsObjectiveInProgress(typeof(ReturnAutographObjective)))
qs.AddConversation(new GabrielIgnoreConversation());

View file

@ -20,7 +20,7 @@ namespace Server.Engines.Quests.Collector
{
InitStats(100, 100, 25);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Female = false;
Body = 0x190;
@ -51,21 +51,25 @@ namespace Server.Engines.Quests.Collector
{
QuestSystem qs = player.Quest;
if (qs is CollectorQuest)
if (qs.FindObjective(typeof(FindSheetMusicObjective)) is FindSheetMusicObjective obj && !obj.Completed)
{
Direction = GetDirectionTo(player);
if (!(qs is CollectorQuest))
return;
if (obj.IsInRightTheater())
{
player.CloseGump(typeof(SheetMusicOfferGump));
player.SendGump(new SheetMusicOfferGump());
}
else
{
qs.AddConversation(new NoSheetMusicConversation());
}
FindSheetMusicObjective obj = qs.FindObjective<FindSheetMusicObjective>();
if (obj?.Completed == false)
{
Direction = GetDirectionTo(player);
if (obj.IsInRightTheater())
{
player.CloseGump<SheetMusicOfferGump>();
player.SendGump(new SheetMusicOfferGump());
}
else
{
qs.AddConversation(new NoSheetMusicConversation());
}
}
}
public override void Serialize(GenericWriter writer)
@ -132,25 +136,28 @@ namespace Server.Engines.Quests.Collector
{
QuestSystem qs = player.Quest;
if (qs is CollectorQuest)
if (qs.FindObjective(typeof(FindSheetMusicObjective)) is FindSheetMusicObjective obj &&
!obj.Completed)
{
if (player.Backpack != null && player.Backpack.ConsumeTotal(typeof(Gold), 10))
{
obj.Complete();
}
else
{
BankBox bank = player.FindBankNoCreate();
if (bank != null && bank.ConsumeTotal(typeof(Gold), 10))
obj.Complete();
if (!(qs is CollectorQuest))
return;
else
player.SendLocalizedMessage(
1055108); // You don't have enough gold to buy the sheet music.
}
}
FindSheetMusicObjective obj = qs.FindObjective<FindSheetMusicObjective>();
if (obj?.Completed != false)
return;
if (player.Backpack != null && player.Backpack.ConsumeTotal(typeof(Gold), 10))
{
obj.Complete();
}
else
{
BankBox bank = player.FindBankNoCreate();
if (bank != null && bank.ConsumeTotal(typeof(Gold), 10))
obj.Complete();
else
player.SendLocalizedMessage(
1055108); // You don't have enough gold to buy the sheet music.
}
}
}
}

View file

@ -57,9 +57,9 @@ namespace Server.Engines.Quests.Collector
{
Direction = GetDirectionTo(player);
QuestObjective obj = qs.FindObjective(typeof(FindTomasObjective));
QuestObjective obj = qs.FindObjective<FindTomasObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item paints = new EnchantedPaints();
@ -80,9 +80,9 @@ namespace Server.Engines.Quests.Collector
}
else
{
obj = qs.FindObjective(typeof(ReturnImagesObjective));
obj = qs.FindObjective<ReturnImagesObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
player.Backpack?.ConsumeUpTo(typeof(EnchantedPaints), 1);

View file

@ -77,8 +77,7 @@ namespace Server.Engines.Quests
--Charges;
m_PlayTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), new TimerStateCallback(PlayTimer_Callback),
from);
m_PlayTimer = Timer.DelayCall(TimeSpan.FromSeconds(5.0), () => PlayTimer_Callback(from));
}
else
{
@ -91,10 +90,8 @@ namespace Server.Engines.Quests
}
}
public virtual void PlayTimer_Callback(object state)
public virtual void PlayTimer_Callback(Mobile from)
{
Mobile from = (Mobile)state;
m_PlayTimer = null;
HornOfRetreatMoongate gate = new HornOfRetreatMoongate(DestLoc, DestMap, from, Hue);
@ -168,7 +165,7 @@ namespace Server.Engines.Quests
public override void UseGate(Mobile m)
{
if (m.Region.IsPartOf(typeof(Jail)))
if (m.Region.IsPartOf<Jail>())
{
m.SendLocalizedMessage(1114345); // You'll need a better jailbreak plan than that!
}

View file

@ -1,4 +1,4 @@
using System.Collections;
using System.Collections.Generic;
using Server.Gumps;
using Server.Network;
@ -58,13 +58,13 @@ namespace Server.Engines.Quests
public class QuestConversationsGump : BaseQuestGump
{
private ArrayList m_Conversations;
private List<QuestConversation> m_Conversations;
public QuestConversationsGump(QuestConversation conv) : this(BuildList(conv))
public QuestConversationsGump(QuestConversation conv) : this(new List<QuestConversation>{ conv })
{
}
public QuestConversationsGump(ArrayList conversations) : base(30, 50)
public QuestConversationsGump(List<QuestConversation> conversations) : base(30, 50)
{
m_Conversations = conversations;
@ -101,7 +101,7 @@ namespace Server.Engines.Quests
for (int i = 0; i < conversations.Count; ++i)
{
QuestConversation conv = (QuestConversation)conversations[conversations.Count - 1 - i];
QuestConversation conv = conversations[conversations.Count - 1 - i];
if (i > 0)
{
@ -125,7 +125,7 @@ namespace Server.Engines.Quests
{
for (int i = m_Conversations.Count - 1; i >= 0; --i)
{
QuestConversation qc = (QuestConversation)m_Conversations[i];
QuestConversation qc = m_Conversations[i];
if (!qc.HasBeenRead)
{

View file

@ -1,4 +1,4 @@
using System.Collections;
using System.Collections.Generic;
using Server.Gumps;
using Server.Items;
using Server.Mobiles;
@ -164,13 +164,13 @@ namespace Server.Engines.Quests
public class QuestObjectivesGump : BaseQuestGump
{
private ArrayList m_Objectives;
private List<QuestObjective> m_Objectives;
public QuestObjectivesGump(QuestObjective obj) : this(BuildList(obj))
public QuestObjectivesGump(QuestObjective obj) : this(new List<QuestObjective>{ obj })
{
}
public QuestObjectivesGump(ArrayList objectives) : base(90, 50)
public QuestObjectivesGump(List<QuestObjective> objectives) : base(90, 50)
{
m_Objectives = objectives;
@ -217,7 +217,7 @@ namespace Server.Engines.Quests
for (int i = 0; i < objectives.Count; ++i)
{
QuestObjective obj = (QuestObjective)objectives[objectives.Count - 1 - i];
QuestObjective obj = objectives[objectives.Count - 1 - i];
if (i > 0)
{
@ -242,7 +242,7 @@ namespace Server.Engines.Quests
{
for (int i = m_Objectives.Count - 1; i >= 0; --i)
{
QuestObjective obj = (QuestObjective)m_Objectives[i];
QuestObjective obj = m_Objectives[i];
if (!obj.HasBeenRead)
{

View file

@ -44,7 +44,6 @@ namespace Server.Engines.Quests
switch (encoding)
{
default:
case 0x00: // null
{
return null;
}
@ -76,7 +75,6 @@ namespace Server.Engines.Quests
switch (encoding)
{
default:
case 0x00: // null
{
return null;
}
@ -116,7 +114,6 @@ namespace Server.Engines.Quests
switch (encoding)
{
default:
case 0x00: // null
{
return null;
}
@ -156,7 +153,6 @@ namespace Server.Engines.Quests
switch (encoding)
{
default:
case 0x00: // null
{
return null;
}

View file

@ -1,5 +1,4 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server.ContextMenus;
using Server.Engines.Quests.Ambitious;
@ -44,8 +43,8 @@ namespace Server.Engines.Quests
public QuestSystem(PlayerMobile from)
{
From = from;
Objectives = new ArrayList();
Conversations = new ArrayList();
Objectives = new List<QuestObjective>();
Conversations = new List<QuestConversation>();
}
public QuestSystem()
@ -64,9 +63,9 @@ namespace Server.Engines.Quests
public PlayerMobile From{ get; set; }
public ArrayList Objectives{ get; set; }
public List<QuestObjective> Objectives{ get; set; }
public ArrayList Conversations{ get; set; }
public List<QuestConversation> Conversations{ get; set; }
public virtual void StartTimer()
{
@ -87,7 +86,7 @@ namespace Server.Engines.Quests
{
for (int i = Objectives.Count - 1; i >= 0; --i)
{
QuestObjective obj = (QuestObjective)Objectives[i];
QuestObjective obj = Objectives[i];
if (obj.GetTimerEvent())
obj.CheckProgress();
@ -98,7 +97,7 @@ namespace Server.Engines.Quests
{
for (int i = Objectives.Count - 1; i >= 0; --i)
{
QuestObjective obj = (QuestObjective)Objectives[i];
QuestObjective obj = Objectives[i];
if (obj.GetKillEvent(creature, corpse))
obj.OnKill(creature, corpse);
@ -109,7 +108,7 @@ namespace Server.Engines.Quests
{
for (int i = Objectives.Count - 1; i >= 0; --i)
{
QuestObjective obj = (QuestObjective)Objectives[i];
QuestObjective obj = Objectives[i];
if (obj.IgnoreYoungProtection(from))
return true;
@ -130,7 +129,7 @@ namespace Server.Engines.Quests
{
int count = reader.ReadEncodedInt();
Objectives = new ArrayList(count);
Objectives = new List<QuestObjective>(count);
for (int i = 0; i < count; ++i)
{
@ -145,7 +144,7 @@ namespace Server.Engines.Quests
count = reader.ReadEncodedInt();
Conversations = new ArrayList(count);
Conversations = new List<QuestConversation>(count);
for (int i = 0; i < count; ++i)
{
@ -179,12 +178,12 @@ namespace Server.Engines.Quests
writer.WriteEncodedInt(Objectives.Count);
for (int i = 0; i < Objectives.Count; ++i)
QuestSerializer.Serialize(referenceTable, (QuestObjective)Objectives[i], writer);
QuestSerializer.Serialize(referenceTable, Objectives[i], writer);
writer.WriteEncodedInt(Conversations.Count);
for (int i = 0; i < Conversations.Count; ++i)
QuestSerializer.Serialize(referenceTable, (QuestConversation)Conversations[i], writer);
QuestSerializer.Serialize(referenceTable, Conversations[i], writer);
ChildSerialize(writer);
}
@ -198,14 +197,27 @@ namespace Server.Engines.Quests
{
QuestObjective obj = FindObjective(type);
return obj != null && !obj.Completed;
return obj?.Completed == false;
}
public T FindObjective<T>() where T : QuestObjective
{
for (int i = Objectives.Count - 1; i >= 0; --i)
{
QuestObjective obj = Objectives[i];
if (obj is T t)
return t;
}
return null;
}
public QuestObjective FindObjective(Type type)
{
for (int i = Objectives.Count - 1; i >= 0; --i)
{
QuestObjective obj = (QuestObjective)Objectives[i];
QuestObjective obj = Objectives[i];
if (obj.GetType() == type)
return obj;
@ -232,7 +244,7 @@ namespace Server.Engines.Quests
public virtual void ShowQuestLogUpdated()
{
From.CloseGump(typeof(QuestLogUpdatedGump));
From.CloseGump<QuestLogUpdatedGump>();
From.SendGump(new QuestLogUpdatedGump(this));
}
@ -240,14 +252,14 @@ namespace Server.Engines.Quests
{
if (Objectives.Count > 0)
{
From.CloseGump(typeof(QuestItemInfoGump));
From.CloseGump(typeof(QuestLogUpdatedGump));
From.CloseGump(typeof(QuestObjectivesGump));
From.CloseGump(typeof(QuestConversationsGump));
From.CloseGump<QuestItemInfoGump>();
From.CloseGump<QuestLogUpdatedGump>();
From.CloseGump<QuestObjectivesGump>();
From.CloseGump<QuestConversationsGump>();
From.SendGump(new QuestObjectivesGump(Objectives));
QuestObjective last = (QuestObjective)Objectives[Objectives.Count - 1];
QuestObjective last = Objectives[Objectives.Count - 1];
if (last.Info != null)
From.SendGump(new QuestItemInfoGump(last.Info));
@ -258,13 +270,13 @@ namespace Server.Engines.Quests
{
if (Conversations.Count > 0)
{
From.CloseGump(typeof(QuestItemInfoGump));
From.CloseGump(typeof(QuestObjectivesGump));
From.CloseGump(typeof(QuestConversationsGump));
From.CloseGump<QuestItemInfoGump>();
From.CloseGump<QuestObjectivesGump>();
From.CloseGump<QuestConversationsGump>();
From.SendGump(new QuestConversationsGump(Conversations));
QuestConversation last = (QuestConversation)Conversations[Conversations.Count - 1];
QuestConversation last = Conversations[Conversations.Count - 1];
if (last.Info != null)
From.SendGump(new QuestItemInfoGump(last.Info));
@ -348,14 +360,10 @@ namespace Server.Engines.Quests
if (conv.Logged)
Conversations.Add(conv);
From.CloseGump(typeof(QuestItemInfoGump));
From.CloseGump(typeof(QuestObjectivesGump));
From.CloseGump(typeof(QuestConversationsGump));
if (conv.Logged)
From.SendGump(new QuestConversationsGump(Conversations));
else
From.SendGump(new QuestConversationsGump(conv));
From.CloseGump<QuestItemInfoGump>();
From.CloseGump<QuestObjectivesGump>();
From.CloseGump<QuestConversationsGump>();
From.SendGump(conv.Logged ? new QuestConversationsGump(Conversations) : new QuestConversationsGump(conv));
if (conv.Info != null)
From.SendGump(new QuestItemInfoGump(conv.Info));
@ -387,9 +395,7 @@ namespace Server.Engines.Quests
public static bool CanOfferQuest(Mobile check, Type questType)
{
bool inRestartPeriod;
return CanOfferQuest(check, questType, out inRestartPeriod);
return CanOfferQuest(check, questType, out _);
}
public static bool CanOfferQuest(Mobile check, Type questType, out bool inRestartPeriod)
@ -399,7 +405,7 @@ namespace Server.Engines.Quests
if (!(check is PlayerMobile pm))
return false;
if (pm.HasGump(typeof(QuestOfferGump)))
if (pm.HasGump<QuestOfferGump>())
return false;
if (questType == typeof(DarkTidesQuest) && pm.Profession != 4) // necromancer
@ -653,11 +659,6 @@ namespace Server.Engines.Quests
return $"<BASEFONT COLOR=#{color:X6}>{text}</BASEFONT>";
}
public static ArrayList BuildList(object obj)
{
return new ArrayList { obj };
}
public void AddHtmlObject(int x, int y, int width, int height, object message, int color, bool back, bool scroll)
{
if (message is int html)
@ -666,4 +667,4 @@ namespace Server.Engines.Quests
AddHtml(x, y, width, height, Color(message.ToString(), C16232(color)), back, scroll);
}
}
}
}

View file

@ -29,7 +29,7 @@ namespace Server.Engines.Quests
if (m is PlayerMobile player && player.Quest != null && player.Quest.GetType() == m_Quest)
{
if (!player.HasGump(typeof(QuestCancelGump)))
if (!player.HasGump<QuestCancelGump>())
player.Quest.BeginCancelQuest();
return false;

View file

@ -30,7 +30,7 @@ namespace Server.Engines.Quests
{
QuestObjective obj = player.Quest.FindObjective(m_Objective);
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
}

View file

@ -30,7 +30,7 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SpeakCavePasswordObjective));
QuestObjective obj = qs.FindObjective<SpeakCavePasswordObjective>();
if (obj != null && obj.Completed)
{

View file

@ -58,9 +58,9 @@ namespace Server.Engines.Quests.Necro
{
if (pm.Map == m_WellOfTearsMap && m_WellOfTearsArea.Contains(pm))
{
QuestObjective obj = qs.FindObjective(typeof(UseCallingScrollObjective));
QuestObjective obj = qs.FindObjective<UseCallingScrollObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
Delete();

View file

@ -31,9 +31,9 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(FindCallingScrollObjective));
QuestObjective obj = qs.FindObjective<FindCallingScrollObjective>();
if (obj != null && !obj.Completed || DarkTidesQuest.HasLostCallingScroll(from))
if (obj?.Completed == false || DarkTidesQuest.HasLostCallingScroll(from))
{
Item scroll = new KronusScroll();
@ -42,7 +42,7 @@ namespace Server.Engines.Quests.Necro
pm.SendLocalizedMessage(1060120, "",
0x41); // You rummage through the scrolls until you find the Scroll of Calling. You quickly put it in your pack.
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
else

View file

@ -34,14 +34,10 @@ namespace Server.Engines.Quests.Necro
if (Maabus != null || SpawnLocation == Point3D.Zero)
return;
foreach (MaabusCoffinComponent c in Components)
c.TurnToEmpty();
Maabus = new Maabus();
Maabus.Location = SpawnLocation;
Maabus.Map = Map;
foreach (AddonComponent c in Components)
(c as MaabusCoffinComponent)?.TurnToEmpty();
Maabus = new Maabus { Location = SpawnLocation, Map = Map };
Maabus.Direction = Maabus.GetDirectionTo(caller);
Timer.DelayCall(TimeSpan.FromSeconds(7.5), BeginSleep);

View file

@ -34,9 +34,9 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(RetrieveAbraxusScrollObjective));
QuestObjective obj = qs.FindObjective<RetrieveAbraxusScrollObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
}
@ -54,9 +54,9 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(ReadAbraxusScrollObjective));
QuestObjective obj = qs.FindObjective<ReadAbraxusScrollObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
}

View file

@ -62,9 +62,9 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(FindCrystalCaveObjective));
QuestObjective obj = qs.FindObjective<FindCrystalCaveObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
}
@ -79,17 +79,17 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(ReturnToCrystalCaveObjective));
QuestObjective obj = qs.FindObjective<ReturnToCrystalCaveObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
else
{
obj = qs.FindObjective(typeof(FindHorusAboutRewardObjective));
obj = qs.FindObjective<FindHorusAboutRewardObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -127,8 +127,8 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SpeakCavePasswordObjective));
bool enabled = obj != null && !obj.Completed;
QuestObjective obj = qs.FindObjective<SpeakCavePasswordObjective>();
bool enabled = obj?.Completed == false;
list.Add(new SpeakPasswordEntry(this, pm, enabled));
}
@ -141,9 +141,9 @@ namespace Server.Engines.Quests.Necro
if (qs is DarkTidesQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SpeakCavePasswordObjective));
QuestObjective obj = qs.FindObjective<SpeakCavePasswordObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
return;

View file

@ -90,7 +90,7 @@ namespace Server.Engines.Quests.Necro
if (!(to.Quest is DarkTidesQuest qs))
return to.Quest == null && QuestSystem.CanOfferQuest(to, typeof(DarkTidesQuest));
return qs.FindObjective(typeof(FindMardothAboutVaultObjective)) != null;
return qs.FindObjective<FindMardothAboutVaultObjective>() != null;
}
public override void OnTalk(PlayerMobile player, bool contextMenu)
@ -105,25 +105,25 @@ namespace Server.Engines.Quests.Necro
}
else
{
QuestObjective obj = qs.FindObjective(typeof(FindMardothAboutVaultObjective));
QuestObjective obj = qs.FindObjective<FindMardothAboutVaultObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
else
{
obj = qs.FindObjective(typeof(FindMardothAboutKronusObjective));
obj = qs.FindObjective<FindMardothAboutKronusObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
else
{
obj = qs.FindObjective(typeof(FindMardothEndObjective));
obj = qs.FindObjective<FindMardothEndObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -196,7 +196,7 @@ namespace Server.Engines.Quests.Necro
m.PlaySound(0x214);
m.FixedEffect(0x376A, 10, 16);
m.CloseGump(typeof(ResurrectGump));
m.CloseGump<ResurrectGump>();
m.SendGump(new ResurrectGump(m, ResurrectMessage.Healer));
}
}

View file

@ -78,7 +78,7 @@ namespace Server.Engines.Quests.Necro
{
QuestSystem qs = m_Necromancer.Quest;
if (qs is DarkTidesQuest && qs.FindObjective(typeof(FindMardothEndObjective)) == null)
if (qs is DarkTidesQuest && qs.FindObjective<FindMardothEndObjective>() == null)
qs.AddObjective(new FindMardothEndObjective(false));
Say(1060139, m_Necromancer.Name); // You have made my work easy for me, ~1_NAME~. My task here is done.
@ -113,7 +113,7 @@ namespace Server.Engines.Quests.Necro
QuestSystem qs = m_Necromancer.Quest;
if (qs is DarkTidesQuest && qs.FindObjective(typeof(FindMardothEndObjective)) == null)
if (qs is DarkTidesQuest && qs.FindObjective<FindMardothEndObjective>() == null)
qs.AddObjective(new FindMardothEndObjective(true));
}

View file

@ -21,7 +21,7 @@ namespace Server.Engines.Quests.Ninja
{
QuestSystem qs = player.Quest;
if (qs is EminosUndertakingQuest && qs.FindObjective(typeof(GainInnInformationObjective)) != null)
if (qs is EminosUndertakingQuest && qs.FindObjective<GainInnInformationObjective>() != null)
{
loc = new Point3D(411, 1116, 0);
map = Map.Malas;

View file

@ -62,9 +62,9 @@ namespace Server.Engines.Quests.Ninja
}
else
{
QuestObjective obj = qs.FindObjective(typeof(HallwayWalkObjective));
QuestObjective obj = qs.FindObjective<HallwayWalkObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item katana = new EminosKatana();
@ -103,14 +103,14 @@ namespace Server.Engines.Quests.Ninja
return true;
if (from is PlayerMobile player && player.Quest is EminosUndertakingQuest)
if (player.Quest.FindObjective(typeof(HallwayWalkObjective)) is HallwayWalkObjective obj)
{
if (obj.StolenTreasure)
from.SendLocalizedMessage(
1063247); // The guard is watching you carefully! It would be unwise to remove another item from here.
else
return true;
}
{
HallwayWalkObjective obj = player.Quest.FindObjective<HallwayWalkObjective>();
if (obj?.StolenTreasure == true)
from.SendLocalizedMessage(
1063247); // The guard is watching you carefully! It would be unwise to remove another item from here.
else
return true;
}
return false;
}
@ -118,8 +118,11 @@ namespace Server.Engines.Quests.Ninja
public override void OnItemLifted(Mobile from, Item item)
{
if (from is PlayerMobile player && player.Quest is EminosUndertakingQuest)
if (player.Quest.FindObjective(typeof(HallwayWalkObjective)) is HallwayWalkObjective obj)
{
HallwayWalkObjective obj = player.Quest.FindObjective<HallwayWalkObjective>();
if (obj != null)
obj.StolenTreasure = true;
}
}
public override void Serialize(GenericWriter writer)

View file

@ -21,7 +21,7 @@ namespace Server.Engines.Quests.Ninja
{
QuestSystem qs = player.Quest;
if (qs is EminosUndertakingQuest && qs.FindObjective(typeof(UseTeleporterObjective)) != null)
if (qs is EminosUndertakingQuest && qs.FindObjective<UseTeleporterObjective>() != null)
{
loc = new Point3D(410, 1125, 0);
map = Map.Malas;

View file

@ -32,19 +32,21 @@ namespace Server.Engines.Quests.Ninja
return master != null && Y >= master.Y && master.InRange(this, 4);
}
if (m is PlayerMobile pm)
if (pm.Quest is EminosUndertakingQuest qs)
if (qs.FindObjective(typeof(SneakPastGuardiansObjective)) is SneakPastGuardiansObjective obj)
{
if (m.Hidden)
return true; // Hidden ninjas can pass
if (m is PlayerMobile pm && pm.Quest is EminosUndertakingQuest qs)
{
SneakPastGuardiansObjective obj = qs.FindObjective<SneakPastGuardiansObjective>();
if (obj != null)
{
if (m.Hidden)
return true; // Hidden ninjas can pass
if (!obj.TaughtHowToUseSkills)
{
obj.TaughtHowToUseSkills = true;
qs.AddConversation(new NeedToHideConversation());
}
if (!obj.TaughtHowToUseSkills)
{
obj.TaughtHowToUseSkills = true;
qs.AddConversation(new NeedToHideConversation());
}
}
}
return false;
}

View file

@ -23,7 +23,7 @@ namespace Server.Engines.Quests.Ninja
if (qs is EminosUndertakingQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SearchForSwordObjective));
QuestObjective obj = qs.FindObjective<SearchForSwordObjective>();
if (obj != null)
{

View file

@ -79,17 +79,17 @@ namespace Server.Engines.Quests.Ninja
}
else
{
QuestObjective obj = qs.FindObjective(typeof(FindEminoBeginObjective));
QuestObjective obj = qs.FindObjective<FindEminoBeginObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
else
{
obj = qs.FindObjective(typeof(UseTeleporterObjective));
obj = qs.FindObjective<UseTeleporterObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item note = new NoteForZoel();
@ -109,9 +109,9 @@ namespace Server.Engines.Quests.Ninja
}
else
{
obj = qs.FindObjective(typeof(ReturnFromInnObjective));
obj = qs.FindObjective<ReturnFromInnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -140,9 +140,9 @@ namespace Server.Engines.Quests.Ninja
}
else
{
obj = qs.FindObjective(typeof(GiveEminoSwordObjective));
obj = qs.FindObjective<GiveEminoSwordObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item katana = null;
@ -153,7 +153,9 @@ namespace Server.Engines.Quests.Ninja
{
bool stolenTreasure = false;
if (qs.FindObjective(typeof(HallwayWalkObjective)) is HallwayWalkObjective walk)
HallwayWalkObjective walk = qs.FindObjective<HallwayWalkObjective>();
if (walk != null)
stolenTreasure = walk.StolenTreasure;
Kama kama = new Kama();
@ -206,7 +208,7 @@ namespace Server.Engines.Quests.Ninja
m.PlaySound(0x214);
m.FixedEffect(0x376A, 10, 16);
m.CloseGump(typeof(ResurrectGump));
m.CloseGump<ResurrectGump>();
m.SendGump(new ResurrectGump(m, ResurrectMessage.Healer));
}
}

View file

@ -10,7 +10,7 @@ namespace Server.Engines.Quests.Ninja
{
InitStats(45, 30, 5);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Body = 0x190;
Utility.AssignRandomHair(this);

View file

@ -31,7 +31,7 @@ namespace Server.Engines.Quests.Ninja
{
InitStats(100, 100, 25);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Female = Utility.RandomBool();

View file

@ -62,9 +62,9 @@ namespace Server.Engines.Quests.Ninja
if (qs is EminosUndertakingQuest)
{
QuestObjective obj = qs.FindObjective(typeof(FindZoelObjective));
QuestObjective obj = qs.FindObjective<FindZoelObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
}
@ -78,9 +78,9 @@ namespace Server.Engines.Quests.Ninja
if (qs is EminosUndertakingQuest)
if (dropped is NoteForZoel)
{
QuestObjective obj = qs.FindObjective(typeof(GiveZoelNoteObjective));
QuestObjective obj = qs.FindObjective<GiveZoelNoteObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
dropped.Delete();
obj.Complete();
@ -109,7 +109,7 @@ namespace Server.Engines.Quests.Ninja
m.PlaySound(0x214);
m.FixedEffect(0x376A, 10, 16);
m.CloseGump(typeof(ResurrectGump));
m.CloseGump<ResurrectGump>();
m.SendGump(new ResurrectGump(m, ResurrectMessage.Healer));
}
}

View file

@ -38,9 +38,9 @@ namespace Server.Engines.Quests.Samurai
}
else
{
QuestObjective obj = qs.FindObjective(typeof(FifthTrialIntroObjective));
QuestObjective obj = qs.FindObjective<FifthTrialIntroObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item katana = new HaochisKatana();

View file

@ -57,14 +57,14 @@ namespace Server.Engines.Quests.Samurai
return true;
if (from is PlayerMobile player && player.Quest is HaochisTrialsQuest)
if (player.Quest.FindObjective(typeof(FifthTrialIntroObjective)) is FifthTrialIntroObjective obj)
{
if (obj.StolenTreasure)
from.SendLocalizedMessage(
1063247); // The guard is watching you carefully! It would be unwise to remove another item from here.
else
return true;
}
{
FifthTrialIntroObjective obj = player.Quest.FindObjective<FifthTrialIntroObjective>();
if (obj?.StolenTreasure == true)
from.SendLocalizedMessage(
1063247); // The guard is watching you carefully! It would be unwise to remove another item from here.
else
return true;
}
return false;
}
@ -72,8 +72,11 @@ namespace Server.Engines.Quests.Samurai
public override void OnItemLifted(Mobile from, Item item)
{
if (from is PlayerMobile player && player.Quest is HaochisTrialsQuest)
if (player.Quest.FindObjective(typeof(FifthTrialIntroObjective)) is FifthTrialIntroObjective obj)
{
FifthTrialIntroObjective obj = player.Quest.FindObjective<FifthTrialIntroObjective>();
if (obj != null)
obj.StolenTreasure = true;
}
Timer.DelayCall(TimeSpan.FromMinutes(2.0), GenerateTreasure);
}

View file

@ -37,9 +37,9 @@ namespace Server.Engines.Quests.Samurai
if (qs is HaochisTrialsQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SixthTrialIntroObjective));
QuestObjective obj = qs.FindObjective<SixthTrialIntroObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
SendLocalizedMessageTo(from, 1063251); // You light a candle in honor.

View file

@ -52,8 +52,8 @@ namespace Server.Engines.Quests.Samurai
QuestSystem qs = player.Quest;
if (qs is HaochisTrialsQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SecondTrialAttackObjective));
if (obj != null && !obj.Completed)
QuestObjective obj = qs.FindObjective<SecondTrialAttackObjective>();
if (obj?.Completed == false)
{
obj.Complete();
qs.AddObjective(new SecondTrialReturnObjective(false));

View file

@ -74,8 +74,8 @@ namespace Server.Engines.Quests.Samurai
QuestSystem qs = player.Quest;
if (qs is HaochisTrialsQuest)
{
QuestObjective obj = qs.FindObjective(typeof(SecondTrialAttackObjective));
if (obj != null && !obj.Completed)
QuestObjective obj = qs.FindObjective<SecondTrialAttackObjective>();
if (obj?.Completed == false)
{
obj.Complete();
qs.AddObjective(new SecondTrialReturnObjective(true));

View file

@ -60,26 +60,26 @@ namespace Server.Engines.Quests.Samurai
return;
}
QuestObjective obj = qs.FindObjective(typeof(FindHaochiObjective));
QuestObjective obj = qs.FindObjective<FindHaochiObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
return;
}
obj = qs.FindObjective(typeof(FirstTrialReturnObjective));
obj = qs.FindObjective<FirstTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
player.AddToBackpack(new LeatherDo());
obj.Complete();
return;
}
obj = qs.FindObjective(typeof(SecondTrialReturnObjective));
obj = qs.FindObjective<SecondTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
if (((SecondTrialReturnObjective)obj).Dragon)
player.AddToBackpack(new LeatherSuneate());
@ -88,18 +88,18 @@ namespace Server.Engines.Quests.Samurai
return;
}
obj = qs.FindObjective(typeof(ThirdTrialReturnObjective));
obj = qs.FindObjective<ThirdTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
player.AddToBackpack(new LeatherHiroSode());
obj.Complete();
return;
}
obj = qs.FindObjective(typeof(FourthTrialReturnObjective));
obj = qs.FindObjective<FourthTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
if (!((FourthTrialReturnObjective)obj).KilledCat)
{
@ -113,9 +113,9 @@ namespace Server.Engines.Quests.Samurai
return;
}
obj = qs.FindObjective(typeof(FifthTrialReturnObjective));
obj = qs.FindObjective<FifthTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
HaochisKatana katana = player.Backpack?.FindItemByType<HaochisKatana>();
if (katana == null)
@ -124,24 +124,24 @@ namespace Server.Engines.Quests.Samurai
katana.Delete();
obj.Complete();
obj = qs.FindObjective(typeof(FifthTrialIntroObjective));
obj = qs.FindObjective<FifthTrialIntroObjective>();
if (obj != null && ((FifthTrialIntroObjective)obj).StolenTreasure)
qs.AddConversation(new SixthTrialIntroConversation(true));
else
qs.AddConversation(new SixthTrialIntroConversation(false));
}
obj = qs.FindObjective(typeof(SixthTrialReturnObjective));
obj = qs.FindObjective<SixthTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
return;
}
obj = qs.FindObjective(typeof(SeventhTrialReturnObjective));
obj = qs.FindObjective<SeventhTrialReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
BaseWeapon weapon = new Daisho();
BaseRunicTool.ApplyAttributesTo(weapon, Utility.Random(1, 3), 10, 30);

View file

@ -52,9 +52,9 @@ namespace Server.Engines.Quests.Samurai
if (qs is HaochisTrialsQuest)
{
QuestObjective obj = qs.FindObjective(typeof(FourthTrialCatsObjective));
QuestObjective obj = qs.FindObjective<FourthTrialCatsObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
if (dropped is Gold gold)
{
obj.Complete();

View file

@ -11,7 +11,7 @@ namespace Server.Engines.Quests.Samurai
InitStats(45, 30, 5);
SetHits(20, 30);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Body = 0x190;
Utility.AssignRandomHair(this);

View file

@ -11,7 +11,7 @@ namespace Server.Engines.Quests.Samurai
InitStats(45, 30, 5);
SetHits(10, 20);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Body = 0x190;
Utility.AssignRandomHair(this);

View file

@ -52,9 +52,9 @@ namespace Server.Engines.Quests.Matriarch
}
else
{
QuestObjective obj = qs.FindObjective(typeof(ReturnAfterKillsObjective));
QuestObjective obj = qs.FindObjective<ReturnAfterKillsObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -64,9 +64,9 @@ namespace Server.Engines.Quests.Matriarch
}
else
{
obj = qs.FindObjective(typeof(ReturnAfterWaterObjective));
obj = qs.FindObjective<ReturnAfterWaterObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
@ -76,9 +76,9 @@ namespace Server.Engines.Quests.Matriarch
}
else
{
obj = qs.FindObjective(typeof(GetRewardObjective));
obj = qs.FindObjective<GetRewardObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
if (SolenMatriarchQuest.GiveRewardTo(player))
obj.Complete();
@ -153,9 +153,9 @@ namespace Server.Engines.Quests.Matriarch
if (player.Quest is SolenMatriarchQuest qs && qs.RedSolen == RedSolen)
{
QuestObjective obj = qs.FindObjective(typeof(ProcessFungiObjective));
QuestObjective obj = qs.FindObjective<ProcessFungiObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
int amount = fungi.Amount / 2;

View file

@ -19,7 +19,7 @@ namespace Server.Engines.Quests.Naturalist
{
InitStats(100, 100, 25);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Female = false;
Body = 0x190;
@ -41,119 +41,119 @@ namespace Server.Engines.Quests.Naturalist
{
if (player.Quest is StudyOfSolenQuest qs && qs.Naturalist == this)
{
if (qs.FindObjective(typeof(StudyNestsObjective)) is StudyNestsObjective study)
StudyNestsObjective study = qs.FindObjective<StudyNestsObjective>();
if (study == null)
return;
if (!study.Completed)
{
if (!study.Completed)
PlaySound(0x41F);
qs.AddConversation(new NaturalistDuringStudyConversation());
return;
}
QuestObjective obj = qs.FindObjective<ReturnToNaturalistObjective>();
if (obj?.Completed == false)
{
Seed reward;
PlantType type;
switch (Utility.Random(17))
{
PlaySound(0x41F);
qs.AddConversation(new NaturalistDuringStudyConversation());
case 0:
type = PlantType.CampionFlowers;
break;
case 1:
type = PlantType.Poppies;
break;
case 2:
type = PlantType.Snowdrops;
break;
case 3:
type = PlantType.Bulrushes;
break;
case 4:
type = PlantType.Lilies;
break;
case 5:
type = PlantType.PampasGrass;
break;
case 6:
type = PlantType.Rushes;
break;
case 7:
type = PlantType.ElephantEarPlant;
break;
case 8:
type = PlantType.Fern;
break;
case 9:
type = PlantType.PonytailPalm;
break;
case 10:
type = PlantType.SmallPalm;
break;
case 11:
type = PlantType.CenturyPlant;
break;
case 12:
type = PlantType.WaterPlant;
break;
case 13:
type = PlantType.SnakePlant;
break;
case 14:
type = PlantType.PricklyPearCactus;
break;
case 15:
type = PlantType.BarrelCactus;
break;
default:
type = PlantType.TribarrelCactus;
break;
}
if (study.StudiedSpecialNest)
{
reward = new Seed(type, PlantHue.FireRed, false);
}
else
{
QuestObjective obj = qs.FindObjective(typeof(ReturnToNaturalistObjective));
if (obj != null && !obj.Completed)
PlantHue hue;
switch (Utility.Random(3))
{
Seed reward;
PlantType type;
switch (Utility.Random(17))
{
case 0:
type = PlantType.CampionFlowers;
break;
case 1:
type = PlantType.Poppies;
break;
case 2:
type = PlantType.Snowdrops;
break;
case 3:
type = PlantType.Bulrushes;
break;
case 4:
type = PlantType.Lilies;
break;
case 5:
type = PlantType.PampasGrass;
break;
case 6:
type = PlantType.Rushes;
break;
case 7:
type = PlantType.ElephantEarPlant;
break;
case 8:
type = PlantType.Fern;
break;
case 9:
type = PlantType.PonytailPalm;
break;
case 10:
type = PlantType.SmallPalm;
break;
case 11:
type = PlantType.CenturyPlant;
break;
case 12:
type = PlantType.WaterPlant;
break;
case 13:
type = PlantType.SnakePlant;
break;
case 14:
type = PlantType.PricklyPearCactus;
break;
case 15:
type = PlantType.BarrelCactus;
break;
default:
type = PlantType.TribarrelCactus;
break;
}
if (study.StudiedSpecialNest)
{
reward = new Seed(type, PlantHue.FireRed, false);
}
else
{
PlantHue hue;
switch (Utility.Random(3))
{
case 0:
hue = PlantHue.Pink;
break;
case 1:
hue = PlantHue.Magenta;
break;
default:
hue = PlantHue.Aqua;
break;
}
reward = new Seed(type, hue, false);
}
if (player.PlaceInBackpack(reward))
{
obj.Complete();
PlaySound(0x449);
PlaySound(0x41B);
if (study.StudiedSpecialNest)
qs.AddConversation(new SpecialEndConversation());
else
qs.AddConversation(new EndConversation());
}
else
{
reward.Delete();
qs.AddConversation(new FullBackpackConversation());
}
case 0:
hue = PlantHue.Pink;
break;
case 1:
hue = PlantHue.Magenta;
break;
default:
hue = PlantHue.Aqua;
break;
}
reward = new Seed(type, hue, false);
}
if (player.PlaceInBackpack(reward))
{
obj.Complete();
PlaySound(0x449);
PlaySound(0x41B);
if (study.StudiedSpecialNest)
qs.AddConversation(new SpecialEndConversation());
else
qs.AddConversation(new EndConversation());
}
else
{
reward.Delete();
qs.AddConversation(new FullBackpackConversation());
}
}
}

View file

@ -1,5 +1,5 @@
using System;
using System.Collections;
using System.Collections.Generic;
using Server.Mobiles;
namespace Server.Engines.Quests.Naturalist
@ -8,15 +8,10 @@ namespace Server.Engines.Quests.Naturalist
{
private NestArea m_CurrentNest;
private ArrayList m_StudiedNests;
private List<NestArea> m_StudiedNests = new List<NestArea>();
private DateTime m_StudyBegin;
private StudyState m_StudyState;
public StudyNestsObjective()
{
m_StudiedNests = new ArrayList();
}
public override object Message => 1054044;
public override int MaxProgress => NestArea.NonSpecialCount;
@ -154,7 +149,8 @@ namespace Server.Engines.Quests.Naturalist
writer.WriteEncodedInt(0); // version
writer.WriteEncodedInt(m_StudiedNests.Count);
foreach (NestArea nest in m_StudiedNests) writer.WriteEncodedInt(nest.ID);
foreach (NestArea nest in m_StudiedNests)
writer.WriteEncodedInt(nest.ID);
writer.Write(StudiedSpecialNest);
}

View file

@ -62,9 +62,9 @@ namespace Server.Engines.Quests.Zento
}
else
{
QuestObjective obj = qs.FindObjective(typeof(ReturnObjective));
QuestObjective obj = qs.FindObjective<ReturnObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -103,7 +103,6 @@ namespace Server.Engines.Quests.Zento
else
{
TerribleHatchlingsQuest newQuest = new TerribleHatchlingsQuest(player);
bool inRestartPeriod = false;
if (qs != null)
{
@ -111,7 +110,7 @@ namespace Server.Engines.Quests.Zento
SayTo(player,
1063322); // Before you can help me with the Terrible Hatchlings, you'll need to finish the quest you've already taken!
}
else if (QuestSystem.CanOfferQuest(player, typeof(TerribleHatchlingsQuest), out inRestartPeriod))
else if (QuestSystem.CanOfferQuest(player, typeof(TerribleHatchlingsQuest), out bool inRestartPeriod))
{
newQuest.SendOffer();
}

View file

@ -55,20 +55,18 @@ namespace Server.Engines.Quests.Doom
Effects.PlaySound(GetWorldLocation(), Map, 0x100);
Timer.DelayCall(TimeSpan.FromSeconds(8.0), new TimerStateCallback(EndSummon), from);
Timer.DelayCall(TimeSpan.FromSeconds(8.0), () => EndSummon(from));
}
}
public virtual void EndSummon(object state)
public virtual void EndSummon(Mobile from)
{
Mobile from = (Mobile)state;
if (Chyloth != null && !Chyloth.Deleted)
if (Chyloth?.Deleted == false)
{
from.SendLocalizedMessage(
1050010); // The ferry man has already been summoned. There is no need to ring for him again.
}
else if (Dragon != null && !Dragon.Deleted)
else if (Dragon?.Deleted == false)
{
from.SendLocalizedMessage(
1050017); // The ferryman has recently been summoned already. You decide against ringing the bell again so soon.

View file

@ -188,7 +188,7 @@ namespace Server.Engines.Quests.Doom
if (AngryAt == member)
AngryAt = null;
member.CloseGump(typeof(ChylothPartyGump));
member.CloseGump<ChylothPartyGump>();
member.SendGump(new ChylothPartyGump(from, member));
}
}

View file

@ -76,9 +76,9 @@ namespace Server.Engines.Quests.Doom
if (qs is TheSummoningQuest)
if (dropped is DaemonBone bones)
{
QuestObjective obj = qs.FindObjective(typeof(CollectBonesObjective));
QuestObjective obj = qs.FindObjective<CollectBonesObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
int need = obj.MaxProgress - obj.CurProgress;

View file

@ -75,7 +75,7 @@ namespace Server.Engines.Quests.Doom
{
base.Cancel();
QuestObjective obj = FindObjective(typeof(CollectBonesObjective));
QuestObjective obj = FindObjective<CollectBonesObjective>();
if (obj != null && obj.CurProgress > 0)
{

View file

@ -23,9 +23,9 @@ namespace Server.Engines.Quests.Haven
if (qs is UzeraanTurmoilQuest)
{
QuestObjective obj = qs.FindObjective(typeof(GetDaemonBloodObjective));
QuestObjective obj = qs.FindObjective<GetDaemonBloodObjective>();
if (obj != null && !obj.Completed || UzeraanTurmoilQuest.HasLostDaemonBlood(player))
if (obj?.Completed == false || UzeraanTurmoilQuest.HasLostDaemonBlood(player))
{
Item vial = new QuestDaemonBlood();
@ -34,7 +34,7 @@ namespace Server.Engines.Quests.Haven
player.SendLocalizedMessage(1049331, "",
0x22); // You take a vial of blood from the chest and put it in your pack.
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
obj.Complete();
}
else

View file

@ -17,11 +17,10 @@ namespace Server.Engines.Quests.Haven
{
Direction = Direction.West;
foreach (Item item in EquipItems) DropItem(item);
foreach (Item item in EquipItems)
DropItem(item);
m_Lantern = new Lantern();
m_Lantern.Movable = false;
m_Lantern.Protected = true;
m_Lantern = new Lantern { Movable = false, Protected = true };
m_Lantern.Ignite();
}
@ -29,11 +28,12 @@ namespace Server.Engines.Quests.Haven
{
}
// TODO: What is this? Why are we creating and deleting a mobile?
private static Mobile GetOwner()
{
Mobile apprentice = new Mobile();
apprentice.Hue = Utility.RandomSkinHue();
apprentice.Hue = Race.Human.RandomSkinHue();
apprentice.Female = false;
apprentice.Body = 0x190;
apprentice.Name = NameList.RandomName("male");
@ -50,32 +50,6 @@ namespace Server.Engines.Quests.Haven
list.Add(new Robe(QuestSystem.RandomBrightHue()));
list.Add(new WizardsHat(Utility.RandomNeutralHue()));
list.Add(new Shoes(Utility.RandomNeutralHue()));
/*
int hairHue = Utility.RandomHairHue();
switch ( Utility.Random( 8 ) )
{
case 0: list.Add( new Afro( hairHue ) ); break;
case 1: list.Add( new KrisnaHair( hairHue ) ); break;
case 2: list.Add( new PageboyHair( hairHue ) ); break;
case 3: list.Add( new PonyTail( hairHue ) ); break;
case 4: list.Add( new ReceedingHair( hairHue ) ); break;
case 5: list.Add( new TwoPigTails( hairHue ) ); break;
case 6: list.Add( new ShortHair( hairHue ) ); break;
case 7: list.Add( new LongHair( hairHue ) ); break;
}
switch ( Utility.Random( 5 ) )
{
case 0: list.Add( new LongBeard( hairHue ) ); break;
case 1: list.Add( new MediumLongBeard( hairHue ) ); break;
case 2: list.Add( new Vandyke( hairHue ) ); break;
case 3: list.Add( new Mustache( hairHue ) ); break;
case 4: list.Add( new Goatee( hairHue ) ); break;
}
* */
list.Add(new Spellbook());
return list;
@ -84,7 +58,6 @@ namespace Server.Engines.Quests.Haven
private static HairInfo GetHair()
{
m_HairHue = Race.Human.RandomHairHue();
return new HairInfo(Race.Human.RandomHair(false), m_HairHue);
}
@ -131,9 +104,9 @@ namespace Server.Engines.Quests.Haven
if (qs is UzeraanTurmoilQuest)
{
QuestObjective obj = qs.FindObjective(typeof(FindApprenticeObjective));
QuestObjective obj = qs.FindObjective<FindApprenticeObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item scroll = new SchmendrickScrollOfPower();

View file

@ -63,7 +63,7 @@ namespace Server.Engines.Quests.Haven
public override bool CanTalkTo(PlayerMobile to)
{
return to.Quest is UzeraanTurmoilQuest qs && qs.FindObjective(typeof(FindDryadObjective)) != null;
return to.Quest is UzeraanTurmoilQuest qs && qs.FindObjective<FindDryadObjective>() != null;
}
public override void OnTalk(PlayerMobile player, bool contextMenu)
@ -79,9 +79,9 @@ namespace Server.Engines.Quests.Haven
}
else
{
QuestObjective obj = qs.FindObjective(typeof(FindDryadObjective));
QuestObjective obj = qs.FindObjective<FindDryadObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
FocusTo(player);

View file

@ -18,7 +18,7 @@ namespace Server.Engines.Quests.Haven
{
InitStats(100, 100, 25);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Female = false;
Body = 0x190;

View file

@ -22,7 +22,7 @@ namespace Server.Engines.Quests.Haven
{
InitStats(100, 125, 25);
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Female = false;
Body = 0x190;

View file

@ -16,7 +16,7 @@ namespace Server.Engines.Quests.Haven
SpeechHue = Utility.RandomDyedHue();
Hue = Utility.RandomSkinHue();
Hue = Race.Human.RandomSkinHue();
Female = false;
Body = 0x190;

View file

@ -55,7 +55,7 @@ namespace Server.Engines.Quests.Haven
public override bool CanTalkTo(PlayerMobile to)
{
return to.Quest is UzeraanTurmoilQuest qs && qs.FindObjective(typeof(FindSchmendrickObjective)) != null;
return to.Quest is UzeraanTurmoilQuest qs && qs.FindObjective<FindSchmendrickObjective>() != null;
}
public override void OnTalk(PlayerMobile player, bool contextMenu)
@ -71,9 +71,9 @@ namespace Server.Engines.Quests.Haven
}
else
{
QuestObjective obj = qs.FindObjective(typeof(FindSchmendrickObjective));
QuestObjective obj = qs.FindObjective<FindSchmendrickObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
FocusTo(player);
obj.Complete();
@ -129,7 +129,7 @@ namespace Server.Engines.Quests.Haven
m.PlaySound(0x214);
m.FixedEffect(0x376A, 10, 16);
m.CloseGump(typeof(ResurrectGump));
m.CloseGump<ResurrectGump>();
m.SendGump(new ResurrectGump(m, ResurrectMessage.Healer));
}
}

View file

@ -94,25 +94,25 @@ namespace Server.Engines.Quests.Haven
qs.AddConversation(new FewReagentsConversation());
}
QuestObjective obj = qs.FindObjective(typeof(FindUzeraanBeginObjective));
QuestObjective obj = qs.FindObjective<FindUzeraanBeginObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
else
{
obj = qs.FindObjective(typeof(FindUzeraanFirstTaskObjective));
obj = qs.FindObjective<FindUzeraanFirstTaskObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
obj.Complete();
}
else
{
obj = qs.FindObjective(typeof(FindUzeraanAboutReportObjective));
obj = qs.FindObjective<FindUzeraanAboutReportObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -145,36 +145,36 @@ namespace Server.Engines.Quests.Haven
}
else
{
obj = qs.FindObjective(typeof(ReturnScrollOfPowerObjective));
obj = qs.FindObjective<ReturnScrollOfPowerObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
FocusTo(player);
SayTo(player, 1049378); // Hand me the scroll, if you have it.
}
else
{
obj = qs.FindObjective(typeof(ReturnFertileDirtObjective));
obj = qs.FindObjective<ReturnFertileDirtObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
FocusTo(player);
SayTo(player, 1049381); // Hand me the Fertile Dirt, if you have it.
}
else
{
obj = qs.FindObjective(typeof(ReturnDaemonBloodObjective));
obj = qs.FindObjective<ReturnDaemonBloodObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
FocusTo(player);
SayTo(player, 1049379); // Hand me the Vial of Blood, if you have it.
}
else
{
obj = qs.FindObjective(typeof(ReturnDaemonBoneObjective));
obj = qs.FindObjective<ReturnDaemonBoneObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
FocusTo(player);
SayTo(player, 1049380); // Hand me the Daemon Bone, if you have it.
@ -225,9 +225,9 @@ namespace Server.Engines.Quests.Haven
if (dropped is SchmendrickScrollOfPower)
{
QuestObjective obj = qs.FindObjective(typeof(ReturnScrollOfPowerObjective));
QuestObjective obj = qs.FindObjective<ReturnScrollOfPowerObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -250,9 +250,9 @@ namespace Server.Engines.Quests.Haven
}
else if (dropped is QuestFertileDirt)
{
QuestObjective obj = qs.FindObjective(typeof(ReturnFertileDirtObjective));
QuestObjective obj = qs.FindObjective<ReturnFertileDirtObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -294,9 +294,9 @@ namespace Server.Engines.Quests.Haven
}
else if (dropped is QuestDaemonBlood)
{
QuestObjective obj = qs.FindObjective(typeof(ReturnDaemonBloodObjective));
QuestObjective obj = qs.FindObjective<ReturnDaemonBloodObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Item reward;
@ -365,9 +365,9 @@ namespace Server.Engines.Quests.Haven
}
else if (dropped is QuestDaemonBone)
{
QuestObjective obj = qs.FindObjective(typeof(ReturnDaemonBoneObjective));
QuestObjective obj = qs.FindObjective<ReturnDaemonBoneObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
cont.DropItem(new BankCheck(2000));
@ -409,7 +409,7 @@ namespace Server.Engines.Quests.Haven
m.PlaySound(0x214);
m.FixedEffect(0x376A, 10, 16);
m.CloseGump(typeof(ResurrectGump));
m.CloseGump<ResurrectGump>();
m.SendGump(new ResurrectGump(m, ResurrectMessage.Healer));
}
}

View file

@ -119,7 +119,8 @@ namespace Server.Engines.Quests.Hag
public override void OnRead()
{
if (System.FindObjective(typeof(FindIngredientObjective)) is FindIngredientObjective obj)
FindIngredientObjective obj = System.FindObjective<FindIngredientObjective>();
if (obj != null)
System.AddObjective(new FindIngredientObjective(obj.Ingredients, true));
}
}
@ -253,8 +254,7 @@ namespace Server.Engines.Quests.Hag
public override void OnRead()
{
if (System.FindObjective(typeof(FindIngredientObjective)) is FindIngredientObjective obj)
obj.NextStep();
System.FindObjective<FindIngredientObjective>()?.NextStep();
}
public override void ChildDeserialize(GenericReader reader)

View file

@ -13,18 +13,20 @@ namespace Server.Engines.Quests.Hag
{
Direction = Direction.South;
foreach (Item item in EquipItems) DropItem(item);
foreach (Item item in EquipItems)
DropItem(item);
}
public HagApprenticeCorpse(Serial serial) : base(serial)
{
}
// TODO: What is this? Why are we creating a mobile and deleting it?
private static Mobile GetOwner()
{
Mobile apprentice = new Mobile();
apprentice.Hue = Utility.RandomSkinHue();
apprentice.Hue = Race.Human.RandomSkinHue();
apprentice.Female = false;
apprentice.Body = 0x190;
@ -60,7 +62,9 @@ namespace Server.Engines.Quests.Hag
QuestSystem qs = player.Quest;
if (qs is WitchApprenticeQuest)
if (qs.FindObjective(typeof(FindApprenticeObjective)) is FindApprenticeObjective obj && !obj.Completed)
{
FindApprenticeObjective obj = qs.FindObjective<FindApprenticeObjective>();
if (obj?.Completed == false)
{
if (obj.Corpse == this)
{
@ -75,6 +79,7 @@ namespace Server.Engines.Quests.Hag
return;
}
}
}
SendLocalizedMessageTo(from, 1055048); // You examine the corpse, but find nothing of interest.

View file

@ -31,7 +31,9 @@ namespace Server.Engines.Quests.Hag
QuestSystem qs = player.Quest;
if (qs is WitchApprenticeQuest)
if (qs.FindObjective(typeof(FindZeefzorpulObjective)) is FindZeefzorpulObjective obj && !obj.Completed)
{
FindZeefzorpulObjective obj = qs.FindObjective<FindZeefzorpulObjective>();
if (obj?.Completed == false)
{
if (player.Map != Map.Trammel && player.Map != Map.Felucca || !player.InRange(obj.ImpLocation, 8))
{
@ -50,6 +52,7 @@ namespace Server.Engines.Quests.Hag
1055052); // The flute sparkles. Zeefzorpul must be in a good hiding place nearby.
}
}
}
}
}

View file

@ -56,8 +56,9 @@ namespace Server.Engines.Quests.Hag
QuestSystem qs = player.Quest;
if (qs is WitchApprenticeQuest)
if (qs.FindObjective(typeof(FindIngredientObjective)) is FindIngredientObjective obj && !obj.Completed &&
obj.Ingredient == Ingredient.Whiskey)
{
FindIngredientObjective obj = qs.FindObjective<FindIngredientObjective>();
if (obj?.Completed == false && obj.Ingredient == Ingredient.Whiskey)
{
PlaySound(Utility.RandomBool() ? 0x42E : 0x43F);
@ -83,6 +84,7 @@ namespace Server.Engines.Quests.Hag
return;
}
}
PlaySound(0x42C);
SayTo(player, 1055041); // The drunken pirate shakes his fist at you and goes back to drinking.

View file

@ -57,9 +57,9 @@ namespace Server.Engines.Quests.Hag
}
else
{
QuestObjective obj = qs.FindObjective(typeof(FindGrizeldaAboutMurderObjective));
QuestObjective obj = qs.FindObjective<FindGrizeldaAboutMurderObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
PlaySound(0x420);
PlaySound(0x20);
@ -74,9 +74,9 @@ namespace Server.Engines.Quests.Hag
}
else
{
obj = qs.FindObjective(typeof(ReturnRecipeObjective));
obj = qs.FindObjective<ReturnRecipeObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
PlaySound(0x258);
PlaySound(0x41B);
@ -90,9 +90,9 @@ namespace Server.Engines.Quests.Hag
}
else
{
obj = qs.FindObjective(typeof(ReturnIngredientsObjective));
obj = qs.FindObjective<ReturnIngredientsObjective>();
if (obj != null && !obj.Completed)
if (obj?.Completed == false)
{
Container cont = GetNewContainer();
@ -181,13 +181,12 @@ namespace Server.Engines.Quests.Hag
else
{
QuestSystem newQuest = new WitchApprenticeQuest(player);
bool inRestartPeriod = false;
if (qs != null)
{
newQuest.AddConversation(new DontOfferConversation());
}
else if (QuestSystem.CanOfferQuest(player, typeof(WitchApprenticeQuest), out inRestartPeriod))
else if (QuestSystem.CanOfferQuest(player, typeof(WitchApprenticeQuest), out bool inRestartPeriod))
{
PlaySound(0x20);
PlaySound(0x206);

View file

@ -58,13 +58,13 @@ namespace Server.Engines.Quests.Hag
// * You see a strange imp stealing a scrap of paper from the bloodied corpse *
Corpse.SendLocalizedMessageTo(player, 1055049);
Timer.DelayCall(TimeSpan.FromSeconds(3.0), new TimerStateCallback(DeleteImp), imp);
Timer.DelayCall(TimeSpan.FromSeconds(3.0), () => DeleteImp(imp));
}
}
private void DeleteImp(object imp)
private void DeleteImp(Mobile m)
{
if (imp is Mobile m && !m.Deleted)
if (m?.Deleted == false)
{
Effects.SendLocationEffect(m.Location, m.Map, 0x3728, 10, 10);
Effects.PlaySound(m.Location, m.Map, 0x1FE);
@ -215,7 +215,7 @@ namespace Server.Engines.Quests.Hag
imp.Direction = imp.GetDirectionTo(from);
Timer.DelayCall(TimeSpan.FromSeconds(3.0), new TimerStateCallback(DeleteImp), imp);
Timer.DelayCall(TimeSpan.FromSeconds(3.0), () => DeleteImp(imp));
}
private void DeleteImp(object imp)