Files
abysmal-isle/Scripts/Quests/Eodon/Hawkwind/TimeForLegendsQuest.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

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