Modernization Fixes & Updates to Default Values (#3)
This commit is contained in:
parent
445eddff68
commit
dcf64091b1
768 changed files with 10507 additions and 14196 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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!
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@ namespace Server.Engines.Quests.Ninja
|
|||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
||||
Female = Utility.RandomBool();
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ namespace Server.Engines.Quests.Haven
|
|||
{
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
||||
Female = false;
|
||||
Body = 0x190;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ namespace Server.Engines.Quests.Haven
|
|||
{
|
||||
InitStats(100, 125, 25);
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
||||
Female = false;
|
||||
Body = 0x190;
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ namespace Server.Engines.Quests.Haven
|
|||
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
Hue = Utility.RandomSkinHue();
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
|
||||
Female = false;
|
||||
Body = 0x190;
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue