ModernUO/Scripts/Engines/Quests/Ambitious Solen Queen/Mobiles/AmbitiousSolenQueen.cs
2018-09-14 12:56:58 -07:00

207 lines
4.8 KiB
C#

using Server.Mobiles;
using Server.Items;
namespace Server.Engines.Quests.Ambitious
{
public abstract class BaseAmbitiousSolenQueen : BaseQuester
{
public abstract bool RedSolen{ get; }
public override string DefaultName => "an ambitious solen queen";
public override bool DisallowAllMoves => false;
public BaseAmbitiousSolenQueen()
{
}
public override void InitBody()
{
Body = 0x30F;
if ( !RedSolen )
Hue = 0x453;
SpeechHue = 0;
}
public override int GetIdleSound()
{
return 0x10D;
}
public override void OnTalk( PlayerMobile player, bool contextMenu )
{
Direction = GetDirectionTo( player );
if ( player.Quest is AmbitiousQueenQuest qs && qs.RedSolen == 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
{
if ( qs.FindObjective( typeof( GetRewardObjective ) ) is GetRewardObjective lastObj && !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, 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 )
{
Direction = GetDirectionTo( from );
if ( from is PlayerMobile player )
{
if ( player.Quest is AmbitiousQueenQuest qs && qs.RedSolen == RedSolen )
{
QuestObjective obj = qs.FindObjective( typeof( GatherFungiObjective ) );
if ( obj != null && !obj.Completed )
{
if ( dropped is ZoogiFungus fungi )
{
if ( fungi.Amount >= 50 )
{
obj.Complete();
fungi.Amount -= 50;
if ( fungi.Amount == 0 )
{
fungi.Delete();
return true;
}
return false;
}
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 BaseAmbitiousSolenQueen( Serial serial ) : base( serial )
{
}
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
{
public override bool RedSolen => true;
[Constructible]
public RedAmbitiousSolenQueen()
{
}
public RedAmbitiousSolenQueen( Serial serial ) : base( serial )
{
}
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
{
public override bool RedSolen => false;
[Constructible]
public BlackAmbitiousSolenQueen()
{
}
public BlackAmbitiousSolenQueen( Serial serial ) : base( serial )
{
}
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();
}
}
}