ModernUO/Scripts/Engines/Quests/Haochi's Trials/HaochisTrialsQuest.cs
2018-09-14 13:14:20 -07:00

119 lines
3.3 KiB
C#

using System;
using Server.Mobiles;
namespace Server.Engines.Quests.Samurai
{
public class HaochisTrialsQuest : QuestSystem
{
private static Type[] m_TypeReferenceTable = {
typeof( AcceptConversation ),
typeof( RadarConversation ),
typeof( FirstTrialIntroConversation ),
typeof( FirstTrialKillConversation ),
typeof( GainKarmaConversation ),
typeof( SecondTrialIntroConversation ),
typeof( SecondTrialAttackConversation ),
typeof( ThirdTrialIntroConversation ),
typeof( ThirdTrialKillConversation ),
typeof( FourthTrialIntroConversation ),
typeof( FourthTrialCatsConversation ),
typeof( FifthTrialIntroConversation ),
typeof( FifthTrialReturnConversation ),
typeof( LostSwordConversation ),
typeof( SixthTrialIntroConversation ),
typeof( SeventhTrialIntroConversation ),
typeof( EndConversation ),
typeof( FindHaochiObjective ),
typeof( FirstTrialIntroObjective ),
typeof( FirstTrialKillObjective ),
typeof( FirstTrialReturnObjective ),
typeof( SecondTrialIntroObjective ),
typeof( SecondTrialAttackObjective ),
typeof( SecondTrialReturnObjective ),
typeof( ThirdTrialIntroObjective ),
typeof( ThirdTrialKillObjective ),
typeof( ThirdTrialReturnObjective ),
typeof( FourthTrialIntroObjective ),
typeof( FourthTrialCatsObjective ),
typeof( FourthTrialReturnObjective ),
typeof( FifthTrialIntroObjective ),
typeof( FifthTrialReturnObjective ),
typeof( SixthTrialIntroObjective ),
typeof( SixthTrialReturnObjective ),
typeof( SeventhTrialIntroObjective ),
typeof( SeventhTrialReturnObjective )
};
public override Type[] TypeReferenceTable => m_TypeReferenceTable;
public override object Name => 1063022;
public override object OfferMessage => 1063023;
public override TimeSpan RestartDelay => TimeSpan.MaxValue;
public override bool IsTutorial => true;
public override int Picture => 0x15D7;
public HaochisTrialsQuest( PlayerMobile from ) : base( from )
{
}
// Serialization
public HaochisTrialsQuest()
{
}
public override void Accept()
{
base.Accept();
AddConversation( new AcceptConversation() );
}
private bool m_SentRadarConversion;
public override void Slice()
{
if ( !m_SentRadarConversion && ( From.Map != Map.Malas || From.X < 360 || From.X > 400 || From.Y < 760 || From.Y > 780 ) )
{
m_SentRadarConversion = true;
AddConversation( new RadarConversation() );
}
base.Slice();
}
public override void ChildDeserialize( GenericReader reader )
{
int version = reader.ReadEncodedInt();
m_SentRadarConversion = reader.ReadBool();
}
public override void ChildSerialize( GenericWriter writer )
{
writer.WriteEncodedInt( 0 ); // version
writer.Write( (bool) m_SentRadarConversion );
}
public static bool HasLostHaochisKatana( Mobile from )
{
if ( !(from is PlayerMobile pm) )
return false;
QuestSystem qs = pm.Quest;
if ( qs is HaochisTrialsQuest )
{
if ( qs.IsObjectiveInProgress( typeof( FifthTrialReturnObjective ) ) )
{
return ( from.Backpack?.FindItemByType( typeof( HaochisKatana ) ) == null );
}
}
return false;
}
}
}