fix: Codegens Heartwood quest givers (#1687)

### Summary
- Codegens quest givers (mostly heartwood)
- Removes their `RandomList` calls in favor of random bool or switch.
This commit is contained in:
Kamron Batman 2024-02-18 20:22:28 -08:00 • committed by GitHub
parent e994505ad0
commit 1fdef9f389
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
65 changed files with 4245 additions and 5102 deletions

View file

@ -1,5 +1,4 @@
using System;
using Server.Engines.Quests;
using Server.Engines.Quests.Collector;
using Server.Items;
using Server.Mobiles;

View file

@ -1,4 +1,5 @@
using System;
using ModernUO.Serialization;
using Server.Engines.MLQuests.Objectives;
using Server.Engines.MLQuests.Rewards;
using Server.Items;
@ -176,11 +177,11 @@ namespace Server.Engines.MLQuests.Definitions
}
[QuesterName("Jamal (near Blighted Grove)")]
public class Jamal : BaseCreature
[SerializationGenerator(0, false)]
public partial class Jamal : BaseCreature
{
[Constructible]
public Jamal()
: base(AIType.AI_Vendor, FightMode.None, 2)
public Jamal() : base(AIType.AI_Vendor, FightMode.None, 2)
{
Title = "the Fisherman";
Body = 400;
@ -196,35 +197,17 @@ namespace Server.Engines.MLQuests.Definitions
AddItem(new Backpack());
}
public Jamal(Serial serial)
: base(serial)
{
}
public override bool IsInvulnerable => true;
public override string DefaultName => "Jamal";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt();
}
}
[QuesterName("Iosep (Jhelom)")]
public class Iosep : BaseCreature
[SerializationGenerator(0, false)]
public partial class Iosep : BaseCreature
{
[Constructible]
public Iosep()
: base(AIType.AI_Vendor, FightMode.None, 2)
public Iosep() : base(AIType.AI_Vendor, FightMode.None, 2)
{
Title = "the Exporter";
Body = 400;
@ -237,11 +220,6 @@ namespace Server.Engines.MLQuests.Definitions
AddItem(new Backpack());
}
public Iosep(Serial serial)
: base(serial)
{
}
public override bool IsInvulnerable => true;
public override string DefaultName => "Iosep";
@ -249,28 +227,9 @@ namespace Server.Engines.MLQuests.Definitions
public override void Shout(PlayerMobile pm)
{
MLQuestSystem.Tell(
this,
pm,
Utility.RandomList(
1074209, // Hey, could you help me out with something?
1074215 // Don’t test my patience you sniveling worm!
)
);
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt();
// Hey, could you help me out with something?
// Don’t test my patience you sniveling worm!
MLQuestSystem.Tell(this, pm, Utility.RandomBool() ? 1074209 : 1074215 );
}
}
}

View file

@ -1,4 +1,5 @@
using System;
using ModernUO.Serialization;
using Server.Engines.MLQuests.Objectives;
using Server.Engines.MLQuests.Rewards;
using Server.Items;
@ -105,7 +106,8 @@ namespace Server.Engines.MLQuests.Definitions
}
}
public class Aurelia : BaseCreature
[SerializationGenerator(0, false)]
public partial class Aurelia : BaseCreature
{
[Constructible]
public Aurelia() : base(AIType.AI_Vendor, FightMode.None, 2)
@ -136,31 +138,13 @@ namespace Server.Engines.MLQuests.Definitions
AddItem(new FancyShirt(Utility.RandomRedHue()));
}
public Aurelia(Serial serial)
: base(serial)
{
}
public override bool IsInvulnerable => true;
public override string DefaultName => "Aurelia";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
[QuesterName("Szandor")]
public class SkeletonOfSzandor : BaseCreature
[SerializationGenerator(0, false)]
public partial class SkeletonOfSzandor : BaseCreature
{
[Constructible]
public SkeletonOfSzandor() : base(AIType.AI_Vendor, FightMode.None, 2)
@ -173,26 +157,7 @@ namespace Server.Engines.MLQuests.Definitions
InitStats(100, 100, 25);
}
public SkeletonOfSzandor(Serial serial)
: base(serial)
{
}
public override bool IsInvulnerable => true;
public override string DefaultName => "Skeleton of Szandor";
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -88,11 +88,5 @@ public abstract partial class BaseQuester : BaseVendor
QuestSystem.FocusTo(this, to);
}
public static Container GetNewContainer()
{
return new Bag
{
Hue = QuestSystem.RandomBrightHue()
};
}
public static Container GetNewContainer() => new Bag { Hue = QuestSystem.RandomBrightHue() };
}

