190 lines
6.5 KiB
C#
190 lines
6.5 KiB
C#
using System;
|
|
using Server;
|
|
using Server.Items;
|
|
using Server.Mobiles;
|
|
using Server.Gumps;
|
|
using Server.Spells.SkillMasteries;
|
|
|
|
namespace Server.Engines.Quests.TimeLord
|
|
{
|
|
public class TimeForLegendsQuest : QuestSystem
|
|
{
|
|
private Type[] _TypeReferenceTable = new Type[]
|
|
{
|
|
typeof(TimeForLegendsObjective)
|
|
};
|
|
|
|
public override Type[] TypeReferenceTable { get { return _TypeReferenceTable; } }
|
|
|
|
public override object Name { get { return 1156338; } } // A Time For Legends
|
|
public override object OfferMessage { get { return 1156339; } } /*Greetings Brave Traveler!<br><br>Throughout my travels in time I have forever
|
|
encountered those who've reached the pinnacle of their profession. These Legends
|
|
are told of in our most cherished tales and are the fabric by which heroes are born.
|
|
I offer you now a chance to walk the path of these Legends. Complete my task and
|
|
you too shall know the secrets of the Master.*/
|
|
|
|
public override TimeSpan RestartDelay { get { return TimeSpan.Zero; } }
|
|
public override bool IsTutorial { get { return false; } }
|
|
public override int Picture { get { return 0x1581; } }
|
|
|
|
public SkillName Mastery { get; set; }
|
|
public Type ToSlay { get; set; }
|
|
|
|
public TimeForLegendsQuest(PlayerMobile from)
|
|
: base(from)
|
|
{
|
|
}
|
|
|
|
public TimeForLegendsQuest()
|
|
{
|
|
}
|
|
|
|
public override void Accept()
|
|
{
|
|
base.Accept();
|
|
|
|
From.SendGump(new ChooseMasteryGump(From, this));
|
|
}
|
|
|
|
public override void Complete()
|
|
{
|
|
base.Complete();
|
|
|
|
From.SendLocalizedMessage(1156342); // You have proven your prowess on the battlefield and have completed the first step on the path of the Master!
|
|
From.SendLocalizedMessage(1156209); // You have received a mastery primer!
|
|
From.SendLocalizedMessage(1152339, "#1028794"); // A reward of ~1_ITEM~ has been placed in your backpack.
|
|
|
|
From.AddToBackpack(new BookOfMasteries());
|
|
|
|
var primer = new SkillMasteryPrimer(Mastery, 1);
|
|
|
|
if(primer != null)
|
|
From.AddToBackpack(primer);
|
|
}
|
|
|
|
public static Type[] Targets { get { return _Targets; } }
|
|
private static Type[] _Targets = new Type[]
|
|
{
|
|
typeof(Semidar), typeof(Mephitis), typeof(Rikktor), typeof(LordOaks), typeof(Neira), typeof(Barracoon), typeof(Serado), typeof(Meraktus), typeof(Ilhenir),
|
|
typeof(Twaulo), typeof(AbyssalInfernal), typeof(PrimevalLich), typeof(CorgulTheSoulBinder), typeof(CorgulTheSoulBinder) /*dragon turtle*/,
|
|
typeof(DreadHorn), typeof(Travesty), typeof(ChiefParoxysmus), typeof(LadyMelisande), typeof(MonstrousInterredGrizzle), typeof(ShimmeringEffusion)
|
|
};
|
|
|
|
public static Type TargetOfTheDay { get; set; }
|
|
public static DateTime NextTarget { get; set; }
|
|
|
|
public static void OnSave(WorldSaveEventArgs e)
|
|
{
|
|
Timer.DelayCall(TimeSpan.FromSeconds(30), () =>
|
|
{
|
|
if (DateTime.UtcNow > NextTarget)
|
|
{
|
|
NextTarget = DateTime.UtcNow + TimeSpan.FromHours(24);
|
|
TargetOfTheDay = _Targets[Utility.Random(_Targets.Length)];
|
|
}
|
|
});
|
|
}
|
|
|
|
public static void Initialize()
|
|
{
|
|
EventSink.WorldSave += OnSave;
|
|
|
|
TargetOfTheDay = _Targets[Utility.Random(_Targets.Length)];
|
|
|
|
Server.Commands.CommandSystem.Register("NewTargetOfTheDay", AccessLevel.GameMaster, e =>
|
|
{
|
|
TargetOfTheDay = _Targets[Utility.Random(_Targets.Length)];
|
|
|
|
e.Mobile.SendMessage("New Target of the Day: {0}", TargetOfTheDay.Name);
|
|
});
|
|
}
|
|
|
|
public override void ChildSerialize(GenericWriter writer)
|
|
{
|
|
writer.WriteEncodedInt((int)0); // version
|
|
|
|
writer.Write((int)Mastery);
|
|
|
|
if (ToSlay != null)
|
|
{
|
|
writer.Write(0);
|
|
writer.Write(ToSlay.Name);
|
|
}
|
|
else
|
|
writer.Write(1);
|
|
}
|
|
|
|
public override void ChildDeserialize(GenericReader reader)
|
|
{
|
|
int version = reader.ReadEncodedInt();
|
|
|
|
Mastery = (SkillName)reader.ReadInt();
|
|
|
|
string name = null;
|
|
|
|
if(reader.ReadInt() == 0)
|
|
name = reader.ReadString();
|
|
|
|
if(name != null)
|
|
ToSlay = ScriptCompiler.FindTypeByName(name);
|
|
}
|
|
}
|
|
|
|
public class ChooseMasteryGump : Gump
|
|
{
|
|
public TimeForLegendsQuest Quest { get; set; }
|
|
public PlayerMobile User { get; set; }
|
|
|
|
public ChooseMasteryGump(PlayerMobile user, TimeForLegendsQuest quest)
|
|
: base(50, 50)
|
|
{
|
|
Quest = quest;
|
|
User = user;
|
|
|
|
AddImage(0, 0, 8000);
|
|
AddImage(20, 37, 8001);
|
|
AddImage(20, 107, 8002);
|
|
AddImage(20, 177, 8001);
|
|
AddImage(20, 247, 8002);
|
|
AddImage(20, 317, 8001);
|
|
AddImage(20, 387, 8002);
|
|
AddImage(20, 457, 8003);
|
|
|
|
AddHtmlLocalized(125, 40, 345, 16, 1156340, false, false); // Choose Your Path
|
|
|
|
int y = 60;
|
|
|
|
foreach (SkillName skName in MasteryInfo.Skills)
|
|
{
|
|
Skill sk = User.Skills[skName];
|
|
|
|
if (sk == null || skName == SkillName.Discordance || skName == SkillName.Provocation || skName == SkillName.Peacemaking)
|
|
continue;
|
|
|
|
if (sk.IsMastery && sk.VolumeLearned == 0)
|
|
{
|
|
AddButton(30, y, 4005, 4007, (int)skName + 1, GumpButtonType.Reply, 0);
|
|
|
|
AddHtmlLocalized(75, y, 200, 16, MasteryInfo.GetLocalization(skName), 0x000F, false, false);
|
|
|
|
y += 20;
|
|
}
|
|
}
|
|
}
|
|
|
|
public override void OnResponse(Network.NetState state, RelayInfo info)
|
|
{
|
|
if (info.ButtonID == 0 && User.Quest != null && User.Quest is TimeForLegendsQuest)
|
|
User.Quest.Cancel();
|
|
|
|
int id = info.ButtonID - 1;
|
|
|
|
if (id >= 0 && id < SkillInfo.Table.Length)
|
|
{
|
|
Quest.Mastery = (SkillName)id;
|
|
Quest.ToSlay = TimeForLegendsQuest.TargetOfTheDay;
|
|
Quest.AddObjective(new TimeForLegendsObjective());
|
|
}
|
|
}
|
|
}
|
|
} |