#W# MLQuest: Working on some new quests. Or trying to.

This commit is contained in:
WarrentyExpired 2026-10-08 15:35:25 -04:00
parent f961f484a5
commit b22a1495af
5 changed files with 179 additions and 309 deletions

View file

@ -80,7 +80,7 @@
"pathfinding.recorder.enable": "False",
"pathfinding.recorder.path": "/home/warrentyexpired/Projects/SovereignRealm/Server/Distribution/Data/Pathfinding/recordings/pathfinds.jsonl",
"pingServer.enabled": "True",
"questSystem.enableMLQuests": "False",
"questSystem.enableMLQuests": "True",
"serverListing.address": null,
"serverListing.autoDetect": "True",
"serverListing.serverName": "Sovereign Realm",

View file

@ -1,307 +1,4 @@
# Escorts
EscortToYew
EscortToVesper
EscortToTrinsic
EscortToSkaraBrae
EscortToSerpentsHold
EscortToNujelm
EscortToMoonglow
EscortToMinoc
EscortToMagincia
EscortToJhelom
EscortToCove
EscortToBritain
EscortToOcllo
# Britannia
Aemaeth1 Aurelia
Aemaeth2 SkeletonOfSzandor
OddsAndEnds Patricus
EmbracingHumanity Iosep
# Honest Beggar
HonestBeggar Evan
ReginasThanks Regina
# Unfading Memories
UnfadingMemoriesPartOne Emilio
UnfadingMemoriesPartTwo Emilio
UnfadingMemoriesPartThree Thalia
# A Ghost Of Covetous
AGhostOfCovetous Ben
SaveHisDad Frederic
AFathersGratitude Leon Andros
# Heartwood
TheyreBreedingLikeRabbits Saril Tamm Yorus
TheyllEatAnything Saril Tamm Yorus
NoGoodFishStealing Saril Tamm Yorus
AHeroInTheMaking Saril Yorus
BullfightingSortOf Saril Tamm Yorus
AFineFeast Saril Tamm Yorus
ForcedMigration Saril Tamm Yorus
FilthyPests Saril Tamm
DeadManWalking Vilo Saril Tamm Cailla Tiana
KingOfBears Vilo Cailla
Specimens Vilo Clehin Salaenih Cailla Landy
Spirits Cailla
RollTheBones Vilo Cailla
ItsAGhastlyJob Vilo Cailla
Troglodytes Cailla Canir
UnholyKnights Vilo Cailla
AFeatherInYerCap Vilo Cailla
ATaleOfTail Vilo Cailla Drithen
ATrogAndHisDog Cailla Canir
Overpopulation Saril Tamm Yorus ElderAcob
WildBoarCull Saril Tamm Yorus ElderAcob
ItsElemental Caelas Alejaha
CircleOfLife Brinnae Aniel Ciala Mielan
DustToDust Aniel Ciala
CreepyCrawlies Clehin Aulan Landy
VoraciousPlants Aulan Salaenih
GibberJabber Aulan
AnimatedMonstrosity Aulan Salaenih
BirdsOfAFeather Aulan
Frightmares Aulan
MoltenReptiles Aulan
BloodyNuisance Aulan
BloodSuckers Aulan
TheAfterlife Brinnae
ForkedTongue Brinnae Saril Tamm Tiana Gorrow
ImpishDelights Brinnae
ThreeWishes Brinnae
EvilEye Brinnae
GargoylesWrath Brinnae
UndeadMages Brinnae
FriendlyNeighborhoodSpiderkiller Vilo Brinnae Cailla
MongbatMenace Clehin Brinnae Landy
StirringTheNest Brinnae
WarriorCaste Caelas Salaenih
BigWorms Caelas
OrcishElite Caelas
ThinningTheHerd Clehin Saril Tamm Landy Yorus
Squishy Salaenih
OrcSlaying LorekeeperOolua
ABigJob Salaenih
TrollingForTrolls Saril Tamm Tiana
ColdHearted Salaenih
ForkedTongues
ShakingThingsUp Salaenih
Arachnophobia Salaenih
MiniSwampThing Salaenih
ThePerilsOfFarming Vilo Tiana
IndustriousAsAnAntLion Vilo Tiana
UnholyConstruct Vilo Tiana Braen
AChillInTheAir Vilo Tiana
TheKingOfClothing Ahie Thallary
ThePuffyShirt Ahie Thallary
FromTheGaultierCollection Waelian Sleen Ahie Thallary
HauteCouture Ahie Thallary
TheSongOfTheWind Tholef Tillanil
BeerGoggles Tholef Tillanil
MessageInABottleQuest Tholef Tillanil
NecessitysMother Waelian Sleen
TickTock Waelian Sleen Danoel
ReptilianDentist Sleen Danoel
StopHarpingOnMe Waelian Sleen Anolly Cillitha Jusae Unoelil
TheFarEye Waelian Sleen Anolly Unoelil
LethalDarts Cillitha Jusae
ASimpleBow Cillitha Jusae
IngeniousArcheryPartOne Cillitha Jusae
IngeniousArcheryPartTwo Cillitha Jusae
IngeniousArcheryPartThree Cillitha Jusae
ScaleArmor Ahie Thallary Tallinin
CutsBothWays Lohn Olla
DragonProtection Lohn Olla
NothingFancy Anolly Lohn Olla Unoelil Danoel
TheBulwark Lohn Olla
ArchSupport Waelian Sleen Ciala Aniel
ParoxysmusSuccubi LorekeeperNillaen LorekeeperOolua
ParoxysmusMoloch LorekeeperNillaen LorekeeperOolua
ParoxysmusDaemons LorekeeperNillaen LorekeeperOolua
ParoxysmusArcaneDaemons LorekeeperNillaen LorekeeperOolua
CausticCombo LorekeeperNillaen LorekeeperOolua
PlagueLord LorekeeperNillaen LorekeeperOolua
GlassyFoe Ciala Aniel LorekeeperRyal LorekeeperRollarn
DaemonicPrism LorekeeperRyal LorekeeperRollarn
Hailstorm LorekeeperRyal LorekeeperRollarn
HowManyHeads LorekeeperRyal LorekeeperRollarn
DreadhornQuest LorekeeperCalendor LorekeeperOolua
NewLeadership ElderAcob
ExAssassins ElderAcob
ExtinguishingTheFlame ElderAcob
CrimeAndPunishment ElderAcob
DeathToTheNinja ElderAcob
AllThatGlittersIsNotGood LorekeeperSiarra ElderBrae
# The Ancient World
TheAncientWorld LorekeeperBroolol
TheGoldenHorn LorekeeperBroolol
Bullish Braen
LostCivilization Braen
# Warriors Of The Gemkeeper
WarriorsOfTheGemkeeper LorekeeperRollarn
CloseEnough LorekeeperRollarn
TakingTheBullByTheHorns Canir
EmissaryToTheMinotaur Canir
# Sanctuary
BrokenShaft Beotham
BendingTheBow Beotham
ArmsRace Beotham
ImprovedCrossbows Beotham
BuildingTheBetterCrossbow Beotham
InstrumentOfWar Danoel
TheShield Danoel
MusicToMyEars Danoel
TheGlassEye Danoel
LazyHumans Danoel
InventiveTools Danoel
PixieDustToDust LorekeeperOolua
AnImpressivePlaid Tallinin
LeatherAndLace Danoel Tallinin
FeyHeadgear Tallinin
NewCloak Tallinin
ADishBestServedCold Tiana Koole
ArchEnemies Tiana
Vermin Tiana
ANiceShirt Tallinin
MougGuurMustDie Dallid
LeaderOfThePack Dallid
SayonaraSzavetra Dallid
TappingTheKeg Dallid
WaitingToBeFilled Dallid
BreezesSong Dallid
ProofOfTheDeed ElderOnallan Tiana
Marauders ElderOnallan Tiana Koole
TheBrainsOfTheOperation ElderOnallan Tiana
TheBrawn ElderOnallan Tiana
TheBiggerTheyAre ElderOnallan Tiana
TroubleOnTheWing Koole
BrotherlyLove LorekeeperRollarn
CommonBrigands Tiana Gorrow
# Elven heritage
Seasons MaulTheBear
CaretakerOfTheLand Strongroot
WisdomOfTheSphynx Enigma
DefendingTheHerd Bravehorn
TheBalanceOfNature Huntsman
TheJoysOfLife Arielle
# Human heritage
Ingenuity Sledge
HeaveHo Patricus
HumanInNeed
AllSeasonAdventurer Belulah
# Ilshenar
Responsibility Lissbet
SomethingToWailAbout Jelrice
Runaways Jelrice
ViciousPredator Jelrice
GuileIrkAndSpite Yorus
# New Haven
EscortToNHAlchemist
EscortToNHBard
EscortToNHWarrior
EscortToNHTailor
EscortToNHCarpenter
EscortToNHMapmaker
EscortToNHMage
EscortToNHInn
EscortToNHFarm
EscortToNHDocks
EscortToNHBowyer
EscortToNHBank
# New Haven Training
SplitEnds Andric
IShotAnArrowIntoTheAir Kashiel
BakersDozen Asandos
AStitchInTime Clairesse
BatteredBucklers Gervis
MoreOrePlease Mugg
ComfortableSeating Lowel
ThePenIsMightier Lyle
AClockworkPuzzle Nibbet
DeliciousFishes Norton
FleeAndFatigue Sadrah
ChopChopOnTheDouble Hargrove
# New Haven Skill Training
CleansingOldHaven Aelorn
TheRudimentsOfSelfDefense Dimethro
CrushingBonesAndTakingNames Churchill
SwiftAsAnArrow Robyn
EnGuarde Recaro
TheArtOfWar AldenArmstrong
TheWayOfTheBlade Jockles
ThouAndThineShield TylAriadne
DefyingTheArcane Alefian
StoppingTheWorld Gustar
ScribingArcaneKnowledge Jillian
TheMagesApprentice Kaelynna
ScholarlyTask Mithneral
TheRightToolForTheJob AmeliaYoungstone
KnowThineEnemy AndreasVesalius
BruisesBandagesAndBlood Avicenna
TheInnerWarrior SarsmeaSmythe
TheArtOfStealth Ryuichi
BecomingOneWithTheShadows Chiyo
WalkingSilently Jun
EyesOfARanger Walker
TheWayOfTheSamurai Hamato
TheAllureOfDarkMagic Mulcivikh
ChannelingTheSupernatural Morganna
TheDeluciansLostMine JacobWaltz
ItsHammerTime GeorgeHephaestus
# Spellweaving
Patience Aeluva
NeedsOfTheManyHeartwood1 Aeluva
NeedsOfTheManyHeartwood2 Aeluva
MakingAContributionHeartwood Aeluva
UnnaturalCreations Aeluva
Discipline Koole
NeedsOfTheManySanctuary Koole
MakingAContributionSanctuary Koole
SuppliesForSanctuary Koole
TheHumanBlight Koole
FriendOfTheFey Synaeva
TokenOfFriendship Synaeva
Alliance Arielle
FiendishFriends ElderBrae
CrackingTheWhipI ElderBrae
CrackingTheWhipII ElderBrae
# ML dungeons
VilePoison Jamal
ARockAndAHardPlace Iosep
SympatheticMagic Iosep
AlreadyDead Iosep
Eureka Iosep
SubContracting Jamal
Momento Kia
CulinaryCrisis Emerillo
GoneNative MasterGnosos
# Mistaken Identity
MistakenIdentity Aernya
YouScratchMyBack Gorrow
FoolingAernya Gorrow
NotQuiteThatEasy Aernya
ConvinceMe MasterGnosos
TuitionReimbursement MasterGnosos
# Malas
PointyEars Gorrow Drithen Sledge
# Lost items
LostAndFound BatteredBucket
IronForTheForge
DestardDrakeBounty
DungeonBountyBoard
DeceitSkeletalKnightBounty

View file

@ -0,0 +1,102 @@
using System;
using System.Collections.Generic;
using ModernUO.Serialization;
using Server.Engines.MLQuests;
using Server.Engines.MLQuests.Objectives;
using Server.Engines.MLQuests.Rewards;
using Server.Items;
using Server.Mobiles;
namespace Server.Engines.MLQuests.Definitions;
// ==========================================
// 1. BOUNTY BOARD ITEM
// ==========================================
[SerializationGenerator(0, false)]
public partial class DungeonBountyBoard : Item, IQuestGiver
{
// Implementation for IQuestGiver
public List<MLQuest> MLQuests => MLQuestSystem.FindQuestList(GetType());
[Constructible]
public DungeonBountyBoard() : base(0x1E5E) // Bulletin board Graphic ID
{
Name = "Dungeon Bounty Board";
Movable = false;
}
public override void OnDoubleClick(Mobile from)
{
if (from is PlayerMobile pm)
{
if (from.InRange(GetWorldLocation(), 3))
{
MLQuestSystem.OnDoubleClick(this, pm);
}
else
{
from.SendLocalizedMessage(500446); // That is too far away.
}
}
}
}
// ==========================================
// 2. DESTARD BOUNTY: DRAKES
// ==========================================
public class DestardDrakeBounty : MLQuest
{
public DestardDrakeBounty()
{
Activated = true;
Title = "Bounty: Destard Drakes";
Description = "Notice to all adventurers: Drake activity in the caverns of Destard has surged! Slay 10 Drakes to thin their numbers and keep the surrounding passes safe.";
RefusalMessage = "The bounty remains posted if you change your mind.";
InProgressMessage = "You haven't slain enough Drakes yet. Return once you've dispatched 10 of them in Destard.";
CompletionMessage = "Excellent work! The realm thanks you for your service. Here is your gold reward.";
CompletionNotice = CompletionNoticeShort;
// Objective: Slay 10 Drakes
Objectives.Add(new KillObjective(10, new[] { typeof(Drake) }, "Drakes"));
// Reward: 1,200 Gold
Rewards.Add(new ItemReward("1,200 Gold", typeof(Gold), 1200));
}
public override void Generate()
{
base.Generate();
MLQuestSystem.Register(this, typeof(DungeonBountyBoard));
}
}
// ==========================================
// 3. DECEIT BOUNTY: SKELETAL KNIGHTS
// ==========================================
public class DeceitSkeletalKnightBounty : MLQuest
{
public DeceitSkeletalKnightBounty()
{
Activated = true;
Title = "Bounty: Deceit Skeletal Knights";
Description = "Undead forces are amassing within the halls of Deceit. Slay 10 Skeletal Knights and report back to claim your reward.";
RefusalMessage = "The bounty remains posted on the board.";
InProgressMessage = "The skeletal knights still roam Deceit. Return when you have destroyed 10 of them.";
CompletionMessage = "The undead threat has been pushed back! Take your gold reward.";
CompletionNotice = CompletionNoticeShort;
// Objective: Slay 10 Skeletal Knights
Objectives.Add(new KillObjective(10, new[] { typeof(SkeletalKnight) }, "Skeletal Knights"));
// Reward: 1,500 Gold
Rewards.Add(new ItemReward("1,500 Gold", typeof(Gold), 1500));
}
public override void Generate()
{
base.Generate();
MLQuestSystem.Register(this, typeof(DungeonBountyBoard));
}
}

View file

@ -0,0 +1,71 @@
using System;
using System.Collections.Generic;
using ModernUO.Serialization;
using Server.Engines.MLQuests;
using Server.Engines.MLQuests.Objectives;
using Server.Engines.MLQuests.Rewards;
using Server.Items;
using Server.Mobiles;
namespace Server.Engines.MLQuests.Definitions;
public class IronForTheForge : MLQuest
{
public IronForTheForge()
{
Activated = true;
Title = "Iron for the Forge";
Description = "Greetings traveler! The local guards have ordered a heavy shipment of armor, and my forge is running completely cold. Bring me 10 Iron Ingots so I can get back to work, and I will compensate you well.";
RefusalMessage = "I understand. Raw iron is heavy work, but come back if you change your mind.";
InProgressMessage = "Still looking for that iron? Mine it or buy it from a smithy, then bring 10 ingots back to me.";
CompletionMessage = "Ah, magnificent quality iron! This will keep the forge roaring today. Here is your pay as promised.";
CompletionNotice = CompletionNoticeShort;
// Objective: Collect 10 Iron Ingots
Objectives.Add(new CollectObjective(10, typeof(IronIngot), "Iron Ingots"));
// Reward: 500 Gold
Rewards.Add(new ItemReward("500 Gold", typeof(Gold), 500));
}
public override void Generate()
{
base.Generate();
// Registers this quest and links it to QuestBlacksmith
MLQuestSystem.Register(this, typeof(QuestBlacksmith));
}
}
[SerializationGenerator(0, false)]
public partial class QuestBlacksmith : BaseCreature, IQuestGiver
{
// Implementation for IQuestGiver
public List<MLQuest> MLQuests => MLQuestSystem.FindQuestList(GetType());
[Constructible]
public QuestBlacksmith() : base(AIType.AI_Vendor, FightMode.None, 2)
{
Title = "the Blacksmith";
Race = Race.Human;
Body = 0x190;
Female = false;
Hue = Race.RandomSkinHue();
SetSpeed(0.5, 2.0);
InitStats(100, 100, 25);
Utility.AssignRandomHair(this);
AddItem(new Backpack());
AddItem(new ShortPants(0x755));
AddItem(new Shirt(Utility.RandomNeutralHue()));
AddItem(new FullApron(Utility.RandomNeutralHue()));
AddItem(new Boots());
AddItem(new SmithHammer());
}
public override bool IsInvulnerable => true;
public override string DefaultName => "Gareth";
}

View file

@ -3,7 +3,7 @@ using Server.Mobiles;
namespace Server.Regions
{
public class GreetingDungeonRegion : DungeonRegion
public class GreetingDungeonRegion : NoTravelSpellsAllowedRegion
{
public GreetingDungeonRegion(string name, Map map, int priority, params Rectangle3D[] area)
: base(name, map, priority, area)