View file

@ -1,114 +1,101 @@
using System;
using ModernUO.Serialization;
using Server.Items;
using Server.Mobiles;
namespace Server.Engines.Quests.Hag
namespace Server.Engines.Quests.Hag;
[SerializationGenerator(0, false)]
public partial class Blackheart : BaseQuester
{
public class Blackheart : BaseQuester
private long _nextHeave;
[Constructible]
public Blackheart() : base("the Drunken Pirate")
{
[Constructible]
public Blackheart() : base("the Drunken Pirate")
}
public override string DefaultName => "Captain Blackheart";
public override void InitBody()
{
InitStats(100, 100, 25);
Hue = 0x83EF;
Female = false;
Body = 0x190;
}
public override void InitOutfit()
{
AddItem(new FancyShirt());
AddItem(new LongPants(0x66D));
AddItem(new ThighBoots());
AddItem(new TricorneHat(0x1));
AddItem(new BodySash(0x66D));
var gloves = new LeatherGloves();
gloves.Hue = 0x66D;
AddItem(gloves);
FacialHairItemID = 0x203E; // Long Beard
FacialHairHue = 0x455;
Item sword = new Cutlass();
sword.Movable = false;
AddItem(sword);
}
public override void OnTalk(PlayerMobile player, bool contextMenu)
{
Direction = GetDirectionTo(player);
Animate(33, 20, 1, true, false, 0);
var qs = player.Quest;
if (qs is WitchApprenticeQuest)
{
}
public Blackheart(Serial serial) : base(serial)
{
}
public override string DefaultName => "Captain Blackheart";
public override void InitBody()
{
InitStats(100, 100, 25);
Hue = 0x83EF;
Female = false;
Body = 0x190;
}
public override void InitOutfit()
{
AddItem(new FancyShirt());
AddItem(new LongPants(0x66D));
AddItem(new ThighBoots());
AddItem(new TricorneHat(0x1));
AddItem(new BodySash(0x66D));
var gloves = new LeatherGloves();
gloves.Hue = 0x66D;
AddItem(gloves);
FacialHairItemID = 0x203E; // Long Beard
FacialHairHue = 0x455;
Item sword = new Cutlass();
sword.Movable = false;
AddItem(sword);
}
public override void OnTalk(PlayerMobile player, bool contextMenu)
{
Direction = GetDirectionTo(player);
Animate(33, 20, 1, true, false, 0);
var qs = player.Quest;
if (qs is WitchApprenticeQuest)
var obj = qs.FindObjective<FindIngredientObjective>();
if (obj?.Completed == false && obj.Ingredient == Ingredient.Whiskey)
{
var obj = qs.FindObjective<FindIngredientObjective>();
if (obj?.Completed == false && obj.Ingredient == Ingredient.Whiskey)
PlaySound(Utility.RandomBool() ? 0x42E : 0x43F);
var tricorne = player.FindItemOnLayer<TricorneHat>(Layer.Helm) != null;
if (tricorne && player.BAC >= 20)
{
PlaySound(Utility.RandomBool() ? 0x42E : 0x43F);
obj.Complete();
var tricorne = player.FindItemOnLayer<TricorneHat>(Layer.Helm) != null;
if (tricorne && player.BAC >= 20)
{
obj.Complete();
qs.AddConversation(new BlackheartPirateConversation(!obj.BlackheartMet));
}
else if (!obj.BlackheartMet)
{
obj.Complete();
qs.AddConversation(new BlackheartFirstConversation());
}
else
{
qs.AddConversation(new BlackheartNoPirateConversation(tricorne, player.BAC > 0));
}
return;
qs.AddConversation(new BlackheartPirateConversation(!obj.BlackheartMet));
}
else if (!obj.BlackheartMet)
{
obj.Complete();
qs.AddConversation(new BlackheartFirstConversation());
}
else
{
qs.AddConversation(new BlackheartNoPirateConversation(tricorne, player.BAC > 0));
}
return;
}
PlaySound(0x42C);
SayTo(player, 1055041); // The drunken pirate shakes his fist at you and goes back to drinking.
}
private void Heave()
PlaySound(0x42C);
SayTo(player, 1055041); // The drunken pirate shakes his fist at you and goes back to drinking.
}
public override void OnThink()
{
if (Core.TickCount - _nextHeave < 0)
{
PublicOverheadMessage(MessageType.Regular, 0x3B2, 500849); // *hic*
Timer.StartTimer(TimeSpan.FromSeconds(Utility.RandomMinMax(60, 180)), Heave);
return;
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
Heave();
}
// 60-180s
_nextHeave = Core.TickCount + Utility.Random(60000, 120000);
PublicOverheadMessage(MessageType.Regular, 0x3B2, 500849); // *hic*
}
}

