Files
abysmal-isle/Scripts/Mobiles/NPCs/AmbitiousSolenQueen.cs
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

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();
}
}
}