241 lines
7.0 KiB
C#
241 lines
7.0 KiB
C#
using System;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
|
|
namespace Server.Engines.Quests.Ambitious
|
|
{
|
|
public abstract class BaseAmbitiousSolenQueen : BaseQuester
|
|
{
|
|
public BaseAmbitiousSolenQueen()
|
|
{
|
|
}
|
|
|
|
public BaseAmbitiousSolenQueen(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public abstract bool RedSolen { get; }
|
|
public override bool DisallowAllMoves
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void InitBody()
|
|
{
|
|
this.Name = "an ambitious solen queen";
|
|
|
|
this.Body = 0x30F;
|
|
|
|
if (!this.RedSolen)
|
|
this.Hue = 0x453;
|
|
|
|
this.SpeechHue = 0;
|
|
}
|
|
|
|
public override int GetIdleSound()
|
|
{
|
|
return 0x10D;
|
|
}
|
|
|
|
public override void OnTalk(PlayerMobile player, bool contextMenu)
|
|
{
|
|
this.Direction = this.GetDirectionTo(player);
|
|
|
|
AmbitiousQueenQuest qs = player.Quest as AmbitiousQueenQuest;
|
|
|
|
if (qs != null && qs.RedSolen == this.RedSolen)
|
|
{
|
|
if (qs.IsObjectiveInProgress(typeof(KillQueensObjective)))
|
|
{
|
|
qs.AddConversation(new DuringKillQueensConversation());
|
|
}
|
|
else
|
|
{
|
|
QuestObjective obj = qs.FindObjective(typeof(ReturnAfterKillsObjective));
|
|
|
|
if (obj != null && !obj.Completed)
|
|
{
|
|
obj.Complete();
|
|
}
|
|
else if (qs.IsObjectiveInProgress(typeof(GatherFungiObjective)))
|
|
{
|
|
qs.AddConversation(new DuringFungiGatheringConversation());
|
|
}
|
|
else
|
|
{
|
|
GetRewardObjective lastObj = qs.FindObjective(typeof(GetRewardObjective)) as GetRewardObjective;
|
|
|
|
if (lastObj != null && !lastObj.Completed)
|
|
{
|
|
bool bagOfSending = lastObj.BagOfSending;
|
|
bool powderOfTranslocation = lastObj.PowderOfTranslocation;
|
|
bool gold = lastObj.Gold;
|
|
|
|
AmbitiousQueenQuest.GiveRewardTo(player, ref bagOfSending, ref powderOfTranslocation, ref gold);
|
|
|
|
lastObj.BagOfSending = bagOfSending;
|
|
lastObj.PowderOfTranslocation = powderOfTranslocation;
|
|
lastObj.Gold = gold;
|
|
|
|
if (!bagOfSending && !powderOfTranslocation && !gold)
|
|
{
|
|
lastObj.Complete();
|
|
}
|
|
else
|
|
{
|
|
qs.AddConversation(new FullBackpackConversation(false, lastObj.BagOfSending, lastObj.PowderOfTranslocation, lastObj.Gold));
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
QuestSystem newQuest = new AmbitiousQueenQuest(player, this.RedSolen);
|
|
|
|
if (player.Quest == null && QuestSystem.CanOfferQuest(player, typeof(AmbitiousQueenQuest)))
|
|
{
|
|
newQuest.SendOffer();
|
|
}
|
|
else
|
|
{
|
|
newQuest.AddConversation(new DontOfferConversation());
|
|
}
|
|
}
|
|
}
|
|
|
|
public override bool OnDragDrop(Mobile from, Item dropped)
|
|
{
|
|
this.Direction = this.GetDirectionTo(from);
|
|
|
|
PlayerMobile player = from as PlayerMobile;
|
|
|
|
if (player != null)
|
|
{
|
|
AmbitiousQueenQuest qs = player.Quest as AmbitiousQueenQuest;
|
|
|
|
if (qs != null && qs.RedSolen == this.RedSolen)
|
|
{
|
|
QuestObjective obj = qs.FindObjective(typeof(GatherFungiObjective));
|
|
|
|
if (obj != null && !obj.Completed)
|
|
{
|
|
if (dropped is ZoogiFungus)
|
|
{
|
|
ZoogiFungus fungi = (ZoogiFungus)dropped;
|
|
|
|
if (fungi.Amount >= 50)
|
|
{
|
|
obj.Complete();
|
|
|
|
fungi.Amount -= 50;
|
|
|
|
if (fungi.Amount == 0)
|
|
{
|
|
fungi.Delete();
|
|
return true;
|
|
}
|
|
else
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.SayTo(player, 1054072); // Our arrangement was for 50 of the zoogi fungus. Please return to me when you have that amount.
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return base.OnDragDrop(from, dropped);
|
|
}
|
|
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class RedAmbitiousSolenQueen : BaseAmbitiousSolenQueen
|
|
{
|
|
[Constructable]
|
|
public RedAmbitiousSolenQueen()
|
|
{
|
|
}
|
|
|
|
public RedAmbitiousSolenQueen(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool RedSolen
|
|
{
|
|
get
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
|
|
public class BlackAmbitiousSolenQueen : BaseAmbitiousSolenQueen
|
|
{
|
|
[Constructable]
|
|
public BlackAmbitiousSolenQueen()
|
|
{
|
|
}
|
|
|
|
public BlackAmbitiousSolenQueen(Serial serial)
|
|
: base(serial)
|
|
{
|
|
}
|
|
|
|
public override bool RedSolen
|
|
{
|
|
get
|
|
{
|
|
return false;
|
|
}
|
|
}
|
|
public override void Serialize(GenericWriter writer)
|
|
{
|
|
base.Serialize(writer);
|
|
|
|
writer.WriteEncodedInt((int)0); // version
|
|
}
|
|
|
|
public override void Deserialize(GenericReader reader)
|
|
{
|
|
base.Deserialize(reader);
|
|
|
|
int version = reader.ReadEncodedInt();
|
|
}
|
|
}
|
|
} |