View file

@ -1,44 +1,31 @@
using ModernUO.Serialization;
using Server.Mobiles;
namespace Server.Engines.Quests.Hag
namespace Server.Engines.Quests.Hag;
[SerializationGenerator(0, false)]
public partial class Zeefzorpul : BaseQuester
{
public class Zeefzorpul : BaseQuester
public Zeefzorpul()
{
public Zeefzorpul()
{
}
}
public Zeefzorpul(Serial serial) : base(serial)
{
}
public override string DefaultName => "Zeefzorpul";
public override string DefaultName => "Zeefzorpul";
public override void InitBody()
{
Body = 0x4A;
}
public override void InitBody()
{
Body = 0x4A;
}
public override bool CanTalkTo(PlayerMobile to) => false;
public override bool CanTalkTo(PlayerMobile to) => false;
public override void OnTalk(PlayerMobile player, bool contextMenu)
{
}
public override void OnTalk(PlayerMobile player, bool contextMenu)
{
}
public override void Serialize(IGenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
}
public override void Deserialize(IGenericReader reader)
{
base.Deserialize(reader);
var version = reader.ReadInt();
Delete();
}
[AfterDeserialization(false)]
private void AfterDeserialization()
{
Delete();
}
}

View file

@ -3,7 +3,6 @@ using System.Collections.Generic;
using ModernUO.Serialization;
using Server.Collections;
using Server.Engines.Plants;
using Server.Engines.Quests;
using Server.Engines.Quests.Hag;
using Server.Engines.Quests.Matriarch;
using Server.Mobiles;

View file

@ -1,7 +1,6 @@
using System;
using ModernUO.Serialization;
using Server.Accounting;
using Server.Engines.Quests;
using Server.Engines.Quests.Haven;
using Server.Engines.Quests.Necro;
using Server.Mobiles;

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Ahie"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Alejaha"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Alelle"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Aluniol"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Aniel"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Anolly"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Athailon"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Aulan"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Aurelia"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Bolaevin"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Braen"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Brinnae"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Caelas"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Cailla"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Ciala"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Cillitha"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Clehin"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Cloorne"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Daelas"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderAbbein"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderAcob"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderAlethanian"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderJothan"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderMallew"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderTaellia"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.ElderVicaie"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Iosep"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Jamal"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Jusae"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Landy"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Lohn"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.LorekeeperAneen"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.LorekeeperCalendor"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.LorekeeperNillaen"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.LorekeeperRyal"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.LorekeeperSiarra"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Mielan"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Olaeni"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Olla"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Rebinil"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Salaenih"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Saril"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.SkeletonOfSzandor"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Sleen"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Tamm"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Thallary"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Tholef"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Tillanil"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Tyeelor"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Unoelil"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Vilo"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.MLQuests.Definitions.Waelian"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.Quests.Hag.Blackheart"
}

View file

@ -0,0 +1,4 @@
{
"version": 0,
"type": "Server.Engines.Quests.Hag.Zeefzorpul"
}

View file

@ -2,7 +2,6 @@ using System;
using System.Collections.Generic;
using Server.Collections;
using Server.ContextMenus;
using Server.Engines.Quests;
using Server.Engines.Quests.Necro;
using Server.Engines.Spawners;
using Server.Engines.Virtues;

View file

@ -1,7 +1,14 @@
using System.Runtime.CompilerServices;
namespace Server.Mobiles;
public class VendorAI : BaseAI
{
// Guards! A villan attacks me!
// Guards! Help!
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int GetRandomGuardMessage() => Utility.RandomBool() ? 1005305 : 501603;
public VendorAI(BaseCreature m) : base(m)
{
}
@ -20,7 +27,7 @@ public class VendorAI : BaseAI
m_Mobile.DebugSay($"{m_Mobile.Combatant.Name} is attacking me");
}
m_Mobile.Say(Utility.RandomBool() ? 1005305 : 501603);
m_Mobile.Say(GetRandomGuardMessage());
Action = ActionType.Flee;
}
else
@ -56,7 +63,7 @@ public class VendorAI : BaseAI
m_Mobile.DebugSay($"{m_Mobile.Combatant.Name} is attacking me");
}
m_Mobile.Say(Utility.RandomList(1005305, 501603));
m_Mobile.Say(GetRandomGuardMessage());
Action = ActionType.Flee;
@ -155,4 +162,4 @@ public class VendorAI : BaseAI
}
}
}
}
}