fix: Codegens faction items and questers (#1764)
### Summary - Codegens some ConPVP items - Codegens some faction items/mobs - Codegens questers
This commit is contained in:
parent
26dfde19ee
commit
542b672d9d
160 changed files with 8466 additions and 10053 deletions
|
|
@ -1,121 +1,124 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Items
|
||||
namespace Server.Items;
|
||||
|
||||
public enum TrophyRank
|
||||
{
|
||||
public enum TrophyRank
|
||||
Bronze,
|
||||
Silver,
|
||||
Gold
|
||||
}
|
||||
|
||||
[Flippable(5020, 4647)]
|
||||
[SerializationGenerator(2, false)]
|
||||
public partial class Trophy : Item
|
||||
{
|
||||
[SerializableField(0)]
|
||||
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
||||
private string _title;
|
||||
|
||||
[SerializableField(2)]
|
||||
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
||||
private Mobile _owner;
|
||||
|
||||
[SerializableField(3, setter: "private")]
|
||||
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
||||
private DateTime _date;
|
||||
|
||||
public override string DefaultName => $"{GetRankName(_rank)} trophy";
|
||||
|
||||
private static string GetRankName(TrophyRank rank) =>
|
||||
rank switch
|
||||
{
|
||||
TrophyRank.Silver => "silver",
|
||||
TrophyRank.Gold => "gold",
|
||||
_ => "bronze"
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
public Trophy(string title, TrophyRank rank) : base(5020)
|
||||
{
|
||||
Bronze,
|
||||
Silver,
|
||||
Gold
|
||||
_title = title;
|
||||
_rank = rank;
|
||||
_date = Core.Now;
|
||||
|
||||
LootType = LootType.Blessed;
|
||||
|
||||
UpdateStyle();
|
||||
}
|
||||
|
||||
[Flippable(5020, 4647)]
|
||||
public class Trophy : Item
|
||||
[SerializableProperty(1)]
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public TrophyRank Rank
|
||||
{
|
||||
private TrophyRank m_Rank;
|
||||
|
||||
[Constructible]
|
||||
public Trophy(string title, TrophyRank rank) : base(5020)
|
||||
get => _rank;
|
||||
set
|
||||
{
|
||||
Title = title;
|
||||
m_Rank = rank;
|
||||
Date = Core.Now;
|
||||
|
||||
LootType = LootType.Blessed;
|
||||
|
||||
_rank = value;
|
||||
UpdateStyle();
|
||||
this.MarkDirty();
|
||||
}
|
||||
}
|
||||
|
||||
public Trophy(Serial serial) : base(serial)
|
||||
private void Deserialize(IGenericReader reader, int version)
|
||||
{
|
||||
_title = reader.ReadString();
|
||||
_rank = (TrophyRank)reader.ReadInt();
|
||||
_owner = reader.ReadEntity<Mobile>();
|
||||
_date = reader.ReadDateTime();
|
||||
}
|
||||
|
||||
public override void OnAdded(IEntity parent)
|
||||
{
|
||||
base.OnAdded(parent);
|
||||
|
||||
Owner ??= RootParent as Mobile;
|
||||
}
|
||||
|
||||
public override void GetProperties(IPropertyList list)
|
||||
{
|
||||
if (Owner != null)
|
||||
{
|
||||
list.Add($"{Title} -- {Owner.RawName}");
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public string Title { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public TrophyRank Rank
|
||||
else if (Title != null)
|
||||
{
|
||||
get => m_Rank;
|
||||
set
|
||||
{
|
||||
m_Rank = value;
|
||||
UpdateStyle();
|
||||
}
|
||||
list.Add(Title);
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public Mobile Owner { get; set; }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public DateTime Date { get; private set; }
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
if (Date != DateTime.MinValue)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.Write(Title);
|
||||
writer.Write((int)m_Rank);
|
||||
writer.Write(Owner);
|
||||
writer.Write(Date);
|
||||
list.Add(Date.ToString("d"));
|
||||
}
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
public override void OnSingleClick(Mobile from)
|
||||
{
|
||||
base.OnSingleClick(from);
|
||||
|
||||
if (Owner != null)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
Title = reader.ReadString();
|
||||
m_Rank = (TrophyRank)reader.ReadInt();
|
||||
Owner = reader.ReadEntity<Mobile>();
|
||||
Date = reader.ReadDateTime();
|
||||
|
||||
if (version == 0)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
}
|
||||
LabelTo(from, $"{Title} -- {Owner.RawName}");
|
||||
}
|
||||
|
||||
public override void OnAdded(IEntity parent)
|
||||
else if (Title != null)
|
||||
{
|
||||
base.OnAdded(parent);
|
||||
|
||||
Owner ??= RootParent as Mobile;
|
||||
LabelTo(from, Title);
|
||||
}
|
||||
|
||||
public override void OnSingleClick(Mobile from)
|
||||
if (Date != DateTime.MinValue)
|
||||
{
|
||||
base.OnSingleClick(from);
|
||||
|
||||
if (Owner != null)
|
||||
{
|
||||
LabelTo(from, $"{Title} -- {Owner.RawName}");
|
||||
}
|
||||
else if (Title != null)
|
||||
{
|
||||
LabelTo(from, Title);
|
||||
}
|
||||
|
||||
if (Date != DateTime.MinValue)
|
||||
{
|
||||
LabelTo(from, Date.ToString("d"));
|
||||
}
|
||||
LabelTo(from, Date.ToString("d"));
|
||||
}
|
||||
}
|
||||
|
||||
public void UpdateStyle()
|
||||
public void UpdateStyle()
|
||||
{
|
||||
Hue = _rank switch
|
||||
{
|
||||
Name = $"{m_Rank.ToString().ToLower()} trophy";
|
||||
|
||||
Hue = m_Rank switch
|
||||
{
|
||||
TrophyRank.Gold => 2213,
|
||||
TrophyRank.Silver => 0,
|
||||
TrophyRank.Bronze => 2206,
|
||||
_ => Hue
|
||||
};
|
||||
}
|
||||
TrophyRank.Gold => 2213,
|
||||
TrophyRank.Silver => 0,
|
||||
_ => 2206, // bronze
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,86 +1,68 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Ethics;
|
||||
|
||||
namespace Server.Mobiles
|
||||
namespace Server.Mobiles;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class UnholyFamiliar : BaseCreature
|
||||
{
|
||||
public class UnholyFamiliar : BaseCreature
|
||||
[Constructible]
|
||||
public UnholyFamiliar() : base(AIType.AI_Melee)
|
||||
{
|
||||
[Constructible]
|
||||
public UnholyFamiliar() : base(AIType.AI_Melee)
|
||||
Body = 99;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr(96, 120);
|
||||
SetDex(81, 105);
|
||||
SetInt(36, 60);
|
||||
|
||||
SetHits(58, 72);
|
||||
SetMana(0);
|
||||
|
||||
SetDamage(11, 17);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 20, 25);
|
||||
SetResistance(ResistanceType.Fire, 10, 20);
|
||||
SetResistance(ResistanceType.Cold, 5, 10);
|
||||
SetResistance(ResistanceType.Poison, 5, 10);
|
||||
SetResistance(ResistanceType.Energy, 10, 15);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 57.6, 75.0);
|
||||
SetSkill(SkillName.Tactics, 50.1, 70.0);
|
||||
SetSkill(SkillName.Wrestling, 60.1, 80.0);
|
||||
|
||||
Fame = 2500;
|
||||
Karma = 2500;
|
||||
|
||||
VirtualArmor = 22;
|
||||
|
||||
Tamable = false;
|
||||
ControlSlots = 1;
|
||||
}
|
||||
|
||||
public override string CorpseName => "an evil corpse";
|
||||
public override bool IsDispellable => false;
|
||||
public override bool IsBondable => false;
|
||||
public override string DefaultName => "a dark wolf";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override int Hides => 7;
|
||||
public override FoodType FavoriteFood => FoodType.Meat;
|
||||
public override PackInstinct PackInstinct => PackInstinct.Canine;
|
||||
|
||||
public override string ApplyNameSuffix(string suffix)
|
||||
{
|
||||
if (suffix.Length == 0)
|
||||
{
|
||||
Body = 99;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr(96, 120);
|
||||
SetDex(81, 105);
|
||||
SetInt(36, 60);
|
||||
|
||||
SetHits(58, 72);
|
||||
SetMana(0);
|
||||
|
||||
SetDamage(11, 17);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 20, 25);
|
||||
SetResistance(ResistanceType.Fire, 10, 20);
|
||||
SetResistance(ResistanceType.Cold, 5, 10);
|
||||
SetResistance(ResistanceType.Poison, 5, 10);
|
||||
SetResistance(ResistanceType.Energy, 10, 15);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 57.6, 75.0);
|
||||
SetSkill(SkillName.Tactics, 50.1, 70.0);
|
||||
SetSkill(SkillName.Wrestling, 60.1, 80.0);
|
||||
|
||||
Fame = 2500;
|
||||
Karma = 2500;
|
||||
|
||||
VirtualArmor = 22;
|
||||
|
||||
Tamable = false;
|
||||
ControlSlots = 1;
|
||||
suffix = Ethic.Evil.Definition.Adjunct.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix = $"{suffix} {Ethic.Evil.Definition.Adjunct.String}";
|
||||
}
|
||||
|
||||
public UnholyFamiliar(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "an evil corpse";
|
||||
public override bool IsDispellable => false;
|
||||
public override bool IsBondable => false;
|
||||
public override string DefaultName => "a dark wolf";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override int Hides => 7;
|
||||
public override FoodType FavoriteFood => FoodType.Meat;
|
||||
public override PackInstinct PackInstinct => PackInstinct.Canine;
|
||||
|
||||
public override string ApplyNameSuffix(string suffix)
|
||||
{
|
||||
if (suffix.Length == 0)
|
||||
{
|
||||
suffix = Ethic.Evil.Definition.Adjunct.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix = $"{suffix} {Ethic.Evil.Definition.Adjunct.String}";
|
||||
}
|
||||
|
||||
return base.ApplyNameSuffix(suffix);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
return base.ApplyNameSuffix(suffix);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,88 +1,69 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Ethics;
|
||||
|
||||
namespace Server.Mobiles
|
||||
namespace Server.Mobiles;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class HolyFamiliar : BaseCreature
|
||||
{
|
||||
public class HolyFamiliar : BaseCreature
|
||||
[Constructible]
|
||||
public HolyFamiliar() : base(AIType.AI_Melee)
|
||||
{
|
||||
[Constructible]
|
||||
public HolyFamiliar()
|
||||
: base(AIType.AI_Melee)
|
||||
Body = 100;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr(96, 120);
|
||||
SetDex(81, 105);
|
||||
SetInt(36, 60);
|
||||
|
||||
SetHits(58, 72);
|
||||
SetMana(0);
|
||||
|
||||
SetDamage(11, 17);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 20, 25);
|
||||
SetResistance(ResistanceType.Fire, 10, 20);
|
||||
SetResistance(ResistanceType.Cold, 5, 10);
|
||||
SetResistance(ResistanceType.Poison, 5, 10);
|
||||
SetResistance(ResistanceType.Energy, 10, 15);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 57.6, 75.0);
|
||||
SetSkill(SkillName.Tactics, 50.1, 70.0);
|
||||
SetSkill(SkillName.Wrestling, 60.1, 80.0);
|
||||
|
||||
Fame = 2500;
|
||||
Karma = 2500;
|
||||
|
||||
VirtualArmor = 22;
|
||||
|
||||
Tamable = false;
|
||||
ControlSlots = 1;
|
||||
}
|
||||
|
||||
public override string CorpseName => "a holy corpse";
|
||||
public override bool IsDispellable => false;
|
||||
public override bool IsBondable => false;
|
||||
|
||||
public override string DefaultName => "a silver wolf";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override int Hides => 7;
|
||||
public override FoodType FavoriteFood => FoodType.Meat;
|
||||
public override PackInstinct PackInstinct => PackInstinct.Canine;
|
||||
|
||||
public override string ApplyNameSuffix(string suffix)
|
||||
{
|
||||
if (suffix.Length == 0)
|
||||
{
|
||||
Body = 100;
|
||||
BaseSoundID = 0xE5;
|
||||
|
||||
SetStr(96, 120);
|
||||
SetDex(81, 105);
|
||||
SetInt(36, 60);
|
||||
|
||||
SetHits(58, 72);
|
||||
SetMana(0);
|
||||
|
||||
SetDamage(11, 17);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 20, 25);
|
||||
SetResistance(ResistanceType.Fire, 10, 20);
|
||||
SetResistance(ResistanceType.Cold, 5, 10);
|
||||
SetResistance(ResistanceType.Poison, 5, 10);
|
||||
SetResistance(ResistanceType.Energy, 10, 15);
|
||||
|
||||
SetSkill(SkillName.MagicResist, 57.6, 75.0);
|
||||
SetSkill(SkillName.Tactics, 50.1, 70.0);
|
||||
SetSkill(SkillName.Wrestling, 60.1, 80.0);
|
||||
|
||||
Fame = 2500;
|
||||
Karma = 2500;
|
||||
|
||||
VirtualArmor = 22;
|
||||
|
||||
Tamable = false;
|
||||
ControlSlots = 1;
|
||||
suffix = Ethic.Hero.Definition.Adjunct.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix = $"{suffix} {Ethic.Hero.Definition.Adjunct.String}";
|
||||
}
|
||||
|
||||
public HolyFamiliar(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string CorpseName => "a holy corpse";
|
||||
public override bool IsDispellable => false;
|
||||
public override bool IsBondable => false;
|
||||
|
||||
public override string DefaultName => "a silver wolf";
|
||||
|
||||
public override int Meat => 1;
|
||||
public override int Hides => 7;
|
||||
public override FoodType FavoriteFood => FoodType.Meat;
|
||||
public override PackInstinct PackInstinct => PackInstinct.Canine;
|
||||
|
||||
public override string ApplyNameSuffix(string suffix)
|
||||
{
|
||||
if (suffix.Length == 0)
|
||||
{
|
||||
suffix = Ethic.Hero.Definition.Adjunct.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix = $"{suffix} {Ethic.Hero.Definition.Adjunct.String}";
|
||||
}
|
||||
|
||||
return base.ApplyNameSuffix(suffix);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
return base.ApplyNameSuffix(suffix);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,60 +1,40 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
[SerializationGenerator(0)]
|
||||
public sealed partial class BloodRose : PowerFactionItem
|
||||
{
|
||||
public sealed class BloodRose : PowerFactionItem
|
||||
public BloodRose() : base(Utility.RandomBool() ? 6378 : 9035) => Hue = 2118;
|
||||
|
||||
public override string DefaultName => "blood rose";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
public BloodRose()
|
||||
: base(Utility.RandomList(6378, 9035)) =>
|
||||
Hue = 2118;
|
||||
|
||||
public BloodRose(Serial serial)
|
||||
: base(serial)
|
||||
if (from.GetStatMod("blood-rose") == null)
|
||||
{
|
||||
}
|
||||
from.PlaySound(Utility.Random(0x3A, 3));
|
||||
|
||||
public override string DefaultName => "blood rose";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
if (from.GetStatMod("blood-rose") == null)
|
||||
if (from.Body.IsHuman && !from.Mounted)
|
||||
{
|
||||
from.PlaySound(Utility.Random(0x3A, 3));
|
||||
|
||||
if (from.Body.IsHuman && !from.Mounted)
|
||||
{
|
||||
from.Animate(34, 5, 1, true, false, 0);
|
||||
}
|
||||
|
||||
var amount = Utility.Dice(3, 3, 3);
|
||||
var time = Utility.RandomMinMax(5, 30);
|
||||
|
||||
from.FixedParticles(0x373A, 10, 15, 5018, EffectLayer.Waist);
|
||||
|
||||
from.PlaySound(0x1EE);
|
||||
from.AddStatMod(new StatMod(StatType.All, "blood-rose", amount, TimeSpan.FromMinutes(time)));
|
||||
|
||||
return true;
|
||||
from.Animate(34, 5, 1, true, false, 0);
|
||||
}
|
||||
|
||||
// You have eaten one of these recently and eating another would provide no benefit.
|
||||
from.SendLocalizedMessage(1062927);
|
||||
var amount = Utility.Dice(3, 3, 3);
|
||||
var time = Utility.RandomMinMax(5, 30);
|
||||
|
||||
return false;
|
||||
from.FixedParticles(0x373A, 10, 15, 5018, EffectLayer.Waist);
|
||||
|
||||
from.PlaySound(0x1EE);
|
||||
from.AddStatMod(new StatMod(StatType.All, "blood-rose", amount, TimeSpan.FromMinutes(time)));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
// You have eaten one of these recently and eating another would provide no benefit.
|
||||
from.SendLocalizedMessage(1062927);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,68 +1,48 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
[SerializationGenerator(0)]
|
||||
public sealed partial class ClarityPotion : PowerFactionItem
|
||||
{
|
||||
public sealed class ClarityPotion : PowerFactionItem
|
||||
public ClarityPotion() : base(3628) => Hue = 1154;
|
||||
|
||||
public override string DefaultName => "clarity potion";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
public ClarityPotion()
|
||||
: base(3628) =>
|
||||
Hue = 1154;
|
||||
|
||||
public ClarityPotion(Serial serial)
|
||||
: base(serial)
|
||||
if (!from.BeginAction<ClarityPotion>())
|
||||
{
|
||||
}
|
||||
|
||||
public override string DefaultName => "clarity potion";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
if (from.BeginAction<ClarityPotion>())
|
||||
{
|
||||
var amount = Utility.Dice(3, 3, 3);
|
||||
var time = Utility.RandomMinMax(5, 30);
|
||||
|
||||
from.PlaySound(0x2D6);
|
||||
|
||||
if (from.Body.IsHuman)
|
||||
{
|
||||
from.Animate(34, 5, 1, true, false, 0);
|
||||
}
|
||||
|
||||
from.FixedParticles(0x375A, 10, 15, 5011, EffectLayer.Head);
|
||||
from.PlaySound(0x1EB);
|
||||
|
||||
var mod = from.GetStatMod("Concussion");
|
||||
|
||||
if (mod != null)
|
||||
{
|
||||
from.RemoveStatMod("Concussion");
|
||||
from.Mana -= mod.Offset;
|
||||
}
|
||||
|
||||
from.PlaySound(0x1EE);
|
||||
from.AddStatMod(new StatMod(StatType.Int, "clarity-potion", amount, TimeSpan.FromMinutes(time)));
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromMinutes(time), from.EndAction<ClarityPotion>);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
var amount = Utility.Dice(3, 3, 3);
|
||||
var time = Utility.RandomMinMax(5, 30);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
from.PlaySound(0x2D6);
|
||||
|
||||
if (from.Body.IsHuman)
|
||||
{
|
||||
from.Animate(34, 5, 1, true, false, 0);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
from.FixedParticles(0x375A, 10, 15, 5011, EffectLayer.Head);
|
||||
from.PlaySound(0x1EB);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
var mod = from.GetStatMod("Concussion");
|
||||
|
||||
if (mod != null)
|
||||
{
|
||||
from.RemoveStatMod("Concussion");
|
||||
from.Mana -= mod.Offset;
|
||||
}
|
||||
|
||||
from.PlaySound(0x1EE);
|
||||
from.AddStatMod(new StatMod(StatType.Int, "clarity-potion", amount, TimeSpan.FromMinutes(time)));
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromMinutes(time), from.EndAction<ClarityPotion>);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,48 +1,28 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Factions;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
[SerializationGenerator(0)]
|
||||
public sealed partial class GemOfEmpowerment : PowerFactionItem
|
||||
{
|
||||
public sealed class GemOfEmpowerment : PowerFactionItem
|
||||
public GemOfEmpowerment() : base(7955) => Hue = 1154;
|
||||
|
||||
public override string DefaultName => "gem of empowerment";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
public GemOfEmpowerment()
|
||||
: base(7955) =>
|
||||
Hue = 1154;
|
||||
|
||||
public GemOfEmpowerment(Serial serial)
|
||||
: base(serial)
|
||||
if (Faction.ClearSkillLoss(from))
|
||||
{
|
||||
from.LocalOverheadMessage(MessageType.Regular, 2219, false, "The gem shatters as you invoke its power.");
|
||||
from.PlaySound(909);
|
||||
|
||||
from.FixedEffect(0x373A, 10, 30);
|
||||
from.PlaySound(0x209);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public override string DefaultName => "gem of empowerment";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
if (Faction.ClearSkillLoss(from))
|
||||
{
|
||||
from.LocalOverheadMessage(MessageType.Regular, 2219, false, "The gem shatters as you invoke its power.");
|
||||
from.PlaySound(909);
|
||||
|
||||
from.FixedEffect(0x373A, 10, 30);
|
||||
from.PlaySound(0x209);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,191 +1,162 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Factions;
|
||||
using Server.Mobiles;
|
||||
using Server.Random;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public abstract partial class PowerFactionItem : Item
|
||||
{
|
||||
public abstract class PowerFactionItem : Item
|
||||
private static readonly WeightedValue<Type>[] _items =
|
||||
{
|
||||
private static readonly WeightedItem[] _items =
|
||||
{
|
||||
new(30, typeof(GemOfEmpowerment)),
|
||||
new(25, typeof(BloodRose)),
|
||||
new(20, typeof(ClarityPotion)),
|
||||
new(15, typeof(UrnOfAscension)),
|
||||
new(10, typeof(StormsEye))
|
||||
};
|
||||
new(30, typeof(GemOfEmpowerment)),
|
||||
new(25, typeof(BloodRose)),
|
||||
new(20, typeof(ClarityPotion)),
|
||||
new(15, typeof(UrnOfAscension)),
|
||||
new(10, typeof(StormsEye))
|
||||
};
|
||||
|
||||
public PowerFactionItem(int itemId)
|
||||
: base(itemId)
|
||||
private const int TotalWeight = 30 + 25 + 20 + 15 + 10;
|
||||
|
||||
public PowerFactionItem(int itemId) : base(itemId)
|
||||
{
|
||||
}
|
||||
|
||||
public abstract bool Use(Mobile mob);
|
||||
|
||||
public static void CheckSpawn(Mobile killer, Mobile victim)
|
||||
{
|
||||
if (killer == null || victim == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public PowerFactionItem(Serial serial)
|
||||
: base(serial)
|
||||
var ps = PlayerState.Find(victim);
|
||||
|
||||
if (ps == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
public abstract bool Use(Mobile mob);
|
||||
var chance = ps.Rank.Rank;
|
||||
|
||||
public static void CheckSpawn(Mobile killer, Mobile victim)
|
||||
if (chance <= Utility.Random(100))
|
||||
{
|
||||
if (killer != null && victim != null)
|
||||
return;
|
||||
}
|
||||
|
||||
var weight = Utility.Random(TotalWeight);
|
||||
|
||||
foreach (var item in _items)
|
||||
{
|
||||
if (weight < item.Weight)
|
||||
{
|
||||
var ps = PlayerState.Find(victim);
|
||||
var obj = item.Value.CreateInstance<Item>();
|
||||
|
||||
if (ps != null)
|
||||
if (obj != null)
|
||||
{
|
||||
var chance = ps.Rank.Rank;
|
||||
killer.AddToBackpack(obj);
|
||||
|
||||
if (chance > Utility.Random(100))
|
||||
{
|
||||
var weight = 0;
|
||||
|
||||
foreach (var item in _items)
|
||||
{
|
||||
weight += item.Weight;
|
||||
}
|
||||
|
||||
weight = Utility.Random(weight);
|
||||
|
||||
foreach (var item in _items)
|
||||
{
|
||||
if (weight < item.Weight)
|
||||
{
|
||||
var obj = item.Type.CreateInstance<Item>();
|
||||
|
||||
if (obj != null)
|
||||
{
|
||||
killer.AddToBackpack(obj);
|
||||
|
||||
killer.SendSound(1470);
|
||||
killer.LocalOverheadMessage(
|
||||
MessageType.Regular,
|
||||
2119,
|
||||
false,
|
||||
"You notice a strange item on the corpse, and decide to pick it up."
|
||||
);
|
||||
|
||||
try
|
||||
{
|
||||
using var op = new StreamWriter("faction-power-items.log", true);
|
||||
op.WriteLine("{0}\t{1}\t{2}\t{3}", Core.Now, killer, victim, obj);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
weight -= item.Weight;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (!IsChildOf(from.Backpack))
|
||||
{
|
||||
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
|
||||
}
|
||||
else if (from is PlayerMobile mobile && mobile.DuelContext != null)
|
||||
{
|
||||
mobile.SendMessage("You can't use that.");
|
||||
}
|
||||
else if (Faction.Find(from) == null)
|
||||
{
|
||||
from.LocalOverheadMessage(
|
||||
MessageType.Regular,
|
||||
2119,
|
||||
false,
|
||||
"The object vanishes from your hands as you touch it."
|
||||
);
|
||||
|
||||
Timer.StartTimer(
|
||||
TimeSpan.FromSeconds(1.0),
|
||||
() => from.LocalOverheadMessage(
|
||||
killer.SendSound(1470);
|
||||
killer.LocalOverheadMessage(
|
||||
MessageType.Regular,
|
||||
2118,
|
||||
2119,
|
||||
false,
|
||||
"You feel a strange tingling sensation throughout your body."
|
||||
)
|
||||
);
|
||||
"You notice a strange item on the corpse, and decide to pick it up."
|
||||
);
|
||||
|
||||
Timer.StartTimer(
|
||||
TimeSpan.FromSeconds(4.0),
|
||||
() => { from.LocalOverheadMessage(MessageType.Regular, 2118, false, "Your skin begins to burn."); }
|
||||
);
|
||||
|
||||
new DestructionTimer(from).Start();
|
||||
Delete();
|
||||
|
||||
// from.SendMessage( "You must be in a faction to use this item." );
|
||||
}
|
||||
else if (Use(from))
|
||||
{
|
||||
from.RevealingAction();
|
||||
Consume();
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
}
|
||||
|
||||
private sealed class DestructionTimer : Timer
|
||||
{
|
||||
private readonly Mobile _mobile;
|
||||
|
||||
private bool _screamed;
|
||||
|
||||
public DestructionTimer(Mobile mob)
|
||||
: base(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(0.1), 10) =>
|
||||
_mobile = mob;
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (_mobile.Alive)
|
||||
{
|
||||
if (!_screamed)
|
||||
try
|
||||
{
|
||||
_screamed = true;
|
||||
|
||||
_mobile.PlaySound(_mobile.Female ? 814 : 1088);
|
||||
_mobile.PublicOverheadMessage(MessageType.Regular, 2118, false, "Aaaaah!");
|
||||
using var op = new StreamWriter("faction-power-items.log", true);
|
||||
op.WriteLine($"{Core.Now}\t{killer}\t{victim}\t{obj}");
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignored
|
||||
}
|
||||
|
||||
_mobile.Damage(Utility.Dice(2, 6, 0));
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
weight -= item.Weight;
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class WeightedItem
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (!IsChildOf(from.Backpack))
|
||||
{
|
||||
public WeightedItem(int weight, Type type)
|
||||
from.SendLocalizedMessage(1042038); // You must have the object in your backpack to use it.
|
||||
}
|
||||
else if (from is PlayerMobile mobile && mobile.DuelContext != null)
|
||||
{
|
||||
mobile.SendMessage("You can't use that.");
|
||||
}
|
||||
else if (Faction.Find(from) == null)
|
||||
{
|
||||
from.LocalOverheadMessage(
|
||||
MessageType.Regular,
|
||||
2119,
|
||||
false,
|
||||
"The object vanishes from your hands as you touch it."
|
||||
);
|
||||
|
||||
Timer.StartTimer(
|
||||
TimeSpan.FromSeconds(1.0),
|
||||
() => from.LocalOverheadMessage(
|
||||
MessageType.Regular,
|
||||
2118,
|
||||
false,
|
||||
"You feel a strange tingling sensation throughout your body."
|
||||
)
|
||||
);
|
||||
|
||||
Timer.StartTimer(
|
||||
TimeSpan.FromSeconds(4.0),
|
||||
() => { from.LocalOverheadMessage(MessageType.Regular, 2118, false, "Your skin begins to burn."); }
|
||||
);
|
||||
|
||||
new DestructionTimer(from).Start();
|
||||
Delete();
|
||||
|
||||
// from.SendMessage( "You must be in a faction to use this item." );
|
||||
}
|
||||
else if (Use(from))
|
||||
{
|
||||
from.RevealingAction();
|
||||
Consume();
|
||||
}
|
||||
}
|
||||
|
||||
private sealed class DestructionTimer : Timer
|
||||
{
|
||||
private readonly Mobile _mobile;
|
||||
|
||||
private bool _screamed;
|
||||
|
||||
public DestructionTimer(Mobile mob) : base(TimeSpan.FromSeconds(5), TimeSpan.FromSeconds(0.1), 10) =>
|
||||
_mobile = mob;
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (!_mobile.Alive)
|
||||
{
|
||||
Weight = weight;
|
||||
Type = type;
|
||||
return;
|
||||
}
|
||||
|
||||
public int Weight { get; }
|
||||
if (!_screamed)
|
||||
{
|
||||
_screamed = true;
|
||||
|
||||
public Type Type { get; }
|
||||
_mobile.PlaySound(_mobile.Female ? 814 : 1088);
|
||||
_mobile.PublicOverheadMessage(MessageType.Regular, 2118, false, "Aaaaah!");
|
||||
}
|
||||
|
||||
_mobile.Damage(Utility.Dice(2, 6, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,185 +1,165 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Collections;
|
||||
using Server.Factions;
|
||||
using Server.Spells;
|
||||
using Server.Targeting;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
[SerializationGenerator(0)]
|
||||
public sealed partial class StormsEye : PowerFactionItem
|
||||
{
|
||||
public sealed class StormsEye : PowerFactionItem
|
||||
public StormsEye() : base(3967) => Hue = 1165;
|
||||
|
||||
public override string DefaultName => "storms eye";
|
||||
|
||||
public override bool Use(Mobile user)
|
||||
{
|
||||
public StormsEye()
|
||||
: base(3967) =>
|
||||
Hue = 1165;
|
||||
|
||||
public StormsEye(Serial serial)
|
||||
: base(serial)
|
||||
if (!Movable)
|
||||
{
|
||||
}
|
||||
|
||||
public override string DefaultName => "storms eye";
|
||||
|
||||
public override bool Use(Mobile user)
|
||||
{
|
||||
if (!Movable)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
user.BeginTarget(
|
||||
12,
|
||||
true,
|
||||
TargetFlags.None,
|
||||
(from, obj, stormsEye) =>
|
||||
{
|
||||
if (!stormsEye.Movable || stormsEye.Deleted || obj is not IPoint3D pt)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpellHelper.GetSurfaceTop(ref pt);
|
||||
|
||||
var origin = new Point3D(pt);
|
||||
var facet = from.Map;
|
||||
|
||||
if (facet?.CanFit(pt.X, pt.Y, pt.Z, 16, false, false) != true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
stormsEye.Movable = false;
|
||||
|
||||
Effects.SendMovingEffect(
|
||||
from,
|
||||
new Entity(Serial.Zero, origin, facet),
|
||||
ItemID & 0x3FFF,
|
||||
7,
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
Hue - 1
|
||||
);
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(0.5), () => OnDelay(from, stormsEye, origin, facet));
|
||||
},
|
||||
this
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void OnDelay(Mobile from, StormsEye stormsEye, Point3D origin, Map facet)
|
||||
user.BeginTarget(
|
||||
12,
|
||||
true,
|
||||
TargetFlags.None,
|
||||
(from, obj, stormsEye) =>
|
||||
{
|
||||
if (!stormsEye.Movable || stormsEye.Deleted || obj is not IPoint3D pt)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
SpellHelper.GetSurfaceTop(ref pt);
|
||||
|
||||
var origin = new Point3D(pt);
|
||||
var facet = from.Map;
|
||||
|
||||
if (facet?.CanFit(pt.X, pt.Y, pt.Z, 16, false, false) != true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
stormsEye.Movable = false;
|
||||
|
||||
Effects.SendMovingEffect(
|
||||
from,
|
||||
new Entity(Serial.Zero, origin, facet),
|
||||
ItemID & 0x3FFF,
|
||||
7,
|
||||
0,
|
||||
false,
|
||||
false,
|
||||
Hue - 1
|
||||
);
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(0.5), () => OnDelay(from, stormsEye, origin, facet));
|
||||
},
|
||||
this
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private static void OnDelay(Mobile from, StormsEye stormsEye, Point3D origin, Map facet)
|
||||
{
|
||||
stormsEye.Delete();
|
||||
|
||||
Effects.PlaySound(origin, facet, 530);
|
||||
Effects.PlaySound(origin, facet, 263);
|
||||
|
||||
Effects.SendLocationEffect(
|
||||
origin,
|
||||
facet,
|
||||
14284,
|
||||
96,
|
||||
1,
|
||||
0,
|
||||
2
|
||||
);
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(1.0), () => OnHit(from, origin, facet));
|
||||
}
|
||||
|
||||
private static void OnHit(Mobile from, Point3D origin, Map facet)
|
||||
{
|
||||
using var queue = PooledRefQueue<Mobile>.Create();
|
||||
foreach (var m in facet.GetMobilesInRange(origin, 12))
|
||||
{
|
||||
stormsEye.Delete();
|
||||
if (from.CanBeHarmful(m, false) &&
|
||||
m.InLOS(new Point3D(origin.X, origin.Y, origin.Z + 1)) &&
|
||||
Faction.Find(m) != null)
|
||||
{
|
||||
queue.Enqueue(from);
|
||||
}
|
||||
}
|
||||
|
||||
Effects.PlaySound(origin, facet, 530);
|
||||
Effects.PlaySound(origin, facet, 263);
|
||||
while (queue.Count > 0)
|
||||
{
|
||||
var mob = queue.Dequeue();
|
||||
|
||||
Effects.SendLocationEffect(
|
||||
origin,
|
||||
facet,
|
||||
14284,
|
||||
96,
|
||||
var damage = mob.Hits * 6 / 10;
|
||||
|
||||
if (!mob.Player && damage < 10)
|
||||
{
|
||||
damage = 10;
|
||||
}
|
||||
else if (damage > 75)
|
||||
{
|
||||
damage = 75;
|
||||
}
|
||||
|
||||
Effects.SendMovingEffect(
|
||||
new Entity(Serial.Zero, new Point3D(origin.X, origin.Y, origin.Z + 4), facet),
|
||||
mob,
|
||||
14068,
|
||||
1,
|
||||
0,
|
||||
32,
|
||||
false,
|
||||
false,
|
||||
1111,
|
||||
2
|
||||
);
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(1.0), () => OnHit(from, origin, facet));
|
||||
}
|
||||
from.DoHarmful(mob);
|
||||
|
||||
private static void OnHit(Mobile from, Point3D origin, Map facet)
|
||||
{
|
||||
using var queue = PooledRefQueue<Mobile>.Create();
|
||||
foreach (var m in facet.GetMobilesInRange(origin, 12))
|
||||
{
|
||||
if (from.CanBeHarmful(m, false) &&
|
||||
m.InLOS(new Point3D(origin.X, origin.Y, origin.Z + 1)) &&
|
||||
Faction.Find(m) != null)
|
||||
{
|
||||
queue.Enqueue(from);
|
||||
}
|
||||
}
|
||||
SpellHelper.Damage(
|
||||
TimeSpan.FromSeconds(0.50),
|
||||
mob,
|
||||
from,
|
||||
damage / 3.0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100
|
||||
);
|
||||
SpellHelper.Damage(
|
||||
TimeSpan.FromSeconds(0.70),
|
||||
mob,
|
||||
from,
|
||||
damage / 3.0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100
|
||||
);
|
||||
SpellHelper.Damage(
|
||||
TimeSpan.FromSeconds(1.00),
|
||||
mob,
|
||||
from,
|
||||
damage / 3.0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100
|
||||
);
|
||||
|
||||
while (queue.Count > 0)
|
||||
{
|
||||
var mob = queue.Dequeue();
|
||||
|
||||
var damage = mob.Hits * 6 / 10;
|
||||
|
||||
if (!mob.Player && damage < 10)
|
||||
{
|
||||
damage = 10;
|
||||
}
|
||||
else if (damage > 75)
|
||||
{
|
||||
damage = 75;
|
||||
}
|
||||
|
||||
Effects.SendMovingEffect(
|
||||
new Entity(Serial.Zero, new Point3D(origin.X, origin.Y, origin.Z + 4), facet),
|
||||
mob,
|
||||
14068,
|
||||
1,
|
||||
32,
|
||||
false,
|
||||
false,
|
||||
1111,
|
||||
2
|
||||
);
|
||||
|
||||
from.DoHarmful(mob);
|
||||
|
||||
SpellHelper.Damage(
|
||||
TimeSpan.FromSeconds(0.50),
|
||||
mob,
|
||||
from,
|
||||
damage / 3.0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100
|
||||
);
|
||||
SpellHelper.Damage(
|
||||
TimeSpan.FromSeconds(0.70),
|
||||
mob,
|
||||
from,
|
||||
damage / 3.0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100
|
||||
);
|
||||
SpellHelper.Damage(
|
||||
TimeSpan.FromSeconds(1.00),
|
||||
mob,
|
||||
from,
|
||||
damage / 3.0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
100
|
||||
);
|
||||
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(0.50), () => mob.PlaySound(0x1FB));
|
||||
}
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
Timer.StartTimer(TimeSpan.FromSeconds(0.50), () => mob.PlaySound(0x1FB));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,73 +1,54 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Factions;
|
||||
using Server.Gumps;
|
||||
using Server.Multis;
|
||||
|
||||
namespace Server
|
||||
namespace Server;
|
||||
|
||||
[SerializationGenerator(0)]
|
||||
public sealed partial class UrnOfAscension : PowerFactionItem
|
||||
{
|
||||
public sealed class UrnOfAscension : PowerFactionItem
|
||||
public UrnOfAscension() : base(9246)
|
||||
{
|
||||
public UrnOfAscension()
|
||||
: base(9246)
|
||||
}
|
||||
|
||||
public override string DefaultName => "urn of ascension";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
var ourFaction = Faction.Find(from);
|
||||
|
||||
var used = false;
|
||||
|
||||
foreach (var mob in from.GetMobilesInRange(8))
|
||||
{
|
||||
}
|
||||
|
||||
public UrnOfAscension(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string DefaultName => "urn of ascension";
|
||||
|
||||
public override bool Use(Mobile from)
|
||||
{
|
||||
var ourFaction = Faction.Find(from);
|
||||
|
||||
var used = false;
|
||||
|
||||
foreach (var mob in from.GetMobilesInRange(8))
|
||||
if (mob.Player && !mob.Alive && from.InLOS(mob))
|
||||
{
|
||||
if (mob.Player && !mob.Alive && from.InLOS(mob))
|
||||
if (Faction.Find(mob) != ourFaction)
|
||||
{
|
||||
if (Faction.Find(mob) != ourFaction)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
var house = BaseHouse.FindHouseAt(mob);
|
||||
var house = BaseHouse.FindHouseAt(mob);
|
||||
|
||||
if (house?.IsFriend(from) != false || house.IsFriend(mob))
|
||||
{
|
||||
Faction.ClearSkillLoss(mob);
|
||||
if (house?.IsFriend(from) != false || house.IsFriend(mob))
|
||||
{
|
||||
Faction.ClearSkillLoss(mob);
|
||||
|
||||
mob.SendGump(new ResurrectGump(mob, from));
|
||||
used = true;
|
||||
}
|
||||
mob.SendGump(new ResurrectGump(mob, from));
|
||||
used = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (used)
|
||||
{
|
||||
from.LocalOverheadMessage(MessageType.Regular, 2219, false, "The urn shatters as you invoke its power.");
|
||||
from.PlaySound(64);
|
||||
|
||||
Effects.PlaySound(from.Location, from.Map, 1481);
|
||||
}
|
||||
|
||||
return used;
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
if (used)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
from.LocalOverheadMessage(MessageType.Regular, 2219, false, "The urn shatters as you invoke its power.");
|
||||
from.PlaySound(64);
|
||||
|
||||
writer.WriteEncodedInt(0); // version
|
||||
Effects.PlaySound(from.Location, from.Map, 1481);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadEncodedInt();
|
||||
}
|
||||
return used;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,57 +1,34 @@
|
|||
namespace Server.Factions
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0)]
|
||||
public partial class Silver : Item
|
||||
{
|
||||
public class Silver : Item
|
||||
[Constructible]
|
||||
public Silver() : this(1)
|
||||
{
|
||||
[Constructible]
|
||||
public Silver() : this(1)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructible]
|
||||
public Silver(int amountFrom, int amountTo) : this(Utility.RandomMinMax(amountFrom, amountTo))
|
||||
{
|
||||
}
|
||||
|
||||
[Constructible]
|
||||
public Silver(int amount) : base(0xEF0)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
}
|
||||
|
||||
public Silver(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override double DefaultWeight => 0.02;
|
||||
|
||||
public override int GetDropSound()
|
||||
{
|
||||
if (Amount <= 1)
|
||||
{
|
||||
return 0x2E4;
|
||||
}
|
||||
|
||||
if (Amount <= 5)
|
||||
{
|
||||
return 0x2E5;
|
||||
}
|
||||
|
||||
return 0x2E6;
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[Constructible]
|
||||
public Silver(int amountFrom, int amountTo) : this(Utility.RandomMinMax(amountFrom, amountTo))
|
||||
{
|
||||
}
|
||||
|
||||
[Constructible]
|
||||
public Silver(int amount) : base(0xEF0)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
}
|
||||
|
||||
public override double DefaultWeight => 0.02;
|
||||
|
||||
public override int GetDropSound() =>
|
||||
Amount switch
|
||||
{
|
||||
<= 1 => 0x2E4,
|
||||
<= 5 => 0x2E5,
|
||||
_ => 0x2E6
|
||||
};
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,76 +1,43 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionExplosionTrap : BaseFactionTrap
|
||||
{
|
||||
public class FactionExplosionTrap : BaseFactionTrap
|
||||
[Constructible]
|
||||
public FactionExplosionTrap(Faction f = null, Mobile m = null) : base(f, m, 0x11C1)
|
||||
{
|
||||
[Constructible]
|
||||
public FactionExplosionTrap(Faction f = null, Mobile m = null) : base(f, m, 0x11C1)
|
||||
{
|
||||
}
|
||||
|
||||
public FactionExplosionTrap(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1044599; // faction explosion trap
|
||||
|
||||
public override int AttackMessage => 1010543; // You are enveloped in an explosion of fire!
|
||||
public override int DisarmMessage => 1010539; // You carefully remove the pressure trigger and disable the trap.
|
||||
public override int EffectSound => 0x307;
|
||||
public override int MessageHue => 0x78;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.AnyFactionTown;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
Effects.SendLocationEffect(GetWorldLocation(), Map, 0x36BD, 15);
|
||||
}
|
||||
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.Damage(Utility.Dice(6, 10, 40), m);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class FactionExplosionTrapDeed : BaseFactionTrapDeed
|
||||
public override int LabelNumber => 1044599; // faction explosion trap
|
||||
|
||||
public override int AttackMessage => 1010543; // You are enveloped in an explosion of fire!
|
||||
public override int DisarmMessage => 1010539; // You carefully remove the pressure trigger and disable the trap.
|
||||
public override int EffectSound => 0x307;
|
||||
public override int MessageHue => 0x78;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.AnyFactionTown;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
public FactionExplosionTrapDeed() : base(0x36D2)
|
||||
{
|
||||
}
|
||||
Effects.SendLocationEffect(GetWorldLocation(), Map, 0x36BD, 15);
|
||||
}
|
||||
|
||||
public FactionExplosionTrapDeed(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionExplosionTrap);
|
||||
public override int LabelNumber => 1044603; // faction explosion trap deed
|
||||
|
||||
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();
|
||||
}
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.Damage(Utility.Dice(6, 10, 40), m);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionExplosionTrapDeed : BaseFactionTrapDeed
|
||||
{
|
||||
public FactionExplosionTrapDeed() : base(0x36D2)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionExplosionTrap);
|
||||
public override int LabelNumber => 1044603; // faction explosion trap deed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,76 +1,43 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionGasTrap : BaseFactionTrap
|
||||
{
|
||||
public class FactionGasTrap : BaseFactionTrap
|
||||
[Constructible]
|
||||
public FactionGasTrap(Faction f = null, Mobile m = null) : base(f, m, 0x113C)
|
||||
{
|
||||
[Constructible]
|
||||
public FactionGasTrap(Faction f = null, Mobile m = null) : base(f, m, 0x113C)
|
||||
{
|
||||
}
|
||||
|
||||
public FactionGasTrap(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1044598; // faction gas trap
|
||||
|
||||
public override int AttackMessage => 1010542; // A noxious green cloud of poison gas envelops you!
|
||||
public override int DisarmMessage => 502376; // The poison leaks harmlessly away due to your deft touch.
|
||||
public override int EffectSound => 0x230;
|
||||
public override int MessageHue => 0x44;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.FactionStronghold;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
Effects.SendLocationEffect(Location, Map, 0x3709, 28, 10, 0x1D3, 5);
|
||||
}
|
||||
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.ApplyPoison(m, Poison.Lethal);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class FactionGasTrapDeed : BaseFactionTrapDeed
|
||||
public override int LabelNumber => 1044598; // faction gas trap
|
||||
|
||||
public override int AttackMessage => 1010542; // A noxious green cloud of poison gas envelops you!
|
||||
public override int DisarmMessage => 502376; // The poison leaks harmlessly away due to your deft touch.
|
||||
public override int EffectSound => 0x230;
|
||||
public override int MessageHue => 0x44;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.FactionStronghold;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
public FactionGasTrapDeed() : base(0x11AB)
|
||||
{
|
||||
}
|
||||
Effects.SendLocationEffect(Location, Map, 0x3709, 28, 10, 0x1D3, 5);
|
||||
}
|
||||
|
||||
public FactionGasTrapDeed(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionGasTrap);
|
||||
public override int LabelNumber => 1044602; // faction gas trap deed
|
||||
|
||||
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();
|
||||
}
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.ApplyPoison(m, Poison.Lethal);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionGasTrapDeed : BaseFactionTrapDeed
|
||||
{
|
||||
public FactionGasTrapDeed() : base(0x11AB)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionGasTrap);
|
||||
public override int LabelNumber => 1044602; // faction gas trap deed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,76 +1,43 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionSawTrap : BaseFactionTrap
|
||||
{
|
||||
public class FactionSawTrap : BaseFactionTrap
|
||||
[Constructible]
|
||||
public FactionSawTrap(Faction f = null, Mobile m = null) : base(f, m, 0x11AC)
|
||||
{
|
||||
[Constructible]
|
||||
public FactionSawTrap(Faction f = null, Mobile m = null) : base(f, m, 0x11AC)
|
||||
{
|
||||
}
|
||||
|
||||
public FactionSawTrap(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1041047; // faction saw trap
|
||||
|
||||
public override int AttackMessage => 1010544; // The blade cuts deep into your skin!
|
||||
public override int DisarmMessage => 1010540; // You carefully dismantle the saw mechanism and disable the trap.
|
||||
public override int EffectSound => 0x218;
|
||||
public override int MessageHue => 0x5A;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.ControlledFactionTown;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
Effects.SendLocationEffect(Location, Map, 0x11AD, 25);
|
||||
}
|
||||
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.Damage(Utility.Dice(6, 10, 40), m);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class FactionSawTrapDeed : BaseFactionTrapDeed
|
||||
public override int LabelNumber => 1041047; // faction saw trap
|
||||
|
||||
public override int AttackMessage => 1010544; // The blade cuts deep into your skin!
|
||||
public override int DisarmMessage => 1010540; // You carefully dismantle the saw mechanism and disable the trap.
|
||||
public override int EffectSound => 0x218;
|
||||
public override int MessageHue => 0x5A;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.ControlledFactionTown;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
public FactionSawTrapDeed() : base(0x1107)
|
||||
{
|
||||
}
|
||||
Effects.SendLocationEffect(Location, Map, 0x11AD, 25);
|
||||
}
|
||||
|
||||
public FactionSawTrapDeed(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionSawTrap);
|
||||
public override int LabelNumber => 1044604; // faction saw trap deed
|
||||
|
||||
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();
|
||||
}
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.Damage(Utility.Dice(6, 10, 40), m);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionSawTrapDeed : BaseFactionTrapDeed
|
||||
{
|
||||
public FactionSawTrapDeed() : base(0x1107)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionSawTrap);
|
||||
public override int LabelNumber => 1044604; // faction saw trap deed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,79 +1,46 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionSpikeTrap : BaseFactionTrap
|
||||
{
|
||||
public class FactionSpikeTrap : BaseFactionTrap
|
||||
[Constructible]
|
||||
public FactionSpikeTrap(Faction f = null, Mobile m = null) : base(f, m, 0x11A0)
|
||||
{
|
||||
[Constructible]
|
||||
public FactionSpikeTrap(Faction f = null, Mobile m = null) : base(f, m, 0x11A0)
|
||||
{
|
||||
}
|
||||
|
||||
public FactionSpikeTrap(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1044601; // faction spike trap
|
||||
|
||||
public override int AttackMessage => 1010545; // Large spikes in the ground spring up piercing your skin!
|
||||
|
||||
public override int DisarmMessage =>
|
||||
1010541; // You carefully dismantle the trigger on the spikes and disable the trap.
|
||||
|
||||
public override int EffectSound => 0x22E;
|
||||
public override int MessageHue => 0x5A;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.ControlledFactionTown;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
Effects.SendLocationEffect(Location, Map, 0x11A4, 12, 6);
|
||||
}
|
||||
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.Damage(Utility.Dice(6, 10, 40), m);
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class FactionSpikeTrapDeed : BaseFactionTrapDeed
|
||||
public override int LabelNumber => 1044601; // faction spike trap
|
||||
|
||||
public override int AttackMessage => 1010545; // Large spikes in the ground spring up piercing your skin!
|
||||
|
||||
public override int DisarmMessage =>
|
||||
1010541; // You carefully dismantle the trigger on the spikes and disable the trap.
|
||||
|
||||
public override int EffectSound => 0x22E;
|
||||
public override int MessageHue => 0x5A;
|
||||
|
||||
public override AllowedPlacing AllowedPlacing => AllowedPlacing.ControlledFactionTown;
|
||||
|
||||
public override void DoVisibleEffect()
|
||||
{
|
||||
public FactionSpikeTrapDeed() : base(0x11A5)
|
||||
{
|
||||
}
|
||||
Effects.SendLocationEffect(Location, Map, 0x11A4, 12, 6);
|
||||
}
|
||||
|
||||
public FactionSpikeTrapDeed(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionSpikeTrap);
|
||||
public override int LabelNumber => 1044605; // faction spike trap deed
|
||||
|
||||
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();
|
||||
}
|
||||
public override void DoAttackEffect(Mobile m)
|
||||
{
|
||||
m.Damage(Utility.Dice(6, 10, 40), m);
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionSpikeTrapDeed : BaseFactionTrapDeed
|
||||
{
|
||||
public FactionSpikeTrapDeed() : base(0x11A5)
|
||||
{
|
||||
}
|
||||
|
||||
public override Type TrapType => typeof(FactionSpikeTrap);
|
||||
public override int LabelNumber => 1044605; // faction spike trap deed
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,71 +1,38 @@
|
|||
namespace Server.Factions
|
||||
using ModernUO.Serialization;
|
||||
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionTrapRemovalKit : Item
|
||||
{
|
||||
public class FactionTrapRemovalKit : Item
|
||||
[EncodedInt]
|
||||
[SerializableField(0)]
|
||||
[SerializedCommandProperty(AccessLevel.GameMaster)]
|
||||
private int _charges;
|
||||
|
||||
[Constructible]
|
||||
public FactionTrapRemovalKit() : base(7867)
|
||||
{
|
||||
[Constructible]
|
||||
public FactionTrapRemovalKit() : base(7867)
|
||||
LootType = LootType.Blessed;
|
||||
_charges = 25;
|
||||
}
|
||||
|
||||
public override int LabelNumber => 1041508; // a faction trap removal kit
|
||||
|
||||
public void ConsumeCharge(Mobile consumer)
|
||||
{
|
||||
if (--Charges <= 0)
|
||||
{
|
||||
LootType = LootType.Blessed;
|
||||
Charges = 25;
|
||||
}
|
||||
|
||||
public FactionTrapRemovalKit(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int Charges { get; set; }
|
||||
|
||||
public override int LabelNumber => 1041508; // a faction trap removal kit
|
||||
|
||||
public void ConsumeCharge(Mobile consumer)
|
||||
{
|
||||
--Charges;
|
||||
|
||||
if (Charges <= 0)
|
||||
{
|
||||
Delete();
|
||||
|
||||
consumer?.SendLocalizedMessage(1042531); // You have used all of the parts in your trap removal kit.
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(IPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
// NOTE: OSI does not list uses remaining; intentional difference
|
||||
list.Add(1060584, Charges); // uses remaining: ~1_val~
|
||||
}
|
||||
|
||||
public override void Serialize(IGenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.Write(1); // version
|
||||
|
||||
writer.WriteEncodedInt(Charges);
|
||||
}
|
||||
|
||||
public override void Deserialize(IGenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
var version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
Charges = reader.ReadEncodedInt();
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
Charges = 25;
|
||||
break;
|
||||
}
|
||||
}
|
||||
Delete();
|
||||
consumer?.SendLocalizedMessage(1042531); // You have used all of the parts in your trap removal kit.
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(IPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
// NOTE: OSI does not list uses remaining; intentional difference
|
||||
list.Add(1060584, Charges); // uses remaining: ~1_val~
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,72 +1,55 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionBerserker : BaseFactionGuard
|
||||
{
|
||||
public class FactionBerserker : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionBerserker() : base("the berserker")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionBerserker() : base("the berserker")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
GenerateBody(false, false);
|
||||
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
|
||||
VirtualArmor = 24;
|
||||
VirtualArmor = 24;
|
||||
|
||||
SetSkill(SkillName.Swords, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
SetSkill(SkillName.Swords, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
|
||||
AddItem(Immovable(Rehued(new BodySash(), 1645)));
|
||||
AddItem(Immovable(Rehued(new Kilt(), 1645)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1645)));
|
||||
AddItem(Newbied(new DoubleAxe()));
|
||||
AddItem(Immovable(Rehued(new BodySash(), 1645)));
|
||||
AddItem(Immovable(Rehued(new Kilt(), 1645)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1645)));
|
||||
AddItem(Newbied(new DoubleAxe()));
|
||||
|
||||
HairItemID = 0x2047; // Afro
|
||||
HairHue = 0x29;
|
||||
HairItemID = 0x2047; // Afro
|
||||
HairHue = 0x29;
|
||||
|
||||
FacialHairItemID = 0x204B; // Medium Short Beard
|
||||
FacialHairHue = 0x29;
|
||||
FacialHairItemID = 0x204B; // Medium Short Beard
|
||||
FacialHairHue = 0x29;
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionBerserker(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee | GuardAI.Curse | GuardAI.Bless;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee | GuardAI.Curse | GuardAI.Bless;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,68 +1,51 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionDeathKnight : BaseFactionGuard
|
||||
{
|
||||
public class FactionDeathKnight : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionDeathKnight() : base("the death knight")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionDeathKnight() : base("the death knight")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
Hue = 1;
|
||||
GenerateBody(false, false);
|
||||
Hue = 1;
|
||||
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
|
||||
VirtualArmor = 24;
|
||||
VirtualArmor = 24;
|
||||
|
||||
SetSkill(SkillName.Swords, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
SetSkill(SkillName.Swords, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
|
||||
var shroud = new Item(0x204E);
|
||||
shroud.Layer = Layer.OuterTorso;
|
||||
var shroud = new Item(0x204E);
|
||||
shroud.Layer = Layer.OuterTorso;
|
||||
|
||||
AddItem(Immovable(Rehued(shroud, 1109)));
|
||||
AddItem(Newbied(Rehued(new ExecutionersAxe(), 2211)));
|
||||
AddItem(Immovable(Rehued(shroud, 1109)));
|
||||
AddItem(Newbied(Rehued(new ExecutionersAxe(), 2211)));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionDeathKnight(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee | GuardAI.Curse | GuardAI.Bless;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee | GuardAI.Curse | GuardAI.Bless;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,73 +1,56 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionDragoon : BaseFactionGuard
|
||||
{
|
||||
public class FactionDragoon : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionDragoon() : base("the dragoon")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionDragoon() : base("the dragoon")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
GenerateBody(false, false);
|
||||
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(151, 175);
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(151, 175);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
|
||||
VirtualArmor = 32;
|
||||
VirtualArmor = 32;
|
||||
|
||||
SetSkill(SkillName.Macing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
SetSkill(SkillName.Macing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
|
||||
AddItem(Immovable(Rehued(new Cloak(), 1645)));
|
||||
AddItem(Immovable(Rehued(new Cloak(), 1645)));
|
||||
|
||||
AddItem(Immovable(Rehued(new PlateChest(), 1645)));
|
||||
AddItem(Immovable(Rehued(new PlateLegs(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateArms(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateGloves(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateGorget(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateHelm(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateChest(), 1645)));
|
||||
AddItem(Immovable(Rehued(new PlateLegs(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateArms(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateGloves(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateGorget(), 1109)));
|
||||
AddItem(Immovable(Rehued(new PlateHelm(), 1109)));
|
||||
|
||||
AddItem(Newbied(new WarHammer()));
|
||||
AddItem(Newbied(new WarHammer()));
|
||||
|
||||
AddItem(Immovable(Rehued(new VirtualMountItem(this), 1109)));
|
||||
AddItem(Immovable(Rehued(new VirtualMountItem(this), 1109)));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionDragoon(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Melee | GuardAI.Smart | GuardAI.Bless | GuardAI.Curse;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Melee | GuardAI.Smart | GuardAI.Bless | GuardAI.Curse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,65 +1,48 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionHenchman : BaseFactionGuard
|
||||
{
|
||||
public class FactionHenchman : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionHenchman() : base("the henchman")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionHenchman() : base("the henchman")
|
||||
{
|
||||
GenerateBody(false, true);
|
||||
GenerateBody(false, true);
|
||||
|
||||
SetStr(91, 115);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
SetStr(91, 115);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
|
||||
SetDamage(10, 14);
|
||||
SetDamage(10, 14);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 10, 30);
|
||||
SetResistance(ResistanceType.Fire, 10, 30);
|
||||
SetResistance(ResistanceType.Cold, 10, 30);
|
||||
SetResistance(ResistanceType.Energy, 10, 30);
|
||||
SetResistance(ResistanceType.Poison, 10, 30);
|
||||
SetResistance(ResistanceType.Physical, 10, 30);
|
||||
SetResistance(ResistanceType.Fire, 10, 30);
|
||||
SetResistance(ResistanceType.Cold, 10, 30);
|
||||
SetResistance(ResistanceType.Energy, 10, 30);
|
||||
SetResistance(ResistanceType.Poison, 10, 30);
|
||||
|
||||
VirtualArmor = 8;
|
||||
VirtualArmor = 8;
|
||||
|
||||
SetSkill(SkillName.Fencing, 80.0, 90.0);
|
||||
SetSkill(SkillName.Wrestling, 80.0, 90.0);
|
||||
SetSkill(SkillName.Tactics, 80.0, 90.0);
|
||||
SetSkill(SkillName.MagicResist, 80.0, 90.0);
|
||||
SetSkill(SkillName.Healing, 80.0, 90.0);
|
||||
SetSkill(SkillName.Anatomy, 80.0, 90.0);
|
||||
SetSkill(SkillName.Fencing, 80.0, 90.0);
|
||||
SetSkill(SkillName.Wrestling, 80.0, 90.0);
|
||||
SetSkill(SkillName.Tactics, 80.0, 90.0);
|
||||
SetSkill(SkillName.MagicResist, 80.0, 90.0);
|
||||
SetSkill(SkillName.Healing, 80.0, 90.0);
|
||||
SetSkill(SkillName.Anatomy, 80.0, 90.0);
|
||||
|
||||
AddItem(new StuddedChest());
|
||||
AddItem(new StuddedLegs());
|
||||
AddItem(new StuddedArms());
|
||||
AddItem(new StuddedGloves());
|
||||
AddItem(new StuddedGorget());
|
||||
AddItem(new Boots());
|
||||
AddItem(Newbied(new Spear()));
|
||||
AddItem(new StuddedChest());
|
||||
AddItem(new StuddedLegs());
|
||||
AddItem(new StuddedArms());
|
||||
AddItem(new StuddedGloves());
|
||||
AddItem(new StuddedGorget());
|
||||
AddItem(new Boots());
|
||||
AddItem(Newbied(new Spear()));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(10, 20)));
|
||||
PackWeakPotions(1, 4);
|
||||
}
|
||||
|
||||
public FactionHenchman(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(10, 20)));
|
||||
PackWeakPotions(1, 4);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,73 +1,56 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionKnight : BaseFactionGuard
|
||||
{
|
||||
public class FactionKnight : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionKnight() : base("the knight")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionKnight() : base("the knight")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
GenerateBody(false, false);
|
||||
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
|
||||
VirtualArmor = 24;
|
||||
VirtualArmor = 24;
|
||||
|
||||
SetSkill(SkillName.Swords, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
SetSkill(SkillName.Swords, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
|
||||
AddItem(Immovable(Rehued(new ChainChest(), 2125)));
|
||||
AddItem(Immovable(Rehued(new ChainLegs(), 2125)));
|
||||
AddItem(Immovable(Rehued(new ChainCoif(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateArms(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateGloves(), 2125)));
|
||||
AddItem(Immovable(Rehued(new ChainChest(), 2125)));
|
||||
AddItem(Immovable(Rehued(new ChainLegs(), 2125)));
|
||||
AddItem(Immovable(Rehued(new ChainCoif(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateArms(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateGloves(), 2125)));
|
||||
|
||||
AddItem(Immovable(Rehued(new BodySash(), 1254)));
|
||||
AddItem(Immovable(Rehued(new Kilt(), 1254)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1254)));
|
||||
AddItem(Immovable(Rehued(new BodySash(), 1254)));
|
||||
AddItem(Immovable(Rehued(new Kilt(), 1254)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1254)));
|
||||
|
||||
AddItem(Newbied(new Bardiche()));
|
||||
AddItem(Newbied(new Bardiche()));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionKnight(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Melee | GuardAI.Smart | GuardAI.Curse | GuardAI.Bless;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Melee | GuardAI.Smart | GuardAI.Curse | GuardAI.Bless;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,63 +1,46 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionMercenary : BaseFactionGuard
|
||||
{
|
||||
public class FactionMercenary : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionMercenary() : base("the mercenary")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionMercenary() : base("the mercenary")
|
||||
{
|
||||
GenerateBody(false, true);
|
||||
GenerateBody(false, true);
|
||||
|
||||
SetStr(116, 125);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
SetStr(116, 125);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 20, 40);
|
||||
SetResistance(ResistanceType.Fire, 20, 40);
|
||||
SetResistance(ResistanceType.Cold, 20, 40);
|
||||
SetResistance(ResistanceType.Energy, 20, 40);
|
||||
SetResistance(ResistanceType.Poison, 20, 40);
|
||||
SetResistance(ResistanceType.Physical, 20, 40);
|
||||
SetResistance(ResistanceType.Fire, 20, 40);
|
||||
SetResistance(ResistanceType.Cold, 20, 40);
|
||||
SetResistance(ResistanceType.Energy, 20, 40);
|
||||
SetResistance(ResistanceType.Poison, 20, 40);
|
||||
|
||||
VirtualArmor = 16;
|
||||
VirtualArmor = 16;
|
||||
|
||||
SetSkill(SkillName.Fencing, 90.0, 100.0);
|
||||
SetSkill(SkillName.Wrestling, 90.0, 100.0);
|
||||
SetSkill(SkillName.Tactics, 90.0, 100.0);
|
||||
SetSkill(SkillName.MagicResist, 90.0, 100.0);
|
||||
SetSkill(SkillName.Healing, 90.0, 100.0);
|
||||
SetSkill(SkillName.Anatomy, 90.0, 100.0);
|
||||
SetSkill(SkillName.Fencing, 90.0, 100.0);
|
||||
SetSkill(SkillName.Wrestling, 90.0, 100.0);
|
||||
SetSkill(SkillName.Tactics, 90.0, 100.0);
|
||||
SetSkill(SkillName.MagicResist, 90.0, 100.0);
|
||||
SetSkill(SkillName.Healing, 90.0, 100.0);
|
||||
SetSkill(SkillName.Anatomy, 90.0, 100.0);
|
||||
|
||||
AddItem(new ChainChest());
|
||||
AddItem(new ChainLegs());
|
||||
AddItem(new RingmailArms());
|
||||
AddItem(new RingmailGloves());
|
||||
AddItem(new ChainCoif());
|
||||
AddItem(new Boots());
|
||||
AddItem(Newbied(new ShortSpear()));
|
||||
AddItem(new ChainChest());
|
||||
AddItem(new ChainLegs());
|
||||
AddItem(new RingmailArms());
|
||||
AddItem(new RingmailGloves());
|
||||
AddItem(new ChainCoif());
|
||||
AddItem(new Boots());
|
||||
AddItem(Newbied(new ShortSpear()));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(20, 30)));
|
||||
PackStrongPotions(3, 8);
|
||||
}
|
||||
|
||||
public FactionMercenary(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee | GuardAI.Smart;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(20, 30)));
|
||||
PackStrongPotions(3, 8);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Melee | GuardAI.Smart;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,66 +1,49 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionNecromancer : BaseFactionGuard
|
||||
{
|
||||
public class FactionNecromancer : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionNecromancer() : base("the necromancer")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionNecromancer() : base("the necromancer")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
Hue = 1;
|
||||
GenerateBody(false, false);
|
||||
Hue = 1;
|
||||
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(151, 175);
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(151, 175);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
|
||||
VirtualArmor = 32;
|
||||
VirtualArmor = 32;
|
||||
|
||||
SetSkill(SkillName.Macing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
SetSkill(SkillName.Macing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
|
||||
var shroud = new Item(0x204E);
|
||||
shroud.Layer = Layer.OuterTorso;
|
||||
var shroud = new Item(0x204E);
|
||||
shroud.Layer = Layer.OuterTorso;
|
||||
|
||||
AddItem(Immovable(Rehued(shroud, 1109)));
|
||||
AddItem(Newbied(Rehued(new GnarledStaff(), 2211)));
|
||||
AddItem(Immovable(Rehued(shroud, 1109)));
|
||||
AddItem(Newbied(Rehued(new GnarledStaff(), 2211)));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionNecromancer(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Smart | GuardAI.Bless | GuardAI.Curse;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Smart | GuardAI.Bless | GuardAI.Curse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,74 +1,57 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionPaladin : BaseFactionGuard
|
||||
{
|
||||
public class FactionPaladin : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionPaladin() : base("the paladin")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionPaladin() : base("the paladin")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
GenerateBody(false, false);
|
||||
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(81, 95);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
|
||||
VirtualArmor = 32;
|
||||
VirtualArmor = 32;
|
||||
|
||||
SetSkill(SkillName.Swords, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
SetSkill(SkillName.Swords, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
|
||||
AddItem(Immovable(Rehued(new PlateChest(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateLegs(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateHelm(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateGorget(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateArms(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateGloves(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateChest(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateLegs(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateHelm(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateGorget(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateArms(), 2125)));
|
||||
AddItem(Immovable(Rehued(new PlateGloves(), 2125)));
|
||||
|
||||
AddItem(Immovable(Rehued(new BodySash(), 1254)));
|
||||
AddItem(Immovable(Rehued(new Cloak(), 1254)));
|
||||
AddItem(Immovable(Rehued(new BodySash(), 1254)));
|
||||
AddItem(Immovable(Rehued(new Cloak(), 1254)));
|
||||
|
||||
AddItem(Newbied(new Halberd()));
|
||||
AddItem(Newbied(new Halberd()));
|
||||
|
||||
AddItem(Immovable(Rehued(new VirtualMountItem(this), 1254)));
|
||||
AddItem(Immovable(Rehued(new VirtualMountItem(this), 1254)));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionPaladin(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Melee | GuardAI.Smart | GuardAI.Curse | GuardAI.Bless;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Melee | GuardAI.Smart | GuardAI.Curse | GuardAI.Bless;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,70 +1,53 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionSorceress : BaseFactionGuard
|
||||
{
|
||||
public class FactionSorceress : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionSorceress() : base("the sorceress")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionSorceress() : base("the sorceress")
|
||||
{
|
||||
GenerateBody(true, false);
|
||||
GenerateBody(true, false);
|
||||
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(126, 150);
|
||||
SetStr(126, 150);
|
||||
SetDex(61, 85);
|
||||
SetInt(126, 150);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
SetResistance(ResistanceType.Physical, 30, 50);
|
||||
SetResistance(ResistanceType.Fire, 30, 50);
|
||||
SetResistance(ResistanceType.Cold, 30, 50);
|
||||
SetResistance(ResistanceType.Energy, 30, 50);
|
||||
SetResistance(ResistanceType.Poison, 30, 50);
|
||||
|
||||
VirtualArmor = 24;
|
||||
VirtualArmor = 24;
|
||||
|
||||
SetSkill(SkillName.Macing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
SetSkill(SkillName.Macing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Wrestling, 100.0, 110.0);
|
||||
SetSkill(SkillName.Tactics, 100.0, 110.0);
|
||||
SetSkill(SkillName.MagicResist, 100.0, 110.0);
|
||||
SetSkill(SkillName.Healing, 100.0, 110.0);
|
||||
SetSkill(SkillName.Anatomy, 100.0, 110.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
SetSkill(SkillName.Magery, 100.0, 110.0);
|
||||
SetSkill(SkillName.EvalInt, 100.0, 110.0);
|
||||
SetSkill(SkillName.Meditation, 100.0, 110.0);
|
||||
|
||||
AddItem(Immovable(Rehued(new WizardsHat(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1325)));
|
||||
AddItem(Immovable(Rehued(new LeatherGorget(), 1325)));
|
||||
AddItem(Immovable(Rehued(new LeatherGloves(), 1325)));
|
||||
AddItem(Immovable(Rehued(new LeatherLegs(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Skirt(), 1325)));
|
||||
AddItem(Immovable(Rehued(new FemaleLeatherChest(), 1325)));
|
||||
AddItem(Newbied(Rehued(new QuarterStaff(), 1310)));
|
||||
AddItem(Immovable(Rehued(new WizardsHat(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1325)));
|
||||
AddItem(Immovable(Rehued(new LeatherGorget(), 1325)));
|
||||
AddItem(Immovable(Rehued(new LeatherGloves(), 1325)));
|
||||
AddItem(Immovable(Rehued(new LeatherLegs(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Skirt(), 1325)));
|
||||
AddItem(Immovable(Rehued(new FemaleLeatherChest(), 1325)));
|
||||
AddItem(Newbied(Rehued(new QuarterStaff(), 1310)));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionSorceress(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Bless | GuardAI.Curse;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Bless | GuardAI.Curse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,67 +1,50 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionWizard : BaseFactionGuard
|
||||
{
|
||||
public class FactionWizard : BaseFactionGuard
|
||||
[Constructible]
|
||||
public FactionWizard() : base("the wizard")
|
||||
{
|
||||
[Constructible]
|
||||
public FactionWizard() : base("the wizard")
|
||||
{
|
||||
GenerateBody(false, false);
|
||||
GenerateBody(false, false);
|
||||
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(151, 175);
|
||||
SetStr(151, 175);
|
||||
SetDex(61, 85);
|
||||
SetInt(151, 175);
|
||||
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
SetDamageType(ResistanceType.Physical, 100);
|
||||
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
SetResistance(ResistanceType.Physical, 40, 60);
|
||||
SetResistance(ResistanceType.Fire, 40, 60);
|
||||
SetResistance(ResistanceType.Cold, 40, 60);
|
||||
SetResistance(ResistanceType.Energy, 40, 60);
|
||||
SetResistance(ResistanceType.Poison, 40, 60);
|
||||
|
||||
VirtualArmor = 32;
|
||||
VirtualArmor = 32;
|
||||
|
||||
SetSkill(SkillName.Macing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
SetSkill(SkillName.Macing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Wrestling, 110.0, 120.0);
|
||||
SetSkill(SkillName.Tactics, 110.0, 120.0);
|
||||
SetSkill(SkillName.MagicResist, 110.0, 120.0);
|
||||
SetSkill(SkillName.Healing, 110.0, 120.0);
|
||||
SetSkill(SkillName.Anatomy, 110.0, 120.0);
|
||||
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
SetSkill(SkillName.Magery, 110.0, 120.0);
|
||||
SetSkill(SkillName.EvalInt, 110.0, 120.0);
|
||||
SetSkill(SkillName.Meditation, 110.0, 120.0);
|
||||
|
||||
AddItem(Immovable(Rehued(new WizardsHat(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Robe(), 1310)));
|
||||
AddItem(Immovable(Rehued(new LeatherGloves(), 1325)));
|
||||
AddItem(Newbied(Rehued(new GnarledStaff(), 1310)));
|
||||
AddItem(Immovable(Rehued(new WizardsHat(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Sandals(), 1325)));
|
||||
AddItem(Immovable(Rehued(new Robe(), 1310)));
|
||||
AddItem(Immovable(Rehued(new LeatherGloves(), 1325)));
|
||||
AddItem(Newbied(Rehued(new GnarledStaff(), 1310)));
|
||||
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public FactionWizard(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Smart | GuardAI.Bless | GuardAI.Curse;
|
||||
|
||||
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();
|
||||
}
|
||||
PackItem(new Bandage(Utility.RandomMinMax(30, 40)));
|
||||
PackStrongPotions(6, 12);
|
||||
}
|
||||
|
||||
public override GuardAI GuardAI => GuardAI.Magic | GuardAI.Smart | GuardAI.Bless | GuardAI.Curse;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,68 +1,49 @@
|
|||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionBoardVendor : BaseFactionVendor
|
||||
{
|
||||
public class FactionBoardVendor : BaseFactionVendor
|
||||
public FactionBoardVendor(Town town, Faction faction) :
|
||||
base(town, faction, "the LumberMan") // NOTE: title inconsistent, as OSI
|
||||
{
|
||||
public FactionBoardVendor(Town town, Faction faction) :
|
||||
base(town, faction, "the LumberMan") // NOTE: title inconsistant, as OSI
|
||||
{
|
||||
SetSkill(SkillName.Carpentry, 85.0, 100.0);
|
||||
SetSkill(SkillName.Lumberjacking, 60.0, 83.0);
|
||||
}
|
||||
|
||||
public FactionBoardVendor(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add(new SBFactionBoard());
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem(new HalfApron());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
SetSkill(SkillName.Carpentry, 85.0, 100.0);
|
||||
SetSkill(SkillName.Lumberjacking, 60.0, 83.0);
|
||||
}
|
||||
|
||||
public class SBFactionBoard : SBInfo
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
SBInfos.Add(new SBFactionBoard());
|
||||
}
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 5; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(Board), 3, 20, 0x1BD7, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo
|
||||
{
|
||||
}
|
||||
AddItem(new HalfApron());
|
||||
}
|
||||
}
|
||||
|
||||
public class SBFactionBoard : SBInfo
|
||||
{
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 5; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(Board), 3, 20, 0x1BD7, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,69 +1,50 @@
|
|||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionBottleVendor : BaseFactionVendor
|
||||
{
|
||||
public class FactionBottleVendor : BaseFactionVendor
|
||||
public FactionBottleVendor(Town town, Faction faction) : base(town, faction, "the Bottle Seller")
|
||||
{
|
||||
public FactionBottleVendor(Town town, Faction faction) : base(town, faction, "the Bottle Seller")
|
||||
{
|
||||
SetSkill(SkillName.Alchemy, 85.0, 100.0);
|
||||
SetSkill(SkillName.TasteID, 65.0, 88.0);
|
||||
}
|
||||
|
||||
public FactionBottleVendor(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override VendorShoeType ShoeType => Utility.RandomBool() ? VendorShoeType.Shoes : VendorShoeType.Sandals;
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add(new SBFactionBottle());
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem(new Robe(Utility.RandomPinkHue()));
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
SetSkill(SkillName.Alchemy, 85.0, 100.0);
|
||||
SetSkill(SkillName.TasteID, 65.0, 88.0);
|
||||
}
|
||||
|
||||
public class SBFactionBottle : SBInfo
|
||||
public override VendorShoeType ShoeType => Utility.RandomBool() ? VendorShoeType.Shoes : VendorShoeType.Sandals;
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
SBInfos.Add(new SBFactionBottle());
|
||||
}
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 5; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(Bottle), 5, 20, 0xF0E, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo
|
||||
{
|
||||
}
|
||||
AddItem(new Robe(Utility.RandomPinkHue()));
|
||||
}
|
||||
}
|
||||
|
||||
public class SBFactionBottle : SBInfo
|
||||
{
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 5; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(Bottle), 5, 20, 0xF0E, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,78 +1,61 @@
|
|||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionHorseVendor : BaseFactionVendor
|
||||
{
|
||||
public class FactionHorseVendor : BaseFactionVendor
|
||||
public FactionHorseVendor(Town town, Faction faction) : base(town, faction, "the Horse Breeder")
|
||||
{
|
||||
public FactionHorseVendor(Town town, Faction faction) : base(town, faction, "the Horse Breeder")
|
||||
SetSkill(SkillName.AnimalLore, 64.0, 100.0);
|
||||
SetSkill(SkillName.AnimalTaming, 90.0, 100.0);
|
||||
SetSkill(SkillName.Veterinary, 65.0, 88.0);
|
||||
}
|
||||
|
||||
public override VendorShoeType ShoeType => Female ? VendorShoeType.ThighBoots : VendorShoeType.Boots;
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetShoeHue() => 0;
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem(Utility.RandomBool() ? new QuarterStaff() : new ShepherdsCrook());
|
||||
}
|
||||
|
||||
public override void VendorBuy(Mobile from)
|
||||
{
|
||||
if (Faction == null || Faction.Find(from, true) != Faction)
|
||||
{
|
||||
SetSkill(SkillName.AnimalLore, 64.0, 100.0);
|
||||
SetSkill(SkillName.AnimalTaming, 90.0, 100.0);
|
||||
SetSkill(SkillName.Veterinary, 65.0, 88.0);
|
||||
PrivateOverheadMessage(
|
||||
MessageType.Regular,
|
||||
0x3B2,
|
||||
1042201, // You are not in my faction, I cannot sell you a horse!
|
||||
from.NetState
|
||||
);
|
||||
}
|
||||
|
||||
public FactionHorseVendor(Serial serial) : base(serial)
|
||||
else if (FactionGump.Exists(from))
|
||||
{
|
||||
from.SendLocalizedMessage(1042160); // You already have a faction menu open.
|
||||
}
|
||||
|
||||
public override VendorShoeType ShoeType => Female ? VendorShoeType.ThighBoots : VendorShoeType.Boots;
|
||||
|
||||
public override void InitSBInfo()
|
||||
else if (from is PlayerMobile mobile)
|
||||
{
|
||||
}
|
||||
|
||||
public override int GetShoeHue() => 0;
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem(Utility.RandomBool() ? new QuarterStaff() : new ShepherdsCrook());
|
||||
}
|
||||
|
||||
public override void VendorBuy(Mobile from)
|
||||
{
|
||||
if (Faction == null || Faction.Find(from, true) != Faction)
|
||||
{
|
||||
PrivateOverheadMessage(
|
||||
MessageType.Regular,
|
||||
0x3B2,
|
||||
1042201, // You are not in my faction, I cannot sell you a horse!
|
||||
from.NetState
|
||||
);
|
||||
}
|
||||
else if (FactionGump.Exists(from))
|
||||
{
|
||||
from.SendLocalizedMessage(1042160); // You already have a faction menu open.
|
||||
}
|
||||
else if (from is PlayerMobile mobile)
|
||||
{
|
||||
mobile.SendGump(new HorseBreederGump(mobile, Faction));
|
||||
}
|
||||
}
|
||||
|
||||
public override void VendorSell(Mobile from)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnBuyItems(Mobile buyer, List<BuyItemResponse> list) => false;
|
||||
|
||||
public override bool OnSellItems(Mobile seller, List<SellItemResponse> list) => false;
|
||||
|
||||
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();
|
||||
mobile.SendGump(new HorseBreederGump(mobile, Faction));
|
||||
}
|
||||
}
|
||||
|
||||
public override void VendorSell(Mobile from)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool OnBuyItems(Mobile buyer, List<BuyItemResponse> list) => false;
|
||||
|
||||
public override bool OnSellItems(Mobile seller, List<SellItemResponse> list) => false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,70 +1,51 @@
|
|||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionOreVendor : BaseFactionVendor
|
||||
{
|
||||
public class FactionOreVendor : BaseFactionVendor
|
||||
public FactionOreVendor(Town town, Faction faction) : base(town, faction, "the Ore Man")
|
||||
{
|
||||
public FactionOreVendor(Town town, Faction faction) : base(town, faction, "the Ore Man")
|
||||
{
|
||||
// NOTE: Skills verified
|
||||
SetSkill(SkillName.Carpentry, 85.0, 100.0);
|
||||
SetSkill(SkillName.Lumberjacking, 60.0, 83.0);
|
||||
}
|
||||
|
||||
public FactionOreVendor(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add(new SBFactionOre());
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem(new HalfApron());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
// NOTE: Skills verified
|
||||
SetSkill(SkillName.Carpentry, 85.0, 100.0);
|
||||
SetSkill(SkillName.Lumberjacking, 60.0, 83.0);
|
||||
}
|
||||
|
||||
public class SBFactionOre : SBInfo
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
private static readonly object[] m_FixedSizeArgs = { true };
|
||||
SBInfos.Add(new SBFactionOre());
|
||||
}
|
||||
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 5; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(IronOre), 16, 20, 0x19B8, 0, m_FixedSizeArgs));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo
|
||||
{
|
||||
}
|
||||
AddItem(new HalfApron());
|
||||
}
|
||||
}
|
||||
|
||||
public class SBFactionOre : SBInfo
|
||||
{
|
||||
private static readonly object[] m_FixedSizeArgs = { true };
|
||||
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 5; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(IronOre), 16, 20, 0x19B8, 0, m_FixedSizeArgs));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,81 +1,62 @@
|
|||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Factions
|
||||
namespace Server.Factions;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class FactionReagentVendor : BaseFactionVendor
|
||||
{
|
||||
public class FactionReagentVendor : BaseFactionVendor
|
||||
public FactionReagentVendor(Town town, Faction faction) : base(town, faction, "the Reagent Man")
|
||||
{
|
||||
public FactionReagentVendor(Town town, Faction faction) : base(town, faction, "the Reagent Man")
|
||||
{
|
||||
SetSkill(SkillName.EvalInt, 65.0, 88.0);
|
||||
SetSkill(SkillName.Inscribe, 60.0, 83.0);
|
||||
SetSkill(SkillName.Magery, 64.0, 100.0);
|
||||
SetSkill(SkillName.Meditation, 60.0, 83.0);
|
||||
SetSkill(SkillName.MagicResist, 65.0, 88.0);
|
||||
SetSkill(SkillName.Wrestling, 36.0, 68.0);
|
||||
}
|
||||
|
||||
public FactionReagentVendor(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override VendorShoeType ShoeType => Utility.RandomBool() ? VendorShoeType.Shoes : VendorShoeType.Sandals;
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
SBInfos.Add(new SBFactionReagent());
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
AddItem(new Robe(Utility.RandomBlueHue()));
|
||||
AddItem(new GnarledStaff());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
SetSkill(SkillName.EvalInt, 65.0, 88.0);
|
||||
SetSkill(SkillName.Inscribe, 60.0, 83.0);
|
||||
SetSkill(SkillName.Magery, 64.0, 100.0);
|
||||
SetSkill(SkillName.Meditation, 60.0, 83.0);
|
||||
SetSkill(SkillName.MagicResist, 65.0, 88.0);
|
||||
SetSkill(SkillName.Wrestling, 36.0, 68.0);
|
||||
}
|
||||
|
||||
public class SBFactionReagent : SBInfo
|
||||
public override VendorShoeType ShoeType => Utility.RandomBool() ? VendorShoeType.Shoes : VendorShoeType.Sandals;
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
SBInfos.Add(new SBFactionReagent());
|
||||
}
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
public override void InitOutfit()
|
||||
{
|
||||
base.InitOutfit();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 2; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(BlackPearl), 5, 20, 0xF7A, 0));
|
||||
Add(new GenericBuyInfo(typeof(Bloodmoss), 5, 20, 0xF7B, 0));
|
||||
Add(new GenericBuyInfo(typeof(MandrakeRoot), 3, 20, 0xF86, 0));
|
||||
Add(new GenericBuyInfo(typeof(Garlic), 3, 20, 0xF84, 0));
|
||||
Add(new GenericBuyInfo(typeof(Ginseng), 3, 20, 0xF85, 0));
|
||||
Add(new GenericBuyInfo(typeof(Nightshade), 3, 20, 0xF88, 0));
|
||||
Add(new GenericBuyInfo(typeof(SpidersSilk), 3, 20, 0xF8D, 0));
|
||||
Add(new GenericBuyInfo(typeof(SulfurousAsh), 3, 20, 0xF8C, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo
|
||||
{
|
||||
}
|
||||
AddItem(new Robe(Utility.RandomBlueHue()));
|
||||
AddItem(new GnarledStaff());
|
||||
}
|
||||
}
|
||||
|
||||
public class SBFactionReagent : SBInfo
|
||||
{
|
||||
public override IShopSellInfo SellInfo { get; } = new InternalSellInfo();
|
||||
|
||||
public override List<GenericBuyInfo> BuyInfo { get; } = new InternalBuyInfo();
|
||||
|
||||
public class InternalBuyInfo : List<GenericBuyInfo>
|
||||
{
|
||||
public InternalBuyInfo()
|
||||
{
|
||||
for (var i = 0; i < 2; ++i)
|
||||
{
|
||||
Add(new GenericBuyInfo(typeof(BlackPearl), 5, 20, 0xF7A, 0));
|
||||
Add(new GenericBuyInfo(typeof(Bloodmoss), 5, 20, 0xF7B, 0));
|
||||
Add(new GenericBuyInfo(typeof(MandrakeRoot), 3, 20, 0xF86, 0));
|
||||
Add(new GenericBuyInfo(typeof(Garlic), 3, 20, 0xF84, 0));
|
||||
Add(new GenericBuyInfo(typeof(Ginseng), 3, 20, 0xF85, 0));
|
||||
Add(new GenericBuyInfo(typeof(Nightshade), 3, 20, 0xF88, 0));
|
||||
Add(new GenericBuyInfo(typeof(SpidersSilk), 3, 20, 0xF8D, 0));
|
||||
Add(new GenericBuyInfo(typeof(SulfurousAsh), 3, 20, 0xF8C, 0));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class InternalSellInfo : GenericSellInfo;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,268 +1,196 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class AGhostOfCovetous : MLQuest
|
||||
{
|
||||
public class AGhostOfCovetous : MLQuest
|
||||
public AGhostOfCovetous()
|
||||
{
|
||||
public AGhostOfCovetous()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075287; // A Ghost of Covetous
|
||||
// What? Oh, you startled me! Sorry, I'm a little jumpy.
|
||||
// My master Griswolt learned that a ghost has recently taken up residence in the Covetous dungeon.
|
||||
// He sent me to capture it, but I . . . well, it terrified me, to be perfectly honest.
|
||||
// If you think yourself courageous enough, I'll give you my Spirit Bottle, and you can try to capture it yourself.
|
||||
// I'm certain my master would reward you richly for such service.
|
||||
Description = 1075286;
|
||||
// That's okay, I'm sure someone with more courage than either of us will come along eventually.
|
||||
RefusalMessage = 1075288;
|
||||
InProgressMessage = 1075290; // You'll find that ghost in the mountain pass above the Covetous dungeon.
|
||||
// (As you try to use the Spirit Bottle, the ghost snatches it out of your hand and smashes it on the rocks)
|
||||
// Please, don't be frightened. I need your help!
|
||||
CompletionMessage = 1075291;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
Activated = true;
|
||||
Title = 1075287; // A Ghost of Covetous
|
||||
// What? Oh, you startled me! Sorry, I'm a little jumpy.
|
||||
// My master Griswolt learned that a ghost has recently taken up residence in the Covetous dungeon.
|
||||
// He sent me to capture it, but I . . . well, it terrified me, to be perfectly honest.
|
||||
// If you think yourself courageous enough, I'll give you my Spirit Bottle, and you can try to capture it yourself.
|
||||
// I'm certain my master would reward you richly for such service.
|
||||
Description = 1075286;
|
||||
// That's okay, I'm sure someone with more courage than either of us will come along eventually.
|
||||
RefusalMessage = 1075288;
|
||||
InProgressMessage = 1075290; // You'll find that ghost in the mountain pass above the Covetous dungeon.
|
||||
// (As you try to use the Spirit Bottle, the ghost snatches it out of your hand and smashes it on the rocks)
|
||||
// Please, don't be frightened. I need your help!
|
||||
CompletionMessage = 1075291;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(SpiritBottle), 1, "Spirit Bottle", typeof(Frederic)));
|
||||
Objectives.Add(new DeliverObjective(typeof(SpiritBottle), 1, "Spirit Bottle", typeof(Frederic)));
|
||||
|
||||
// Return the filled Spirit Bottle to Griswolt the Master Necromancer to receive a reward.
|
||||
Rewards.Add(new DummyReward(1075284));
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(SaveHisDad);
|
||||
// Return the filled Spirit Bottle to Griswolt the Master Necromancer to receive a reward.
|
||||
Rewards.Add(new DummyReward(1075284));
|
||||
}
|
||||
|
||||
public class SaveHisDad : MLQuest
|
||||
{
|
||||
public SaveHisDad()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075337; // Save His Dad
|
||||
Description =
|
||||
1075338; // My father, Andros, is a smith in Minoc. Last week his forge overturned and he was splashed by molten steel. He was horribly burned, and we feared he would die. An alchemist in Vesper promised to make a bandage that could heal him, but he needed the silk of a dread spider. I came here to get some, but I was careless, and succumbed to their poison. Please, won't you help my father?
|
||||
RefusalMessage = 1075340; // Oh . . . that's your decision . . . OooOoooOOoo . . .
|
||||
InProgressMessage =
|
||||
1075341; // Thank you! Deliver it to Leon the Alchemist in Vesper. The silk crumbles easily, and much time has already passed since I died. Please! Hurry!
|
||||
CompletionMessage =
|
||||
1075342; // How may I help thee? You have the silk of a dread spider? Of course I can make you a bandage, but what happened to Frederic?
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new TimedDeliverObjective(
|
||||
TimeSpan.FromSeconds(600),
|
||||
typeof(DreadSpiderSilk),
|
||||
1,
|
||||
"Dread Spider Silk",
|
||||
typeof(Leon)
|
||||
)
|
||||
);
|
||||
|
||||
// Hurry! You must get the silk to Leon the Alchemist quickly, or it will crumble and become useless!
|
||||
Rewards.Add(new DummyReward(1075339));
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(AFathersGratitude);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class AFathersGratitude : MLQuest
|
||||
{
|
||||
public AFathersGratitude()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075343; // A Father's Gratitude
|
||||
Description =
|
||||
1075344; // That is simply terrible. First Andros, and now his son. Well, let's make sure Frederic's sacrifice wasn't in vain. Will you take the bandages to his father? You can probably deliver them faster than I can, can't you?
|
||||
RefusalMessage =
|
||||
1075346; // Well I'm sorry to hear you say that. Without your help, I don't know if I can get these to Andros quickly enough to help him.
|
||||
InProgressMessage =
|
||||
1075347; // I don't know how much longer Andros will survive. You'd better get this to him as quick as you can. Every second counts!
|
||||
CompletionMessage =
|
||||
1075348; // Sorry, I'm not accepting commissions at the moment. What? You have the bandage I need from Leon? Thank you so much! But why didn't my son bring this to me himself? . . . Oh, no! You can't be serious! *sag* My Freddie, my son! Thank you for carrying out his last wish. Here -- I made this for my son, to give to him when he became a journeyman. I want you to have it.
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(AlchemistsBandage), 1, "Alchemist's Bandage", typeof(Andros)));
|
||||
|
||||
Rewards.Add(new ItemReward(1075345, typeof(AndrosGratitude))); // Andros' Gratitude
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class Ben : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Ben() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Apprentice Necromancer";
|
||||
Body = 0x190;
|
||||
Hue = 0x83FD;
|
||||
HairItemID = 0x2048;
|
||||
HairHue = 0x463;
|
||||
FacialHairItemID = 0x204C;
|
||||
FacialHairHue = 0x463;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(0x901));
|
||||
AddItem(new LongPants(0x1BB));
|
||||
AddItem(new FancyShirt(0x756));
|
||||
}
|
||||
|
||||
public Ben(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Ben";
|
||||
|
||||
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("The Ghost of Frederic Smithson")]
|
||||
public class Frederic : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Frederic() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Body = 0x1A;
|
||||
Hue = 0x455;
|
||||
Frozen = true;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
}
|
||||
|
||||
public Frederic(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "The Ghost of Frederic Smithson";
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Leon : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Leon() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Alchemist";
|
||||
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 Shoes(0x901));
|
||||
AddItem(new Robe(0x657));
|
||||
}
|
||||
|
||||
public Leon(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Leon";
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Andros : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Andros() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Blacksmith";
|
||||
Body = 0x190;
|
||||
Hue = 0x8409;
|
||||
FacialHairItemID = 0x2041;
|
||||
FacialHairHue = 0x45E;
|
||||
HairItemID = 0x2049;
|
||||
HairHue = 0x45E;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Boots(0x901));
|
||||
AddItem(new FancyShirt(0x60B));
|
||||
AddItem(new LongPants(0x1BB));
|
||||
AddItem(new FullApron(0x901));
|
||||
AddItem(new SmithHammer());
|
||||
}
|
||||
|
||||
public Andros(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Andros";
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
public override Type NextQuest => typeof(SaveHisDad);
|
||||
}
|
||||
|
||||
public class SaveHisDad : MLQuest
|
||||
{
|
||||
public SaveHisDad()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075337; // Save His Dad
|
||||
Description =
|
||||
1075338; // My father, Andros, is a smith in Minoc. Last week his forge overturned and he was splashed by molten steel. He was horribly burned, and we feared he would die. An alchemist in Vesper promised to make a bandage that could heal him, but he needed the silk of a dread spider. I came here to get some, but I was careless, and succumbed to their poison. Please, won't you help my father?
|
||||
RefusalMessage = 1075340; // Oh . . . that's your decision . . . OooOoooOOoo . . .
|
||||
InProgressMessage =
|
||||
1075341; // Thank you! Deliver it to Leon the Alchemist in Vesper. The silk crumbles easily, and much time has already passed since I died. Please! Hurry!
|
||||
CompletionMessage =
|
||||
1075342; // How may I help thee? You have the silk of a dread spider? Of course I can make you a bandage, but what happened to Frederic?
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new TimedDeliverObjective(
|
||||
TimeSpan.FromSeconds(600),
|
||||
typeof(DreadSpiderSilk),
|
||||
1,
|
||||
"Dread Spider Silk",
|
||||
typeof(Leon)
|
||||
)
|
||||
);
|
||||
|
||||
// Hurry! You must get the silk to Leon the Alchemist quickly, or it will crumble and become useless!
|
||||
Rewards.Add(new DummyReward(1075339));
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(AFathersGratitude);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class AFathersGratitude : MLQuest
|
||||
{
|
||||
public AFathersGratitude()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075343; // A Father's Gratitude
|
||||
Description =
|
||||
1075344; // That is simply terrible. First Andros, and now his son. Well, let's make sure Frederic's sacrifice wasn't in vain. Will you take the bandages to his father? You can probably deliver them faster than I can, can't you?
|
||||
RefusalMessage =
|
||||
1075346; // Well I'm sorry to hear you say that. Without your help, I don't know if I can get these to Andros quickly enough to help him.
|
||||
InProgressMessage =
|
||||
1075347; // I don't know how much longer Andros will survive. You'd better get this to him as quick as you can. Every second counts!
|
||||
CompletionMessage =
|
||||
1075348; // Sorry, I'm not accepting commissions at the moment. What? You have the bandage I need from Leon? Thank you so much! But why didn't my son bring this to me himself? . . . Oh, no! You can't be serious! *sag* My Freddie, my son! Thank you for carrying out his last wish. Here -- I made this for my son, to give to him when he became a journeyman. I want you to have it.
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(AlchemistsBandage), 1, "Alchemist's Bandage", typeof(Andros)));
|
||||
|
||||
Rewards.Add(new ItemReward(1075345, typeof(AndrosGratitude))); // Andros' Gratitude
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Ben : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Ben() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Apprentice Necromancer";
|
||||
Body = 0x190;
|
||||
Hue = 0x83FD;
|
||||
HairItemID = 0x2048;
|
||||
HairHue = 0x463;
|
||||
FacialHairItemID = 0x204C;
|
||||
FacialHairHue = 0x463;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(0x901));
|
||||
AddItem(new LongPants(0x1BB));
|
||||
AddItem(new FancyShirt(0x756));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Ben";
|
||||
}
|
||||
|
||||
[QuesterName("The Ghost of Frederic Smithson")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Frederic : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Frederic() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Body = 0x1A;
|
||||
Hue = 0x455;
|
||||
Frozen = true;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "The Ghost of Frederic Smithson";
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Leon : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Leon() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Alchemist";
|
||||
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 Shoes(0x901));
|
||||
AddItem(new Robe(0x657));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Leon";
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Andros : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Andros() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Blacksmith";
|
||||
Body = 0x190;
|
||||
Hue = 0x8409;
|
||||
FacialHairItemID = 0x2041;
|
||||
FacialHairHue = 0x45E;
|
||||
HairItemID = 0x2049;
|
||||
HairHue = 0x45E;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Boots(0x901));
|
||||
AddItem(new FancyShirt(0x60B));
|
||||
AddItem(new LongPants(0x1BB));
|
||||
AddItem(new FullApron(0x901));
|
||||
AddItem(new SmithHammer());
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Andros";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,210 +1,156 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class Momento : MLQuest
|
||||
{
|
||||
public class Momento : MLQuest
|
||||
public Momento()
|
||||
{
|
||||
public Momento()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074750; // Momento!
|
||||
Description =
|
||||
1074751; // I was going to march right out there and get it myself, but no ... Master Gnosos won't let me. But you see, that bridle means so much to me. A momento of happier, less-dead ... well undead horseback riding. Could you fetch it for me? I think my horse, formerly known as 'Resolve', may still be wearing it.
|
||||
RefusalMessage = 1074752; // Hrmph.
|
||||
InProgressMessage =
|
||||
1074753; // The bridle would be hard to miss on him now ... since he's skeletal. Please do what you need to do to retrieve it for me.
|
||||
CompletionMessage = 1074754; // I'd know that jingling sound anywhere! You have recovered my bridle. Thank you.
|
||||
Activated = true;
|
||||
Title = 1074750; // Momento!
|
||||
Description =
|
||||
1074751; // I was going to march right out there and get it myself, but no ... Master Gnosos won't let me. But you see, that bridle means so much to me. A momento of happier, less-dead ... well undead horseback riding. Could you fetch it for me? I think my horse, formerly known as 'Resolve', may still be wearing it.
|
||||
RefusalMessage = 1074752; // Hrmph.
|
||||
InProgressMessage =
|
||||
1074753; // The bridle would be hard to miss on him now ... since he's skeletal. Please do what you need to do to retrieve it for me.
|
||||
CompletionMessage = 1074754; // I'd know that jingling sound anywhere! You have recovered my bridle. Thank you.
|
||||
|
||||
Objectives.Add(new CollectObjective(1, typeof(ResolvesBridle), "Resolve's Bridle"));
|
||||
Objectives.Add(new CollectObjective(1, typeof(ResolvesBridle), "Resolve's Bridle"));
|
||||
|
||||
Rewards.Add(ItemReward.LargeBagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
public class CulinaryCrisis : MLQuest
|
||||
{
|
||||
public CulinaryCrisis()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074755; // Culinary Crisis
|
||||
Description =
|
||||
1074756; // You have NO idea how impossible this is. Simply intolerable! How can one expect an artiste' like me to create masterpieces of culinary delight without the best, fresh ingredients? Ever since this whositwhatsit started this uproar, my thrice-daily produce deliveries have ended. I can't survive another hour without produce!
|
||||
RefusalMessage = 1074757; // You have no artistry in your soul.
|
||||
InProgressMessage = 1074758; // I must have fresh produce and cheese at once!
|
||||
CompletionMessage =
|
||||
1074759; // Those dates look bruised! Oh no, and you fetched a soft cheese. *deep pained sigh* Well, even I can only do so much with inferior ingredients. BAM!
|
||||
|
||||
Objectives.Add(new CollectObjective(20, typeof(Dates), 1025927)); // bunch of dates
|
||||
Objectives.Add(new CollectObjective(5, typeof(CheeseWheel), 1022430)); // wheel of cheese
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
public class GoneNative : MLQuest
|
||||
{
|
||||
public GoneNative()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074855; // Gone Native
|
||||
Description =
|
||||
1074856; // Pathetic really. I must say, a senior instructor going native -- forgetting about his students and peers and engaging in such disgraceful behavior! I'm speaking, of course, of Theophilus. Master Theophilus to you. He may have gone native but he still holds a Mastery Degree from Bedlam College! But, well, that's neither here nor there. I need you to take care of my colleague. Convince him of the error of his ways. He may resist. In fact, assume he will and kill him. We'll get him resurrected and be ready to cure his folly. What do you say?
|
||||
RefusalMessage =
|
||||
1074857; // I understand. A Master of Bedlam, even one entirely off his rocker, is too much for you to handle.
|
||||
InProgressMessage =
|
||||
1074858; // You had better get going. Master Theophilus isn't likely to kill himself just to save me this embarrassment.
|
||||
CompletionMessage =
|
||||
1074859; // You look a bit worse for wear! He put up a good fight did he? Hah! That's the spirit … a Master of Bedlam is a match for most.
|
||||
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(MasterTheophilus) }, "Master Theophilus"));
|
||||
|
||||
Rewards.Add(ItemReward.LargeBagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
[QuesterName("Kia (Bedlam)")]
|
||||
public class Kia : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Kia() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the student";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Sandals(0x709));
|
||||
AddItem(new Robe(0x497));
|
||||
}
|
||||
|
||||
public Kia(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Kia";
|
||||
|
||||
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("Emerillo (Bedlam)")]
|
||||
public class Emerillo : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Emerillo() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the cook";
|
||||
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 Sandals(Utility.RandomNeutralHue()));
|
||||
AddItem(new ShortPants(Utility.RandomPinkHue()));
|
||||
AddItem(new Shirt());
|
||||
AddItem(new HalfApron(0x8FD));
|
||||
}
|
||||
|
||||
public Emerillo(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Emerillo";
|
||||
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074222); // Could I trouble you for some assistance?
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Nythalia : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Nythalia() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the student";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(Utility.RandomNeutralHue()));
|
||||
AddItem(new Robe(Utility.RandomBool() ? 0x497 : 0x498));
|
||||
}
|
||||
|
||||
public Nythalia(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Mythalia";
|
||||
|
||||
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();
|
||||
}
|
||||
Rewards.Add(ItemReward.LargeBagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
public class CulinaryCrisis : MLQuest
|
||||
{
|
||||
public CulinaryCrisis()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074755; // Culinary Crisis
|
||||
Description =
|
||||
1074756; // You have NO idea how impossible this is. Simply intolerable! How can one expect an artiste' like me to create masterpieces of culinary delight without the best, fresh ingredients? Ever since this whositwhatsit started this uproar, my thrice-daily produce deliveries have ended. I can't survive another hour without produce!
|
||||
RefusalMessage = 1074757; // You have no artistry in your soul.
|
||||
InProgressMessage = 1074758; // I must have fresh produce and cheese at once!
|
||||
CompletionMessage =
|
||||
1074759; // Those dates look bruised! Oh no, and you fetched a soft cheese. *deep pained sigh* Well, even I can only do so much with inferior ingredients. BAM!
|
||||
|
||||
Objectives.Add(new CollectObjective(20, typeof(Dates), 1025927)); // bunch of dates
|
||||
Objectives.Add(new CollectObjective(5, typeof(CheeseWheel), 1022430)); // wheel of cheese
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
public class GoneNative : MLQuest
|
||||
{
|
||||
public GoneNative()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074855; // Gone Native
|
||||
Description =
|
||||
1074856; // Pathetic really. I must say, a senior instructor going native -- forgetting about his students and peers and engaging in such disgraceful behavior! I'm speaking, of course, of Theophilus. Master Theophilus to you. He may have gone native but he still holds a Mastery Degree from Bedlam College! But, well, that's neither here nor there. I need you to take care of my colleague. Convince him of the error of his ways. He may resist. In fact, assume he will and kill him. We'll get him resurrected and be ready to cure his folly. What do you say?
|
||||
RefusalMessage =
|
||||
1074857; // I understand. A Master of Bedlam, even one entirely off his rocker, is too much for you to handle.
|
||||
InProgressMessage =
|
||||
1074858; // You had better get going. Master Theophilus isn't likely to kill himself just to save me this embarrassment.
|
||||
CompletionMessage =
|
||||
1074859; // You look a bit worse for wear! He put up a good fight did he? Hah! That's the spirit … a Master of Bedlam is a match for most.
|
||||
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(MasterTheophilus) }, "Master Theophilus"));
|
||||
|
||||
Rewards.Add(ItemReward.LargeBagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
[QuesterName("Kia (Bedlam)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Kia : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Kia() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the student";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Sandals(0x709));
|
||||
AddItem(new Robe(0x497));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Kia";
|
||||
}
|
||||
|
||||
[QuesterName("Emerillo (Bedlam)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Emerillo : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Emerillo() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the cook";
|
||||
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 Sandals(Utility.RandomNeutralHue()));
|
||||
AddItem(new ShortPants(Utility.RandomPinkHue()));
|
||||
AddItem(new Shirt());
|
||||
AddItem(new HalfApron(0x8FD));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Emerillo";
|
||||
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074222); // Could I trouble you for some assistance?
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Nythalia : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Nythalia() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the student";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(Utility.RandomNeutralHue()));
|
||||
AddItem(new Robe(Utility.RandomBool() ? 0x497 : 0x498));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Mythalia";
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -1,143 +1,107 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class HonestBeggar : MLQuest
|
||||
{
|
||||
public class HonestBeggar : MLQuest
|
||||
public HonestBeggar()
|
||||
{
|
||||
public HonestBeggar()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075392; // Honest Beggar
|
||||
// Beg pardon, sir. I mean, madam. Uh, can I ask a favor of you? I found this jeweled ring. Most people would sell it and keep the money, but not me. I ain't never stole nothing, and I ain't about to start. I tried to take it over to Brit castle, figgerin' it must belong to some highborn lady, but the guards threw me out. You look like they might let you pass. Will you take the ring over there and see if you can find the owner?
|
||||
Activated = true;
|
||||
Title = 1075392; // Honest Beggar
|
||||
// Beg pardon, sir. I mean, madam. Uh, can I ask a favor of you? I found this jeweled ring. Most people would sell it and keep the money, but not me. I ain't never stole nothing, and I ain't about to start. I tried to take it over to Brit castle, figgerin' it must belong to some highborn lady, but the guards threw me out. You look like they might let you pass. Will you take the ring over there and see if you can find the owner?
|
||||
|
||||
Description = 1075393;
|
||||
RefusalMessage = 1075395; // I see. Too good to help an honest beggar like me, eh?
|
||||
// A jewel like this must be worth a lot, so it must belong to some noble or another. I would show it around the castle. Someone's bound to recognize it.
|
||||
InProgressMessage = 1075396;
|
||||
// Didst thou find my ring? I thank thee very much! It is an old ring, and a gift from my husband. I was most distraught when I realized it was missing.
|
||||
CompletionMessage = 1075397;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
Description = 1075393;
|
||||
RefusalMessage = 1075395; // I see. Too good to help an honest beggar like me, eh?
|
||||
// A jewel like this must be worth a lot, so it must belong to some noble or another. I would show it around the castle. Someone's bound to recognize it.
|
||||
InProgressMessage = 1075396;
|
||||
// Didst thou find my ring? I thank thee very much! It is an old ring, and a gift from my husband. I was most distraught when I realized it was missing.
|
||||
CompletionMessage = 1075397;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(ReginasRing), 1, "Regina's Ring", typeof(Regina)));
|
||||
Objectives.Add(new DeliverObjective(typeof(ReginasRing), 1, "Regina's Ring", typeof(Regina)));
|
||||
|
||||
Rewards.Add(new DummyReward(1075394)); // Find the ring's owner.
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(ReginasThanks);
|
||||
Rewards.Add(new DummyReward(1075394)); // Find the ring's owner.
|
||||
}
|
||||
|
||||
public class ReginasThanks : MLQuest
|
||||
{
|
||||
public ReginasThanks()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075398; // Regina's Thanks
|
||||
Description =
|
||||
1075399; // What's that you say? It was a humble beggar that found my ring? Such honesty must be rewarded. Here, take this packet and return it to him, and I will be in your debt.
|
||||
RefusalMessage = 1075401; // Hmph. Very well. What did you say his name was?
|
||||
InProgressMessage = 1075402; // Take the packet and return it to the beggar who found my ring.
|
||||
CompletionMessage =
|
||||
1075403; // What? For me? Let me see . . . these sapphire earrings are for you, it says. Oh, she wants to offer me a job! This is the most wonderful thing that ever happened to me!
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(ReginasLetter), 1, "Regina's Letter", typeof(Evan)));
|
||||
|
||||
Rewards.Add(new ItemReward(1075400, typeof(TransparentHeart))); // Transparent Heart
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class Evan : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Evan() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Beggar";
|
||||
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 Doublet());
|
||||
AddItem(new ShortPants(0x755));
|
||||
}
|
||||
|
||||
public Evan(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Evan";
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Regina : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Regina() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Noble";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new GildedDress());
|
||||
AddItem(new Boots());
|
||||
}
|
||||
|
||||
public Regina(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Regina";
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
public override Type NextQuest => typeof(ReginasThanks);
|
||||
}
|
||||
|
||||
public class ReginasThanks : MLQuest
|
||||
{
|
||||
public ReginasThanks()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075398; // Regina's Thanks
|
||||
Description =
|
||||
1075399; // What's that you say? It was a humble beggar that found my ring? Such honesty must be rewarded. Here, take this packet and return it to him, and I will be in your debt.
|
||||
RefusalMessage = 1075401; // Hmph. Very well. What did you say his name was?
|
||||
InProgressMessage = 1075402; // Take the packet and return it to the beggar who found my ring.
|
||||
CompletionMessage =
|
||||
1075403; // What? For me? Let me see . . . these sapphire earrings are for you, it says. Oh, she wants to offer me a job! This is the most wonderful thing that ever happened to me!
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(ReginasLetter), 1, "Regina's Letter", typeof(Evan)));
|
||||
|
||||
Rewards.Add(new ItemReward(1075400, typeof(TransparentHeart))); // Transparent Heart
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Evan : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Evan() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Beggar";
|
||||
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 Doublet());
|
||||
AddItem(new ShortPants(0x755));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Evan";
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Regina : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Regina() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Noble";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new GildedDress());
|
||||
AddItem(new Boots());
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Regina";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,328 +1,274 @@
|
|||
using Server.Engines.MLQuests.Objectives;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class Responsibility : BaseEscort
|
||||
{
|
||||
public class Responsibility : BaseEscort
|
||||
public Responsibility()
|
||||
{
|
||||
public Responsibility()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074352; // Responsibility
|
||||
Description =
|
||||
1074524; // Oh! I just don't know what to do. My mother is away and my father told me not to talk to strangers ... *worried frown* But my grandfather has sent word that he has been hurt and needs me to tend his wounds. He has a small farm southeast of here. Would you ... could you ... escort me there safely?
|
||||
RefusalMessage = 1074525; // I hope my grandfather will be alright.
|
||||
InProgressMessage =
|
||||
1074526; // Grandfather's farm is a ways west of the Shrine of Spirituality. So, we're not quite there yet. Thank you again for keeping me safe.
|
||||
Activated = true;
|
||||
Title = 1074352; // Responsibility
|
||||
Description =
|
||||
1074524; // Oh! I just don't know what to do. My mother is away and my father told me not to talk to strangers ... *worried frown* But my grandfather has sent word that he has been hurt and needs me to tend his wounds. He has a small farm southeast of here. Would you ... could you ... escort me there safely?
|
||||
RefusalMessage = 1074525; // I hope my grandfather will be alright.
|
||||
InProgressMessage =
|
||||
1074526; // Grandfather's farm is a ways west of the Shrine of Spirituality. So, we're not quite there yet. Thank you again for keeping me safe.
|
||||
|
||||
Objectives.Add(new EscortObjective(new QuestArea(1074781, "Sheep Farm"))); // Sheep Farm
|
||||
Objectives.Add(new EscortObjective(new QuestArea(1074781, "Sheep Farm"))); // Sheep Farm
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
|
||||
// OSI sends this instead, but it doesn't make sense for an escortable
|
||||
// public override void OnComplete( MLQuestInstance instance )
|
||||
// {
|
||||
// instance.Player.SendLocalizedMessage( 1073775, "", 0x23 ); // Your quest is complete. Return for your reward.
|
||||
// }
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
|
||||
public class SomethingToWailAbout : MLQuest
|
||||
// OSI sends this instead, but it doesn't make sense for an escortable
|
||||
// public override void OnComplete( MLQuestInstance instance )
|
||||
// {
|
||||
// instance.Player.SendLocalizedMessage( 1073775, "", 0x23 ); // Your quest is complete. Return for your reward.
|
||||
// }
|
||||
}
|
||||
|
||||
public class SomethingToWailAbout : MLQuest
|
||||
{
|
||||
public SomethingToWailAbout()
|
||||
{
|
||||
public SomethingToWailAbout()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1073071; // Something to Wail About
|
||||
Description =
|
||||
1073561; // Can you hear them? The never-ending howling? The incessant wailing? These banshees, they never cease! Never! They haunt my nights. Please, I beg you -- will you silence them? I would be ever so grateful.
|
||||
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
|
||||
InProgressMessage = 1073581; // Until you kill 12 Wailing Banshees, there will be no peace.
|
||||
Activated = true;
|
||||
Title = 1073071; // Something to Wail About
|
||||
Description =
|
||||
1073561; // Can you hear them? The never-ending howling? The incessant wailing? These banshees, they never cease! Never! They haunt my nights. Please, I beg you -- will you silence them? I would be ever so grateful.
|
||||
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
|
||||
InProgressMessage = 1073581; // Until you kill 12 Wailing Banshees, there will be no peace.
|
||||
|
||||
Objectives.Add(new KillObjective(12, new[] { typeof(WailingBanshee) }, "wailing banshees"));
|
||||
Objectives.Add(new KillObjective(12, new[] { typeof(WailingBanshee) }, "wailing banshees"));
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
public class Runaways : MLQuest
|
||||
{
|
||||
public Runaways()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072993; // Runaways!
|
||||
Description =
|
||||
1073026; // You've got to help me out! Those wild ostards have been causing absolute havok around here. Kill them off before they destroy my land. There are around twelve of them.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
|
||||
Objectives.Add(new KillObjective(12, new[] { typeof(FrenziedOstard) }, "frenzied ostards"));
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
}
|
||||
|
||||
public class ViciousPredator : MLQuest
|
||||
{
|
||||
public ViciousPredator()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072994; // Vicious Predator
|
||||
Description =
|
||||
1073028; // You've got to help me out! Those dire wolves have been causing absolute havok around here. Kill them off before they destroy my land. They run around in a pack of around ten.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
|
||||
Objectives.Add(new KillObjective(10, new[] { typeof(DireWolf) }, "dire wolves"));
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
}
|
||||
|
||||
public class GuileIrkAndSpite : MLQuest
|
||||
{
|
||||
public GuileIrkAndSpite()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074739; // Guile, Irk and Spite
|
||||
Description =
|
||||
1074740; // You know them, don't you. The three? They look like you, you'll see. They looked like me, I remember, they looked like, well, you'll see. The three. They'll drive you mad too, if you let them. They are trouble, and they need to be slain. Seek them out.
|
||||
RefusalMessage =
|
||||
1074745; // You just don't understand the gravity of the situation. If you did, you'd agree to my task.
|
||||
InProgressMessage =
|
||||
1074746; // Perhaps I was unclear. You'll know them when you see them, because you'll see you, and you, and you. Hurry now.
|
||||
CompletionMessage =
|
||||
1074747; // Are you one of THEM? Ahhhh! Oh, wait, if you were them, then you'd be me. So you're -- you. Good job!
|
||||
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(Guile) }, "Guile"));
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(Irk) }, "Irk"));
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(Spite) }, "Spite"));
|
||||
|
||||
Rewards.Add(ItemReward.Strongbox);
|
||||
}
|
||||
}
|
||||
|
||||
public class Lissbet : BaseEscortable
|
||||
{
|
||||
[Constructible]
|
||||
public Lissbet()
|
||||
{
|
||||
}
|
||||
|
||||
public Lissbet(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool StaticMLQuester => true;
|
||||
public override bool InitialInnocent => true;
|
||||
public override string DefaultName => "Lissbet";
|
||||
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(
|
||||
this,
|
||||
pm,
|
||||
Utility.RandomList(
|
||||
1074204, // Greetings seeker. I have an urgent matter for you, if you are willing.
|
||||
1074222 // Could I trouble you for some assistance?
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
SetStr(40, 50);
|
||||
SetDex(70, 80);
|
||||
SetInt(80, 90);
|
||||
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
Female = true;
|
||||
Body = 401;
|
||||
|
||||
Title = "the flower girl";
|
||||
|
||||
HairItemID = 0x203D;
|
||||
HairHue = 0x1BB;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Kilt(Utility.RandomYellowHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomYellowHue()));
|
||||
AddItem(new Sandals());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class GrandpaCharley : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public GrandpaCharley() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the farmer";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
var hairHue = 0x3B2 + Utility.Random(2);
|
||||
Utility.AssignRandomHair(this, hairHue);
|
||||
|
||||
FacialHairItemID = 0x203E; // Long Beard
|
||||
FacialHairHue = hairHue;
|
||||
|
||||
SetSkill(SkillName.ItemID, 80, 90);
|
||||
|
||||
AddItem(new WideBrimHat(Utility.RandomNondyedHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomNondyedHue()));
|
||||
AddItem(new LongPants(Utility.RandomNondyedHue()));
|
||||
AddItem(new Sandals(Utility.RandomNeutralHue()));
|
||||
AddItem(new ShepherdsCrook());
|
||||
AddItem(new Backpack());
|
||||
}
|
||||
|
||||
public GrandpaCharley(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Grandpa Charley";
|
||||
public override bool CanTeach => true;
|
||||
|
||||
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("Jelrice (Ilshenar)")]
|
||||
public class Jelrice : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Jelrice() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the trader";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Shoes(Utility.RandomNeutralHue()));
|
||||
AddItem(new Skirt(Utility.RandomBlueHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomRedHue()));
|
||||
}
|
||||
|
||||
public Jelrice(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Jelrice";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074221); // Greetings! I have a small task for you good traveler.
|
||||
}
|
||||
|
||||
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("Yorus (Ilshenar)")]
|
||||
public class Yorus : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Yorus() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the tinker";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Shoes(Utility.RandomNeutralHue()));
|
||||
AddItem(new LongPants(Utility.RandomBlueHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomOrangeHue()));
|
||||
AddItem(new Cloak(Utility.RandomBrightHue()));
|
||||
}
|
||||
|
||||
public Yorus(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Yorus";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074218); // Hey! I want to talk to you, now.
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
Rewards.Add(ItemReward.BagOfTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
public class Runaways : MLQuest
|
||||
{
|
||||
public Runaways()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072993; // Runaways!
|
||||
Description =
|
||||
1073026; // You've got to help me out! Those wild ostards have been causing absolute havok around here. Kill them off before they destroy my land. There are around twelve of them.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
|
||||
Objectives.Add(new KillObjective(12, new[] { typeof(FrenziedOstard) }, "frenzied ostards"));
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
}
|
||||
|
||||
public class ViciousPredator : MLQuest
|
||||
{
|
||||
public ViciousPredator()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1072994; // Vicious Predator
|
||||
Description =
|
||||
1073028; // You've got to help me out! Those dire wolves have been causing absolute havok around here. Kill them off before they destroy my land. They run around in a pack of around ten.
|
||||
RefusalMessage = 1072270; // Well, okay. But if you decide you are up for it after all, c'mon back and see me.
|
||||
InProgressMessage = 1072271; // You're not quite done yet. Get back to work!
|
||||
|
||||
Objectives.Add(new KillObjective(10, new[] { typeof(DireWolf) }, "dire wolves"));
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
}
|
||||
|
||||
public class GuileIrkAndSpite : MLQuest
|
||||
{
|
||||
public GuileIrkAndSpite()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074739; // Guile, Irk and Spite
|
||||
Description =
|
||||
1074740; // You know them, don't you. The three? They look like you, you'll see. They looked like me, I remember, they looked like, well, you'll see. The three. They'll drive you mad too, if you let them. They are trouble, and they need to be slain. Seek them out.
|
||||
RefusalMessage =
|
||||
1074745; // You just don't understand the gravity of the situation. If you did, you'd agree to my task.
|
||||
InProgressMessage =
|
||||
1074746; // Perhaps I was unclear. You'll know them when you see them, because you'll see you, and you, and you. Hurry now.
|
||||
CompletionMessage =
|
||||
1074747; // Are you one of THEM? Ahhhh! Oh, wait, if you were them, then you'd be me. So you're -- you. Good job!
|
||||
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(Guile) }, "Guile"));
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(Irk) }, "Irk"));
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(Spite) }, "Spite"));
|
||||
|
||||
Rewards.Add(ItemReward.Strongbox);
|
||||
}
|
||||
}
|
||||
|
||||
public class Lissbet : BaseEscortable
|
||||
{
|
||||
[Constructible]
|
||||
public Lissbet()
|
||||
{
|
||||
}
|
||||
|
||||
public Lissbet(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool StaticMLQuester => true;
|
||||
public override bool InitialInnocent => true;
|
||||
public override string DefaultName => "Lissbet";
|
||||
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(
|
||||
this,
|
||||
pm,
|
||||
Utility.RandomList(
|
||||
1074204, // Greetings seeker. I have an urgent matter for you, if you are willing.
|
||||
1074222 // Could I trouble you for some assistance?
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public override void InitBody()
|
||||
{
|
||||
SetStr(40, 50);
|
||||
SetDex(70, 80);
|
||||
SetInt(80, 90);
|
||||
|
||||
Hue = Race.Human.RandomSkinHue();
|
||||
Female = true;
|
||||
Body = 401;
|
||||
|
||||
Title = "the flower girl";
|
||||
|
||||
HairItemID = 0x203D;
|
||||
HairHue = 0x1BB;
|
||||
}
|
||||
|
||||
public override void InitOutfit()
|
||||
{
|
||||
AddItem(new Kilt(Utility.RandomYellowHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomYellowHue()));
|
||||
AddItem(new Sandals());
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class GrandpaCharley : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public GrandpaCharley() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the farmer";
|
||||
Body = 400;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
var hairHue = 0x3B2 + Utility.Random(2);
|
||||
Utility.AssignRandomHair(this, hairHue);
|
||||
|
||||
FacialHairItemID = 0x203E; // Long Beard
|
||||
FacialHairHue = hairHue;
|
||||
|
||||
SetSkill(SkillName.ItemID, 80, 90);
|
||||
|
||||
AddItem(new WideBrimHat(Utility.RandomNondyedHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomNondyedHue()));
|
||||
AddItem(new LongPants(Utility.RandomNondyedHue()));
|
||||
AddItem(new Sandals(Utility.RandomNeutralHue()));
|
||||
AddItem(new ShepherdsCrook());
|
||||
AddItem(new Backpack());
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Grandpa Charley";
|
||||
public override bool CanTeach => true;
|
||||
}
|
||||
|
||||
[QuesterName("Jelrice (Ilshenar)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Jelrice : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Jelrice() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the trader";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Shoes(Utility.RandomNeutralHue()));
|
||||
AddItem(new Skirt(Utility.RandomBlueHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomRedHue()));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Jelrice";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074221); // Greetings! I have a small task for you good traveler.
|
||||
}
|
||||
}
|
||||
|
||||
[QuesterName("Yorus (Ilshenar)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Yorus : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Yorus() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the tinker";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Shoes(Utility.RandomNeutralHue()));
|
||||
AddItem(new LongPants(Utility.RandomBlueHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomOrangeHue()));
|
||||
AddItem(new Cloak(Utility.RandomBrightHue()));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Yorus";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074218); // Hey! I want to talk to you, now.
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,79 +1,61 @@
|
|||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class PointyEars : MLQuest
|
||||
{
|
||||
public class PointyEars : MLQuest
|
||||
public PointyEars()
|
||||
{
|
||||
public PointyEars()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074640; // Pointy Ears
|
||||
Description =
|
||||
1074641; // I've heard ... there's some that will pay a good bounty for pointed ears, much like we used to pay for each wolf skin. I've got nothing personal against these elves. It's just business. You want in on this? I'm not fussy who I work with.
|
||||
RefusalMessage = 1074642; // Suit yourself.
|
||||
InProgressMessage = 1074643; // I can't pay a bounty if you don't bring bag the ears.
|
||||
CompletionMessage = 1074644; // Here to collect on a bounty?
|
||||
Activated = true;
|
||||
Title = 1074640; // Pointy Ears
|
||||
Description =
|
||||
1074641; // I've heard ... there's some that will pay a good bounty for pointed ears, much like we used to pay for each wolf skin. I've got nothing personal against these elves. It's just business. You want in on this? I'm not fussy who I work with.
|
||||
RefusalMessage = 1074642; // Suit yourself.
|
||||
InProgressMessage = 1074643; // I can't pay a bounty if you don't bring bag the ears.
|
||||
CompletionMessage = 1074644; // Here to collect on a bounty?
|
||||
|
||||
Objectives.Add(new CollectObjective(20, typeof(SeveredElfEars), 1032590)); // severed elf ears
|
||||
Objectives.Add(new CollectObjective(20, typeof(SeveredElfEars), 1032590)); // severed elf ears
|
||||
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
}
|
||||
|
||||
[QuesterName("Drithen (Umbra)")]
|
||||
public class Drithen : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Drithen() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Fierce";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new ElvenBoots(Utility.RandomNeutralHue()));
|
||||
AddItem(new LongPants(Utility.RandomBlueHue()));
|
||||
AddItem(new Tunic(Utility.RandomNeutralHue()));
|
||||
AddItem(new Cloak(Utility.RandomBrightHue()));
|
||||
|
||||
SetSkill(SkillName.Focus, 60.0, 80.0);
|
||||
}
|
||||
|
||||
public Drithen(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override bool CanTeach => true;
|
||||
public override string DefaultName => "Drithen";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074188); // Weakling! You are not up to the task I have.
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
Rewards.Add(ItemReward.BagOfTrinkets);
|
||||
}
|
||||
}
|
||||
|
||||
[QuesterName("Drithen (Umbra)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Drithen : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Drithen() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Fierce";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new ElvenBoots(Utility.RandomNeutralHue()));
|
||||
AddItem(new LongPants(Utility.RandomBlueHue()));
|
||||
AddItem(new Tunic(Utility.RandomNeutralHue()));
|
||||
AddItem(new Cloak(Utility.RandomBrightHue()));
|
||||
|
||||
SetSkill(SkillName.Focus, 60.0, 80.0);
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override bool CanTeach => true;
|
||||
public override string DefaultName => "Drithen";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074188); // Weakling! You are not up to the task I have.
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,358 +1,304 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Items;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class MistakenIdentity : MLQuest
|
||||
{
|
||||
public class MistakenIdentity : MLQuest
|
||||
public MistakenIdentity()
|
||||
{
|
||||
public MistakenIdentity()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074573; // Mistaken Identity
|
||||
Description =
|
||||
1074574; // What do you want? Wonderful, another whining request for a refund on tuition. You know, experiences like that are invaluable ... and infrequent. Having the opportunity to test yourself under such realistic situations isn't something the college offers all students. Fine. Fine. You'll need to submit a refund request form in triplicate before I can return your 1,000,000 gold tuition. You'll need to get some signatures and a few other odds and ends.
|
||||
RefusalMessage = 1074606; // If you're not willing to follow the proper process then go away.
|
||||
InProgressMessage = 1074605; // You're not getting a refund without the proper forms and signatures.
|
||||
CompletionMessage = 1074607; // Oh blast! Not another of those forms. I'm so sick of this endless paperwork.
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
Activated = true;
|
||||
Title = 1074573; // Mistaken Identity
|
||||
Description =
|
||||
1074574; // What do you want? Wonderful, another whining request for a refund on tuition. You know, experiences like that are invaluable ... and infrequent. Having the opportunity to test yourself under such realistic situations isn't something the college offers all students. Fine. Fine. You'll need to submit a refund request form in triplicate before I can return your 1,000,000 gold tuition. You'll need to get some signatures and a few other odds and ends.
|
||||
RefusalMessage = 1074606; // If you're not willing to follow the proper process then go away.
|
||||
InProgressMessage = 1074605; // You're not getting a refund without the proper forms and signatures.
|
||||
CompletionMessage = 1074607; // Oh blast! Not another of those forms. I'm so sick of this endless paperwork.
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(TuitionReimbursementForm),
|
||||
1,
|
||||
"Tuition Reimbursement Form",
|
||||
typeof(Gorrow)
|
||||
)
|
||||
);
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(TuitionReimbursementForm),
|
||||
1,
|
||||
"Tuition Reimbursement Form",
|
||||
typeof(Gorrow)
|
||||
)
|
||||
);
|
||||
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(YouScratchMyBack);
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public class YouScratchMyBack : MLQuest
|
||||
public override Type NextQuest => typeof(YouScratchMyBack);
|
||||
}
|
||||
|
||||
public class YouScratchMyBack : MLQuest
|
||||
{
|
||||
public YouScratchMyBack()
|
||||
{
|
||||
public YouScratchMyBack()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074608; // You Scratch My Back
|
||||
Description =
|
||||
1074609; // Heh. Heheheh. Good one. You're not a Bedlam student and you're definitely not eligible for a tuition refund. Heheheh. That old witch Aernya doesn't see as well as she used to you know. Otherwise, she would have ... hmmm, wait a minute. I sense a certain 'opportunity' here. I'll sign your forms in return for a little help with a project of my own. What do you say?
|
||||
RefusalMessage = 1074615; // Hehehe. Your choice.
|
||||
InProgressMessage =
|
||||
1074616; // I'm something of a gourmet, you see. It's tough getting some of the ingredients, though. Bring me back some pixie legs, unicorn ribs and ki-rin brains and I'll sign your form.
|
||||
CompletionMessage =
|
||||
1074617; // Oh excellent, you're back. I'll get the oven going. That thing about pixie legs, you see, is that they burn and dry out if you're not really careful. Taste just like chicken too!
|
||||
CompletionNotice = CompletionNoticeShortReturn;
|
||||
Activated = true;
|
||||
Title = 1074608; // You Scratch My Back
|
||||
Description =
|
||||
1074609; // Heh. Heheheh. Good one. You're not a Bedlam student and you're definitely not eligible for a tuition refund. Heheheh. That old witch Aernya doesn't see as well as she used to you know. Otherwise, she would have ... hmmm, wait a minute. I sense a certain 'opportunity' here. I'll sign your forms in return for a little help with a project of my own. What do you say?
|
||||
RefusalMessage = 1074615; // Hehehe. Your choice.
|
||||
InProgressMessage =
|
||||
1074616; // I'm something of a gourmet, you see. It's tough getting some of the ingredients, though. Bring me back some pixie legs, unicorn ribs and ki-rin brains and I'll sign your form.
|
||||
CompletionMessage =
|
||||
1074617; // Oh excellent, you're back. I'll get the oven going. That thing about pixie legs, you see, is that they burn and dry out if you're not really careful. Taste just like chicken too!
|
||||
CompletionNotice = CompletionNoticeShortReturn;
|
||||
|
||||
Objectives.Add(new CollectObjective(1, typeof(UnicornRibs), "Unicorn Ribs"));
|
||||
Objectives.Add(new CollectObjective(2, typeof(KirinBrains), "Ki-Rin Brains"));
|
||||
Objectives.Add(new CollectObjective(5, typeof(PixieLeg), "Pixie Leg"));
|
||||
Objectives.Add(new CollectObjective(1, typeof(UnicornRibs), "Unicorn Ribs"));
|
||||
Objectives.Add(new CollectObjective(2, typeof(KirinBrains), "Ki-Rin Brains"));
|
||||
Objectives.Add(new CollectObjective(5, typeof(PixieLeg), "Pixie Leg"));
|
||||
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(FoolingAernya);
|
||||
public override bool IsChainTriggered => true;
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public class FoolingAernya : MLQuest
|
||||
public override Type NextQuest => typeof(FoolingAernya);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class FoolingAernya : MLQuest
|
||||
{
|
||||
public FoolingAernya()
|
||||
{
|
||||
public FoolingAernya()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074618; // Fooling Aernya
|
||||
Description =
|
||||
1074619; // Now that I've signed your papers you'd better get back to that witch Aernya. Mmmm mmm smell those ribs!
|
||||
RefusalMessage = 1074620; // Giving up on your scheme eh? Suit yourself.
|
||||
InProgressMessage =
|
||||
1074621; // You better hurry back to Mistress Aernya with that signed form. The college only has so much money and with enough claims you may find yourself unable to get your tuition refunded. *wink*
|
||||
CompletionMessage = 1074622; // What? Hrmph. Gorrow signed your form did he? Let me see that. *squint*
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
Activated = true;
|
||||
Title = 1074618; // Fooling Aernya
|
||||
Description =
|
||||
1074619; // Now that I've signed your papers you'd better get back to that witch Aernya. Mmmm mmm smell those ribs!
|
||||
RefusalMessage = 1074620; // Giving up on your scheme eh? Suit yourself.
|
||||
InProgressMessage =
|
||||
1074621; // You better hurry back to Mistress Aernya with that signed form. The college only has so much money and with enough claims you may find yourself unable to get your tuition refunded. *wink*
|
||||
CompletionMessage = 1074622; // What? Hrmph. Gorrow signed your form did he? Let me see that. *squint*
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(SignedTuitionReimbursementForm),
|
||||
1,
|
||||
"Signed Tuition Reimbursement Form",
|
||||
typeof(Aernya)
|
||||
)
|
||||
);
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(SignedTuitionReimbursementForm),
|
||||
1,
|
||||
"Signed Tuition Reimbursement Form",
|
||||
typeof(Aernya)
|
||||
)
|
||||
);
|
||||
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(NotQuiteThatEasy);
|
||||
public override bool IsChainTriggered => true;
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public class NotQuiteThatEasy : MLQuest
|
||||
public override Type NextQuest => typeof(NotQuiteThatEasy);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class NotQuiteThatEasy : MLQuest
|
||||
{
|
||||
public NotQuiteThatEasy()
|
||||
{
|
||||
public NotQuiteThatEasy()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074623; // Not Quite That Easy
|
||||
Description =
|
||||
1074624; // I wouldn't be too smug just yet, whiner. You still need Master Gnosos' signature before I can cut your refund. Last I heard, he's coordinating the recovery of the portions of the college that are currently overrun. *nasty smile* Off with you.
|
||||
RefusalMessage = 1074626; // Coward.
|
||||
InProgressMessage = 1074627; // What are you waiting for? The iron maiden is still the portal to Bedlam.
|
||||
CompletionMessage =
|
||||
1074628; // Made it through did you? Did you happen to see Red Death out there? Big horse, skeletal ... burning eyes? No? What's this? Forms? FORMS? I'm up to my eyebrows in ravenous out-of-control undead and you want a signature?
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
Activated = true;
|
||||
Title = 1074623; // Not Quite That Easy
|
||||
Description =
|
||||
1074624; // I wouldn't be too smug just yet, whiner. You still need Master Gnosos' signature before I can cut your refund. Last I heard, he's coordinating the recovery of the portions of the college that are currently overrun. *nasty smile* Off with you.
|
||||
RefusalMessage = 1074626; // Coward.
|
||||
InProgressMessage = 1074627; // What are you waiting for? The iron maiden is still the portal to Bedlam.
|
||||
CompletionMessage =
|
||||
1074628; // Made it through did you? Did you happen to see Red Death out there? Big horse, skeletal ... burning eyes? No? What's this? Forms? FORMS? I'm up to my eyebrows in ravenous out-of-control undead and you want a signature?
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(SignedTuitionReimbursementForm),
|
||||
1,
|
||||
"Signed Tuition Reimbursement Form",
|
||||
typeof(MasterGnosos)
|
||||
)
|
||||
);
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(SignedTuitionReimbursementForm),
|
||||
1,
|
||||
"Signed Tuition Reimbursement Form",
|
||||
typeof(MasterGnosos)
|
||||
)
|
||||
);
|
||||
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(ConvinceMe);
|
||||
public override bool IsChainTriggered => true;
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
base.Generate();
|
||||
|
||||
PutDeco(new BedlamTeleporter(), new Point3D(2067, 1371, -75), Map.Malas);
|
||||
}
|
||||
|
||||
public override void OnAccepted(MLQuestInstance instance)
|
||||
{
|
||||
instance.PlayerContext.BedlamAccess = true; // Permanent access
|
||||
}
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public class ConvinceMe : MLQuest
|
||||
public override Type NextQuest => typeof(ConvinceMe);
|
||||
public override bool IsChainTriggered => true;
|
||||
|
||||
public override void Generate()
|
||||
{
|
||||
public ConvinceMe()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074629; // Convince Me
|
||||
Description =
|
||||
1074630; // I'm not signing any forms until the situation here is under control. So, you can either help out or you can forget getting your tuition refund. Which will it be? Help control the shambling dead?
|
||||
RefusalMessage = 1074631; // No signature for you.
|
||||
InProgressMessage =
|
||||
1074632; // No signature for you until you kill off some of the shambling dead out there and destroy that blasted horse.
|
||||
CompletionMessage = 1074633; // Pulled it off huh? Well then you've earned this signature!
|
||||
CompletionNotice = CompletionNoticeShortReturn;
|
||||
base.Generate();
|
||||
|
||||
var bedlam = new QuestArea(1074835, "Bedlam"); // Bedlam
|
||||
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(RedDeath) }, "Red Death", bedlam));
|
||||
Objectives.Add(new KillObjective(10, new[] { typeof(GoreFiend) }, "gore fiends", bedlam));
|
||||
Objectives.Add(new KillObjective(8, new[] { typeof(RottingCorpse) }, "rotting corpses", bedlam));
|
||||
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(TuitionReimbursement);
|
||||
public override bool IsChainTriggered => true;
|
||||
PutDeco(new BedlamTeleporter(), new Point3D(2067, 1371, -75), Map.Malas);
|
||||
}
|
||||
|
||||
public class TuitionReimbursement : MLQuest
|
||||
public override void OnAccepted(MLQuestInstance instance)
|
||||
{
|
||||
public TuitionReimbursement()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074634; // Tuition Reimbursement
|
||||
Description =
|
||||
1074635; // Well, there you are. I've added my signature to that of Gorrow, so you should be set to return to Mistress Aernya and get your tuition refunded.
|
||||
RefusalMessage =
|
||||
1074636; // Great! If you're going to stick around here, I know we have more tasks for you to perform.
|
||||
InProgressMessage =
|
||||
1074637; // Just head out the main gates there and you'll find yourself embracing the iron maiden in the Bloodletter's Guild.
|
||||
CompletionMessage =
|
||||
1074638; // *disinterested stare* What? Oh, you've gotten your form filled in. How nice. *glare* And I'd hoped you'd drop this charade before I was forced to rub your nose in it. *nasty smile* You're not even a student and as such, you're not eligible for a refund -- you've never paid tuition. For your services, Master Gnosos has recommended you receive pay. So here. Now go away.
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(CompletedTuitionReimbursementForm),
|
||||
1,
|
||||
"Completed Tuition Reimbursement Form",
|
||||
typeof(Aernya)
|
||||
)
|
||||
);
|
||||
|
||||
Rewards.Add(ItemReward.Strongbox);
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[QuesterName("Aernya (Umbra)")]
|
||||
public class Aernya : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Aernya() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Mistress of Admissions";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Sandals(Utility.RandomNeutralHue()));
|
||||
AddItem(new Skirt(Utility.RandomBool() ? 0x1 : 0x0));
|
||||
AddItem(new Cloak(Utility.RandomBrightHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomBool() ? 0x3B2 : 0x3B3));
|
||||
}
|
||||
|
||||
public Aernya(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Aernya";
|
||||
|
||||
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("Gorrow (Luna)")]
|
||||
public class Gorrow : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Gorrow() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Mayor";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(0x1BB));
|
||||
AddItem(new Tunic(Utility.RandomNeutralHue()));
|
||||
AddItem(new LongPants(0x901));
|
||||
AddItem(new Cloak(Utility.RandomRedHue()));
|
||||
}
|
||||
|
||||
public Gorrow(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Gorrow";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(
|
||||
this,
|
||||
pm,
|
||||
Utility.RandomList(
|
||||
1074200, // Thank goodness you are here, there's no time to lose.
|
||||
1074203 // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
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("Master Gnosos (Bedlam)")]
|
||||
public class MasterGnosos : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public MasterGnosos() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the necromancer";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = 0x83E8;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
HairItemID = 0x2049;
|
||||
FacialHairItemID = 0x204B;
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(0x485));
|
||||
AddItem(new Robe(0x497));
|
||||
|
||||
SetSkill(SkillName.EvalInt, 60.0, 80.0);
|
||||
SetSkill(SkillName.Inscribe, 60.0, 80.0);
|
||||
SetSkill(SkillName.MagicResist, 60.0, 80.0);
|
||||
SetSkill(SkillName.SpiritSpeak, 60.0, 80.0);
|
||||
SetSkill(SkillName.Meditation, 60.0, 80.0);
|
||||
SetSkill(SkillName.Necromancy, 60.0, 80.0);
|
||||
}
|
||||
|
||||
public MasterGnosos(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override bool CanTeach => true;
|
||||
public override string DefaultName => "Master Gnosos";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074186); // Come here, I have a task.
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
instance.PlayerContext.BedlamAccess = true; // Permanent access
|
||||
}
|
||||
}
|
||||
|
||||
public class ConvinceMe : MLQuest
|
||||
{
|
||||
public ConvinceMe()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074629; // Convince Me
|
||||
Description =
|
||||
1074630; // I'm not signing any forms until the situation here is under control. So, you can either help out or you can forget getting your tuition refund. Which will it be? Help control the shambling dead?
|
||||
RefusalMessage = 1074631; // No signature for you.
|
||||
InProgressMessage =
|
||||
1074632; // No signature for you until you kill off some of the shambling dead out there and destroy that blasted horse.
|
||||
CompletionMessage = 1074633; // Pulled it off huh? Well then you've earned this signature!
|
||||
CompletionNotice = CompletionNoticeShortReturn;
|
||||
|
||||
var bedlam = new QuestArea(1074835, "Bedlam"); // Bedlam
|
||||
|
||||
Objectives.Add(new KillObjective(1, new[] { typeof(RedDeath) }, "Red Death", bedlam));
|
||||
Objectives.Add(new KillObjective(10, new[] { typeof(GoreFiend) }, "gore fiends", bedlam));
|
||||
Objectives.Add(new KillObjective(8, new[] { typeof(RottingCorpse) }, "rotting corpses", bedlam));
|
||||
|
||||
Rewards.Add(new DummyReward(1074634)); // Tuition Reimbursement
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(TuitionReimbursement);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class TuitionReimbursement : MLQuest
|
||||
{
|
||||
public TuitionReimbursement()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074634; // Tuition Reimbursement
|
||||
Description =
|
||||
1074635; // Well, there you are. I've added my signature to that of Gorrow, so you should be set to return to Mistress Aernya and get your tuition refunded.
|
||||
RefusalMessage =
|
||||
1074636; // Great! If you're going to stick around here, I know we have more tasks for you to perform.
|
||||
InProgressMessage =
|
||||
1074637; // Just head out the main gates there and you'll find yourself embracing the iron maiden in the Bloodletter's Guild.
|
||||
CompletionMessage =
|
||||
1074638; // *disinterested stare* What? Oh, you've gotten your form filled in. How nice. *glare* And I'd hoped you'd drop this charade before I was forced to rub your nose in it. *nasty smile* You're not even a student and as such, you're not eligible for a refund -- you've never paid tuition. For your services, Master Gnosos has recommended you receive pay. So here. Now go away.
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(
|
||||
new DeliverObjective(
|
||||
typeof(CompletedTuitionReimbursementForm),
|
||||
1,
|
||||
"Completed Tuition Reimbursement Form",
|
||||
typeof(Aernya)
|
||||
)
|
||||
);
|
||||
|
||||
Rewards.Add(ItemReward.Strongbox);
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[QuesterName("Aernya (Umbra)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Aernya : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Aernya() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Mistress of Admissions";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Sandals(Utility.RandomNeutralHue()));
|
||||
AddItem(new Skirt(Utility.RandomBool() ? 0x1 : 0x0));
|
||||
AddItem(new Cloak(Utility.RandomBrightHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomBool() ? 0x3B2 : 0x3B3));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Aernya";
|
||||
}
|
||||
|
||||
[QuesterName("Gorrow (Luna)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Gorrow : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Gorrow() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Mayor";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(0x1BB));
|
||||
AddItem(new Tunic(Utility.RandomNeutralHue()));
|
||||
AddItem(new LongPants(0x901));
|
||||
AddItem(new Cloak(Utility.RandomRedHue()));
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override string DefaultName => "Gorrow";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(
|
||||
this,
|
||||
pm,
|
||||
Utility.RandomList(
|
||||
1074200, // Thank goodness you are here, there's no time to lose.
|
||||
1074203 // Hello friend. I realize you are busy but if you would be willing to render me a service I can assure you that you will be judiciously renumerated.
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
[QuesterName("Master Gnosos (Bedlam)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class MasterGnosos : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public MasterGnosos() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the necromancer";
|
||||
Race = Race.Human;
|
||||
Body = 0x190;
|
||||
Female = false;
|
||||
Hue = 0x83E8;
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
HairItemID = 0x2049;
|
||||
FacialHairItemID = 0x204B;
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Shoes(0x485));
|
||||
AddItem(new Robe(0x497));
|
||||
|
||||
SetSkill(SkillName.EvalInt, 60.0, 80.0);
|
||||
SetSkill(SkillName.Inscribe, 60.0, 80.0);
|
||||
SetSkill(SkillName.MagicResist, 60.0, 80.0);
|
||||
SetSkill(SkillName.SpiritSpeak, 60.0, 80.0);
|
||||
SetSkill(SkillName.Meditation, 60.0, 80.0);
|
||||
SetSkill(SkillName.Necromancy, 60.0, 80.0);
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override bool CanTeach => true;
|
||||
public override string DefaultName => "Master Gnosos";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074186); // Come here, I have a task.
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -1,151 +1,133 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class TheAncientWorld : MLQuest
|
||||
{
|
||||
public class TheAncientWorld : MLQuest
|
||||
public TheAncientWorld()
|
||||
{
|
||||
public TheAncientWorld()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074534; // The Ancient World
|
||||
Description =
|
||||
1074535; // The lore of my people mentions Mondain many times. In one tale, it is revealed that he created and enslaved a race -- a sort of man bull, known as a 'minotaur'. The tales speak of mighty warriors who charged with blood-soaked horns into the heat of battle. But, alas, the fate of the bull-men is unknown after the rupture. Will you seek information about their civilization?
|
||||
RefusalMessage = 1074538; // I am disappointed, but I respect your decision.
|
||||
InProgressMessage =
|
||||
1074539; // A traveler has told me that worshippers of Mondain still exist and wander the land. Perhaps their lore speaks of whether the bull-men survived. I do not think they share their secrets gladly. You may need to be 'persuasive'.
|
||||
CompletionMessage = 1074542; // What have you found?
|
||||
Activated = true;
|
||||
Title = 1074534; // The Ancient World
|
||||
Description =
|
||||
1074535; // The lore of my people mentions Mondain many times. In one tale, it is revealed that he created and enslaved a race -- a sort of man bull, known as a 'minotaur'. The tales speak of mighty warriors who charged with blood-soaked horns into the heat of battle. But, alas, the fate of the bull-men is unknown after the rupture. Will you seek information about their civilization?
|
||||
RefusalMessage = 1074538; // I am disappointed, but I respect your decision.
|
||||
InProgressMessage =
|
||||
1074539; // A traveler has told me that worshippers of Mondain still exist and wander the land. Perhaps their lore speaks of whether the bull-men survived. I do not think they share their secrets gladly. You may need to be 'persuasive'.
|
||||
CompletionMessage = 1074542; // What have you found?
|
||||
|
||||
Objectives.Add(new CollectObjective(1, typeof(FragmentOfAMap), "fragment of a map"));
|
||||
Objectives.Add(new CollectObjective(1, typeof(FragmentOfAMap), "fragment of a map"));
|
||||
|
||||
Rewards.Add(new DummyReward(1074876)); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(TheGoldenHorn);
|
||||
Rewards.Add(new DummyReward(1074876)); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public class TheGoldenHorn : MLQuest
|
||||
public override Type NextQuest => typeof(TheGoldenHorn);
|
||||
}
|
||||
|
||||
public class TheGoldenHorn : MLQuest
|
||||
{
|
||||
public TheGoldenHorn()
|
||||
{
|
||||
public TheGoldenHorn()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074543; // The Golden Horn
|
||||
Description =
|
||||
1074545; // Ah ha! You see here ... and over here ... The map fragment places the city of the bull-men, Labyrinth, on that piece of Sosaria that was thrown into the sky. Hmmm, I would have you go there and find any artifacts that remain that help tell the story. But, legend speaks of a mighty barrier to prevent invasion of the city. Take this map to Braen and explain the problem. Perhaps he can devise a solution.
|
||||
RefusalMessage = 1074538; // I am disappointed, but I respect your decision.
|
||||
InProgressMessage = 1074547; // Braen is nearby, run and speak with him.
|
||||
CompletionMessage = 1074549; // Yes? What do you want? I'm very busy.
|
||||
Activated = true;
|
||||
Title = 1074543; // The Golden Horn
|
||||
Description =
|
||||
1074545; // Ah ha! You see here ... and over here ... The map fragment places the city of the bull-men, Labyrinth, on that piece of Sosaria that was thrown into the sky. Hmmm, I would have you go there and find any artifacts that remain that help tell the story. But, legend speaks of a mighty barrier to prevent invasion of the city. Take this map to Braen and explain the problem. Perhaps he can devise a solution.
|
||||
RefusalMessage = 1074538; // I am disappointed, but I respect your decision.
|
||||
InProgressMessage = 1074547; // Braen is nearby, run and speak with him.
|
||||
CompletionMessage = 1074549; // Yes? What do you want? I'm very busy.
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(FragmentOfAMapDelivery), 1, "fragment of a map", typeof(Braen)));
|
||||
Objectives.Add(new DeliverObjective(typeof(FragmentOfAMapDelivery), 1, "fragment of a map", typeof(Braen)));
|
||||
|
||||
Rewards.Add(new DummyReward(1074876)); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(Bullish);
|
||||
public override bool IsChainTriggered => true;
|
||||
Rewards.Add(new DummyReward(1074876)); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public class Bullish : MLQuest
|
||||
public override Type NextQuest => typeof(Bullish);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class Bullish : MLQuest
|
||||
{
|
||||
public Bullish()
|
||||
{
|
||||
public Bullish()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074550; // Bullish
|
||||
Description =
|
||||
1074552; // Oh, I see. I will need some materials to infuse you with the essence of a bull-man, so you can fool their defenses. The most similar beast to the original Baratarian bull that the minotaur were bred from is undoubtedly the mighty Gaman, native to the Lands of the Feudal Lords. I need horns, in great quantity to undertake this magic.
|
||||
RefusalMessage = 1074554; // Oh come now, don't be afraid. The magic won't harm you.
|
||||
InProgressMessage =
|
||||
1074555; // I cannot grant you the ability to pass through the bull-men's defenses without the gaman horns.
|
||||
CompletionMessage =
|
||||
1074556; // You've returned at last! Give me just a moment to examine what you've brought and I can perform the magic that will allow you enter the Labyrinth.
|
||||
Activated = true;
|
||||
Title = 1074550; // Bullish
|
||||
Description =
|
||||
1074552; // Oh, I see. I will need some materials to infuse you with the essence of a bull-man, so you can fool their defenses. The most similar beast to the original Baratarian bull that the minotaur were bred from is undoubtedly the mighty Gaman, native to the Lands of the Feudal Lords. I need horns, in great quantity to undertake this magic.
|
||||
RefusalMessage = 1074554; // Oh come now, don't be afraid. The magic won't harm you.
|
||||
InProgressMessage =
|
||||
1074555; // I cannot grant you the ability to pass through the bull-men's defenses without the gaman horns.
|
||||
CompletionMessage =
|
||||
1074556; // You've returned at last! Give me just a moment to examine what you've brought and I can perform the magic that will allow you enter the Labyrinth.
|
||||
|
||||
Objectives.Add(new CollectObjective(20, typeof(GamanHorns), "gaman horns"));
|
||||
Objectives.Add(new CollectObjective(20, typeof(GamanHorns), "gaman horns"));
|
||||
|
||||
Rewards.Add(new DummyReward(1074876)); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(LostCivilization);
|
||||
public override bool IsChainTriggered => true;
|
||||
Rewards.Add(new DummyReward(1074876)); // Knowledge of the legendary minotaur.
|
||||
}
|
||||
|
||||
public class LostCivilization : MLQuest
|
||||
public override Type NextQuest => typeof(LostCivilization);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class LostCivilization : MLQuest
|
||||
{
|
||||
public LostCivilization()
|
||||
{
|
||||
public LostCivilization()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1074823; // Lost Civilization
|
||||
Description =
|
||||
1074825; // *whew* It is done! The fierce essence of the bull has been infused into your aura. You are able now to breach the ancient defenses of the city. Go forth and seek the minotaur -- and then return with wonderous tales and evidence of your visit to the Labyrinth.
|
||||
RefusalMessage =
|
||||
1074827; // As you wish. I can't understand why you'd pass up such a remarkable opportunity. Think of the adventures you would have.
|
||||
InProgressMessage =
|
||||
1074828; // You won't reach the minotaur city by loitering around here! What are you waiting for? You need to get to Malas and find the access point for the island. You'll be renowned for your discovery!
|
||||
CompletionMessage =
|
||||
1074829; // Oh! You've returned at last! I can't wait to hear the tales ... but first, let me see those artifacts. You've certainly earned this reward.
|
||||
Activated = true;
|
||||
Title = 1074823; // Lost Civilization
|
||||
Description =
|
||||
1074825; // *whew* It is done! The fierce essence of the bull has been infused into your aura. You are able now to breach the ancient defenses of the city. Go forth and seek the minotaur -- and then return with wonderous tales and evidence of your visit to the Labyrinth.
|
||||
RefusalMessage =
|
||||
1074827; // As you wish. I can't understand why you'd pass up such a remarkable opportunity. Think of the adventures you would have.
|
||||
InProgressMessage =
|
||||
1074828; // You won't reach the minotaur city by loitering around here! What are you waiting for? You need to get to Malas and find the access point for the island. You'll be renowned for your discovery!
|
||||
CompletionMessage =
|
||||
1074829; // Oh! You've returned at last! I can't wait to hear the tales ... but first, let me see those artifacts. You've certainly earned this reward.
|
||||
|
||||
Objectives.Add(new CollectObjective(3, typeof(MinotaurArtifact), "minotaur artifacts"));
|
||||
Objectives.Add(new CollectObjective(3, typeof(MinotaurArtifact), "minotaur artifacts"));
|
||||
|
||||
Rewards.Add(ItemReward.Strongbox);
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
Rewards.Add(ItemReward.Strongbox);
|
||||
}
|
||||
|
||||
[QuesterName("Broolol (The Heartwood)")]
|
||||
public class LorekeeperBroolol : BaseCreature
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[QuesterName("Broolol (The Heartwood)")]
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class LorekeeperBroolol : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public LorekeeperBroolol() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
[Constructible]
|
||||
public LorekeeperBroolol() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the keeper of tradition";
|
||||
Race = Race.Elf;
|
||||
Body = 0x25E;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
Title = "the keeper of tradition";
|
||||
Race = Race.Elf;
|
||||
Body = 0x25E;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
SetSkill(SkillName.Meditation, 60.0, 80.0);
|
||||
SetSkill(SkillName.Focus, 60.0, 80.0);
|
||||
SetSkill(SkillName.Meditation, 60.0, 80.0);
|
||||
SetSkill(SkillName.Focus, 60.0, 80.0);
|
||||
|
||||
AddItem(new ElvenBoots(0x70D));
|
||||
AddItem(new FemaleElvenRobe(0x3A));
|
||||
AddItem(new WildStaff());
|
||||
}
|
||||
AddItem(new ElvenBoots(0x70D));
|
||||
AddItem(new FemaleElvenRobe(0x3A));
|
||||
AddItem(new WildStaff());
|
||||
}
|
||||
|
||||
public LorekeeperBroolol(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
public override bool IsInvulnerable => true;
|
||||
public override bool CanTeach => true;
|
||||
public override string DefaultName => "Lorekeeper Broolol";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
public override bool CanTeach => true;
|
||||
public override string DefaultName => "Lorekeeper Broolol";
|
||||
public override bool CanShout => true;
|
||||
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074200); // Thank goodness you are here, there's no time to lose.
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
public override void Shout(PlayerMobile pm)
|
||||
{
|
||||
MLQuestSystem.Tell(this, pm, 1074200); // Thank goodness you are here, there's no time to lose.
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,174 +1,138 @@
|
|||
using System;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Objectives;
|
||||
using Server.Engines.MLQuests.Rewards;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Definitions
|
||||
namespace Server.Engines.MLQuests.Definitions;
|
||||
|
||||
public class UnfadingMemoriesPartOne : MLQuest
|
||||
{
|
||||
public class UnfadingMemoriesPartOne : MLQuest
|
||||
public UnfadingMemoriesPartOne()
|
||||
{
|
||||
public UnfadingMemoriesPartOne()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075355; // Unfading Memories
|
||||
// Aargh! It's just not right! It doesn't capture the unique color of her hair at all! If only I had some Prismatic Amber. That would be perfect. They used to mine it in Malas, but alas, those veins ran dry some time ago. I hear it may have been found in the Prism of Light. Oh, if only there were a bold adventurer within earshot who would go to the Prism of Light and retrieve some for me!
|
||||
Description = 1075356;
|
||||
RefusalMessage = 1075358; // Is there no one who can help a humble artist pursue his Muse?
|
||||
// You can find Prismatic Amber in the Prism of Light, located just north of the city of Nujel'm.
|
||||
InProgressMessage = 1075359;
|
||||
// I knew it! See, it's just the color I needed! Look how it brings out the highlights of her wheaten tresses!
|
||||
CompletionMessage = 1075360;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
Activated = true;
|
||||
Title = 1075355; // Unfading Memories
|
||||
// Aargh! It's just not right! It doesn't capture the unique color of her hair at all! If only I had some Prismatic Amber. That would be perfect. They used to mine it in Malas, but alas, those veins ran dry some time ago. I hear it may have been found in the Prism of Light. Oh, if only there were a bold adventurer within earshot who would go to the Prism of Light and retrieve some for me!
|
||||
Description = 1075356;
|
||||
RefusalMessage = 1075358; // Is there no one who can help a humble artist pursue his Muse?
|
||||
// You can find Prismatic Amber in the Prism of Light, located just north of the city of Nujel'm.
|
||||
InProgressMessage = 1075359;
|
||||
// I knew it! See, it's just the color I needed! Look how it brings out the highlights of her wheaten tresses!
|
||||
CompletionMessage = 1075360;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new CollectObjective(1, typeof(PrismaticAmber), "Prismatic Amber"));
|
||||
Objectives.Add(new CollectObjective(1, typeof(PrismaticAmber), "Prismatic Amber"));
|
||||
|
||||
// The joy of contributing to a noble artistic effort, however paltry the end product.
|
||||
Rewards.Add(new DummyReward(1075357));
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(UnfadingMemoriesPartTwo);
|
||||
// The joy of contributing to a noble artistic effort, however paltry the end product.
|
||||
Rewards.Add(new DummyReward(1075357));
|
||||
}
|
||||
|
||||
public class UnfadingMemoriesPartTwo : MLQuest
|
||||
{
|
||||
public UnfadingMemoriesPartTwo()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075367; // Unfading Memories
|
||||
// Finished! With the pigment I was able to create from the Prismatic Amber you brought me, I was able to complete my humble work. I should explain. Once, I loved a noble lady of gentleness and refinement, who possessed such beauty that I have found myself unable to love another to this day. But it was from afar that I admired her, for it is not for one so lowly as I to pay court to the likes of her. You have heard of the fair Thalia, Lady of Nujel'm? No? Well, she was my Muse, my inspiration, and when I heard she was to be married, I lost whatever pitiful talent I possessed. I felt I must compose a portrait of her, my masterpiece, or I would never be able to paint again. You, my friend, have helped me complete my work. Now I ask another favor of you. Will you take it to her as a wedding gift? She will probably reject it, but I must make the offer.
|
||||
Description = 1075368;
|
||||
// Alright then, you have already helped me more than I deserved. I shall find someone else to undertake this task.
|
||||
RefusalMessage = 1075370;
|
||||
// The wedding is taking place in the palace in Nujel'm. You will likely find her there.
|
||||
InProgressMessage = 1075371;
|
||||
// I'm sorry, I'm getting ready to be married. I don't have time to . . . what's that you say?
|
||||
CompletionMessage = 1075372;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(PortraitOfTheBride), 1, "Portrait of the Bride", typeof(Thalia)));
|
||||
|
||||
Rewards.Add(new DummyReward(1075369)); // The Artist's gratitude.
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(UnfadingMemoriesPartThree);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class UnfadingMemoriesPartThree : MLQuest
|
||||
{
|
||||
public UnfadingMemoriesPartThree()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075373; // Unfading Memories
|
||||
// Emilio painted this? It is absolutely wonderful! I used to love looking at his paintings, but I don't remember him creating anything like this before. Would you be so kind as to carry a letter to him? Fate may have it that I am to marry another, yet I am compelled to reveal to him that his love was not entirely unrequited.
|
||||
Description = 1075374;
|
||||
RefusalMessage = 1075376; // Very well, then. If you will excuse me, I need to get ready.
|
||||
// Take the letter back to the Artist's Guild in Britain, if you would do me this kindness.
|
||||
InProgressMessage = 1075377;
|
||||
// She said what? She thinks what of me? I . . . I can't believe it! All this time, I never knew how she truly felt. Thank you, my friend. I believe now I will be able to paint once again. Here, take this bleach. I was going to use it to destroy all of my works. Perhaps you can find a better use for it now.
|
||||
CompletionMessage = 1075378;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(BridesLetter), 1, "Bride's Letter", typeof(Emilio)));
|
||||
|
||||
Rewards.Add(new ItemReward(1075375, typeof(Bleach))); // Bleach
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[QuesterName("Emilio (Britain)")] // OSI's description is "Artist", not very helpful
|
||||
public class Emilio : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Emilio() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Tortured Artist";
|
||||
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 Sandals(0x72B));
|
||||
AddItem(new LongPants(0x525));
|
||||
AddItem(new FancyShirt(0x53F));
|
||||
AddItem(new FloppyHat(0x58C));
|
||||
AddItem(new BodySash(0x1C));
|
||||
}
|
||||
|
||||
public Emilio(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string DefaultName => "Emilio";
|
||||
public override bool IsInvulnerable => true;
|
||||
|
||||
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("Thalia (Nujel'm)")] // OSI's description is "Bride", not very helpful
|
||||
public class Thalia : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Thalia() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Bride";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Sandals(0x8FD));
|
||||
AddItem(new FancyDress(0x8FD));
|
||||
}
|
||||
|
||||
public Thalia(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override string DefaultName => "Thalia";
|
||||
public override bool IsInvulnerable => true;
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
public override Type NextQuest => typeof(UnfadingMemoriesPartTwo);
|
||||
}
|
||||
|
||||
public class UnfadingMemoriesPartTwo : MLQuest
|
||||
{
|
||||
public UnfadingMemoriesPartTwo()
|
||||
{
|
||||
Activated = true;
|
||||
Title = 1075367; // Unfading Memories
|
||||
// Finished! With the pigment I was able to create from the Prismatic Amber you brought me, I was able to complete my humble work. I should explain. Once, I loved a noble lady of gentleness and refinement, who possessed such beauty that I have found myself unable to love another to this day. But it was from afar that I admired her, for it is not for one so lowly as I to pay court to the likes of her. You have heard of the fair Thalia, Lady of Nujel'm? No? Well, she was my Muse, my inspiration, and when I heard she was to be married, I lost whatever pitiful talent I possessed. I felt I must compose a portrait of her, my masterpiece, or I would never be able to paint again. You, my friend, have helped me complete my work. Now I ask another favor of you. Will you take it to her as a wedding gift? She will probably reject it, but I must make the offer.
|
||||
Description = 1075368;
|
||||
// Alright then, you have already helped me more than I deserved. I shall find someone else to undertake this task.
|
||||
RefusalMessage = 1075370;
|
||||
// The wedding is taking place in the palace in Nujel'm. You will likely find her there.
|
||||
InProgressMessage = 1075371;
|
||||
// I'm sorry, I'm getting ready to be married. I don't have time to . . . what's that you say?
|
||||
CompletionMessage = 1075372;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(PortraitOfTheBride), 1, "Portrait of the Bride", typeof(Thalia)));
|
||||
|
||||
Rewards.Add(new DummyReward(1075369)); // The Artist's gratitude.
|
||||
}
|
||||
|
||||
public override Type NextQuest => typeof(UnfadingMemoriesPartThree);
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
public class UnfadingMemoriesPartThree : MLQuest
|
||||
{
|
||||
public UnfadingMemoriesPartThree()
|
||||
{
|
||||
Activated = true;
|
||||
OneTimeOnly = true;
|
||||
Title = 1075373; // Unfading Memories
|
||||
// Emilio painted this? It is absolutely wonderful! I used to love looking at his paintings, but I don't remember him creating anything like this before. Would you be so kind as to carry a letter to him? Fate may have it that I am to marry another, yet I am compelled to reveal to him that his love was not entirely unrequited.
|
||||
Description = 1075374;
|
||||
RefusalMessage = 1075376; // Very well, then. If you will excuse me, I need to get ready.
|
||||
// Take the letter back to the Artist's Guild in Britain, if you would do me this kindness.
|
||||
InProgressMessage = 1075377;
|
||||
// She said what? She thinks what of me? I . . . I can't believe it! All this time, I never knew how she truly felt. Thank you, my friend. I believe now I will be able to paint once again. Here, take this bleach. I was going to use it to destroy all of my works. Perhaps you can find a better use for it now.
|
||||
CompletionMessage = 1075378;
|
||||
CompletionNotice = CompletionNoticeShort;
|
||||
|
||||
Objectives.Add(new DeliverObjective(typeof(BridesLetter), 1, "Bride's Letter", typeof(Emilio)));
|
||||
|
||||
Rewards.Add(new ItemReward(1075375, typeof(Bleach))); // Bleach
|
||||
}
|
||||
|
||||
public override bool IsChainTriggered => true;
|
||||
}
|
||||
|
||||
[QuesterName("Emilio (Britain)")] // OSI's description is "Artist", not very helpful
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Emilio : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Emilio() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Tortured Artist";
|
||||
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 Sandals(0x72B));
|
||||
AddItem(new LongPants(0x525));
|
||||
AddItem(new FancyShirt(0x53F));
|
||||
AddItem(new FloppyHat(0x58C));
|
||||
AddItem(new BodySash(0x1C));
|
||||
}
|
||||
|
||||
public override string DefaultName => "Emilio";
|
||||
public override bool IsInvulnerable => true;
|
||||
}
|
||||
|
||||
[QuesterName("Thalia (Nujel'm)")] // OSI's description is "Bride", not very helpful
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Thalia : BaseCreature
|
||||
{
|
||||
[Constructible]
|
||||
public Thalia() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
Title = "the Bride";
|
||||
Race = Race.Human;
|
||||
Body = 0x191;
|
||||
Female = true;
|
||||
Hue = Race.RandomSkinHue();
|
||||
|
||||
SetSpeed(0.5, 2.0);
|
||||
InitStats(100, 100, 25);
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
AddItem(new Backpack());
|
||||
AddItem(new Sandals(0x8FD));
|
||||
AddItem(new FancyDress(0x8FD));
|
||||
}
|
||||
|
||||
public override string DefaultName => "Thalia";
|
||||
public override bool IsInvulnerable => true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,46 +1,125 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using ModernUO.Serialization;
|
||||
using Server.Engines.MLQuests.Definitions;
|
||||
using Server.Engines.MLQuests.Gumps;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
|
||||
namespace Server.Engines.MLQuests.Mobiles
|
||||
namespace Server.Engines.MLQuests.Mobiles;
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public abstract partial class DoneQuestCollector : BaseCreature, IRaceChanger
|
||||
{
|
||||
public abstract class DoneQuestCollector : BaseCreature, IRaceChanger
|
||||
private InternalTimer m_Timer;
|
||||
|
||||
public DoneQuestCollector() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
{
|
||||
private InternalTimer m_Timer;
|
||||
SetSpeed(0.5, 2.0);
|
||||
}
|
||||
|
||||
public DoneQuestCollector() : base(AIType.AI_Vendor, FightMode.None, 2)
|
||||
public override bool IsInvulnerable => true;
|
||||
|
||||
public abstract TextDefinition[] Offer { get; }
|
||||
public abstract TextDefinition[] Incomplete { get; }
|
||||
public abstract TextDefinition[] Complete { get; }
|
||||
public abstract Type[] Needed { get; }
|
||||
|
||||
public bool CheckComplete(PlayerMobile pm)
|
||||
{
|
||||
if (CompletedCount(pm) == Needed.Length)
|
||||
{
|
||||
SetSpeed(0.5, 2.0);
|
||||
return true;
|
||||
}
|
||||
|
||||
public DoneQuestCollector(Serial serial)
|
||||
: base(serial)
|
||||
pm.SendLocalizedMessage(1073644); // You must complete all the tasks before proceeding...
|
||||
return false;
|
||||
}
|
||||
|
||||
public void ConsumeNeeded(PlayerMobile pm)
|
||||
{
|
||||
var context = MLQuestSystem.GetContext(pm);
|
||||
|
||||
if (context != null)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool IsInvulnerable => true;
|
||||
|
||||
public abstract TextDefinition[] Offer { get; }
|
||||
public abstract TextDefinition[] Incomplete { get; }
|
||||
public abstract TextDefinition[] Complete { get; }
|
||||
public abstract Type[] Needed { get; }
|
||||
|
||||
public bool CheckComplete(PlayerMobile pm)
|
||||
{
|
||||
if (CompletedCount(pm) == Needed.Length)
|
||||
foreach (var type in Needed)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
var quest = MLQuestSystem.FindQuest(type);
|
||||
|
||||
pm.SendLocalizedMessage(1073644); // You must complete all the tasks before proceeding...
|
||||
return false;
|
||||
if (quest != null)
|
||||
{
|
||||
context.RemoveDoneQuest(quest);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OnCancel(PlayerMobile pm)
|
||||
{
|
||||
pm.SendLocalizedMessage(1073645); // You may try this again later...
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
TryTalkTo(from, true);
|
||||
}
|
||||
|
||||
public override void OnDoubleClickDead(Mobile from)
|
||||
{
|
||||
TryTalkTo(from, true);
|
||||
}
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m.Player && InRange(m, 6) && !InRange(oldLocation, 6))
|
||||
{
|
||||
TryTalkTo(m, false);
|
||||
}
|
||||
|
||||
public void ConsumeNeeded(PlayerMobile pm)
|
||||
base.OnMovement(m, oldLocation);
|
||||
}
|
||||
|
||||
public void TryTalkTo(Mobile from, bool fromClick)
|
||||
{
|
||||
if (!from.Hidden && !from.HasGump<RaceChangeConfirmGump>() &&
|
||||
!RaceChangeConfirmGump.IsPending(from.NetState) && CanTalkTo(from))
|
||||
{
|
||||
TalkTo(from as PlayerMobile);
|
||||
}
|
||||
else if (fromClick)
|
||||
{
|
||||
DenyTalk(from);
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool CanTalkTo(Mobile from) => true;
|
||||
|
||||
public virtual void DenyTalk(Mobile from)
|
||||
{
|
||||
}
|
||||
|
||||
public void TalkTo(PlayerMobile pm)
|
||||
{
|
||||
if (pm == null || m_Timer?.Running == true)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var completed = CompletedCount(pm);
|
||||
|
||||
if (completed == Needed.Length)
|
||||
{
|
||||
m_Timer = new InternalTimer(this, pm, Complete, true);
|
||||
}
|
||||
else if (completed == 0)
|
||||
{
|
||||
m_Timer = new InternalTimer(this, pm, Offer, false);
|
||||
}
|
||||
else
|
||||
{
|
||||
var conversation = new List<TextDefinition>();
|
||||
conversation.AddRange(Incomplete);
|
||||
|
||||
var context = MLQuestSystem.GetContext(pm);
|
||||
|
||||
if (context != null)
|
||||
|
|
@ -49,393 +128,260 @@ namespace Server.Engines.MLQuests.Mobiles
|
|||
{
|
||||
var quest = MLQuestSystem.FindQuest(type);
|
||||
|
||||
if (quest != null)
|
||||
if (quest == null || context.HasDoneQuest(quest))
|
||||
{
|
||||
context.RemoveDoneQuest(quest);
|
||||
continue;
|
||||
}
|
||||
|
||||
conversation.Add(quest.Title);
|
||||
}
|
||||
}
|
||||
|
||||
m_Timer = new InternalTimer(this, pm, conversation, false);
|
||||
}
|
||||
|
||||
public void OnCancel(PlayerMobile pm)
|
||||
m_Timer.Start();
|
||||
}
|
||||
|
||||
private int CompletedCount(PlayerMobile pm)
|
||||
{
|
||||
var context = MLQuestSystem.GetContext(pm);
|
||||
|
||||
if (context == null)
|
||||
{
|
||||
pm.SendLocalizedMessage(1073645); // You may try this again later...
|
||||
return 0;
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
TryTalkTo(from, true);
|
||||
}
|
||||
var result = 0;
|
||||
|
||||
public override void OnDoubleClickDead(Mobile from)
|
||||
foreach (var type in Needed)
|
||||
{
|
||||
TryTalkTo(from, true);
|
||||
}
|
||||
var quest = MLQuestSystem.FindQuest(type);
|
||||
|
||||
public override void OnMovement(Mobile m, Point3D oldLocation)
|
||||
{
|
||||
if (m.Player && InRange(m, 6) && !InRange(oldLocation, 6))
|
||||
if (quest == null || context.HasDoneQuest(quest))
|
||||
{
|
||||
TryTalkTo(m, false);
|
||||
}
|
||||
|
||||
base.OnMovement(m, oldLocation);
|
||||
}
|
||||
|
||||
public void TryTalkTo(Mobile from, bool fromClick)
|
||||
{
|
||||
if (!from.Hidden && !from.HasGump<RaceChangeConfirmGump>() &&
|
||||
!RaceChangeConfirmGump.IsPending(from.NetState) && CanTalkTo(from))
|
||||
{
|
||||
TalkTo(from as PlayerMobile);
|
||||
}
|
||||
else if (fromClick)
|
||||
{
|
||||
DenyTalk(from);
|
||||
++result;
|
||||
}
|
||||
}
|
||||
|
||||
public virtual bool CanTalkTo(Mobile from) => true;
|
||||
return result;
|
||||
}
|
||||
|
||||
public virtual void DenyTalk(Mobile from)
|
||||
public virtual void OnComplete(PlayerMobile pm)
|
||||
{
|
||||
}
|
||||
|
||||
private class InternalTimer : Timer
|
||||
{
|
||||
private readonly IList<TextDefinition> m_Conversation;
|
||||
private readonly bool m_IsComplete;
|
||||
private readonly DoneQuestCollector m_Owner;
|
||||
private readonly PlayerMobile m_Target;
|
||||
private int m_Index;
|
||||
|
||||
public InternalTimer(
|
||||
DoneQuestCollector owner, PlayerMobile target, IList<TextDefinition> conversation,
|
||||
bool isComplete
|
||||
)
|
||||
: base(TimeSpan.Zero, GetDelay())
|
||||
{
|
||||
m_Owner = owner;
|
||||
m_Target = target;
|
||||
m_Conversation = conversation;
|
||||
m_IsComplete = isComplete;
|
||||
m_Index = 0;
|
||||
}
|
||||
|
||||
public void TalkTo(PlayerMobile pm)
|
||||
private static TimeSpan GetDelay() => TimeSpan.FromSeconds(Utility.RandomBool() ? 3 : 4);
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (pm == null || m_Timer?.Running == true)
|
||||
if (m_Owner.Deleted)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
var completed = CompletedCount(pm);
|
||||
if (m_Index >= m_Conversation.Count)
|
||||
{
|
||||
if (m_IsComplete)
|
||||
{
|
||||
m_Owner.OnComplete(m_Target);
|
||||
}
|
||||
|
||||
if (completed == Needed.Length)
|
||||
{
|
||||
m_Timer = new InternalTimer(this, pm, Complete, true);
|
||||
}
|
||||
else if (completed == 0)
|
||||
{
|
||||
m_Timer = new InternalTimer(this, pm, Offer, false);
|
||||
Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
var conversation = new List<TextDefinition>();
|
||||
conversation.AddRange(Incomplete);
|
||||
|
||||
var context = MLQuestSystem.GetContext(pm);
|
||||
|
||||
if (context != null)
|
||||
if (m_Index == 0)
|
||||
{
|
||||
foreach (var type in Needed)
|
||||
if (m_Target.ShowFameTitle && m_Target.Fame >= 10000)
|
||||
{
|
||||
var quest = MLQuestSystem.FindQuest(type);
|
||||
|
||||
if (quest == null || context.HasDoneQuest(quest))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
conversation.Add(quest.Title);
|
||||
m_Owner.Say(true, $"{(m_Target.Female ? "Lady" : "Lord")} {m_Target.Name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Owner.Say(true, m_Target.Name);
|
||||
}
|
||||
}
|
||||
|
||||
m_Timer = new InternalTimer(this, pm, conversation, false);
|
||||
m_Conversation[m_Index++].PublicOverheadMessage(m_Owner, MessageType.Regular, 0x3B2);
|
||||
Interval = GetDelay();
|
||||
}
|
||||
|
||||
m_Timer.Start();
|
||||
}
|
||||
|
||||
private int CompletedCount(PlayerMobile pm)
|
||||
{
|
||||
var context = MLQuestSystem.GetContext(pm);
|
||||
|
||||
if (context == null)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
var result = 0;
|
||||
|
||||
foreach (var type in Needed)
|
||||
{
|
||||
var quest = MLQuestSystem.FindQuest(type);
|
||||
|
||||
if (quest == null || context.HasDoneQuest(quest))
|
||||
{
|
||||
++result;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public virtual void OnComplete(PlayerMobile pm)
|
||||
{
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
private class InternalTimer : Timer
|
||||
{
|
||||
private readonly IList<TextDefinition> m_Conversation;
|
||||
private readonly bool m_IsComplete;
|
||||
private readonly DoneQuestCollector m_Owner;
|
||||
private readonly PlayerMobile m_Target;
|
||||
private int m_Index;
|
||||
|
||||
public InternalTimer(
|
||||
DoneQuestCollector owner, PlayerMobile target, IList<TextDefinition> conversation,
|
||||
bool isComplete
|
||||
)
|
||||
: base(TimeSpan.Zero, GetDelay())
|
||||
{
|
||||
m_Owner = owner;
|
||||
m_Target = target;
|
||||
m_Conversation = conversation;
|
||||
m_IsComplete = isComplete;
|
||||
m_Index = 0;
|
||||
}
|
||||
|
||||
private static TimeSpan GetDelay() => TimeSpan.FromSeconds(Utility.RandomBool() ? 3 : 4);
|
||||
|
||||
protected override void OnTick()
|
||||
{
|
||||
if (m_Owner.Deleted)
|
||||
{
|
||||
Stop();
|
||||
return;
|
||||
}
|
||||
|
||||
if (m_Index >= m_Conversation.Count)
|
||||
{
|
||||
if (m_IsComplete)
|
||||
{
|
||||
m_Owner.OnComplete(m_Target);
|
||||
}
|
||||
|
||||
Stop();
|
||||
}
|
||||
else
|
||||
{
|
||||
if (m_Index == 0)
|
||||
{
|
||||
if (m_Target.ShowFameTitle && m_Target.Fame >= 10000)
|
||||
{
|
||||
m_Owner.Say(true, $"{(m_Target.Female ? "Lady" : "Lord")} {m_Target.Name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Owner.Say(true, m_Target.Name);
|
||||
}
|
||||
}
|
||||
|
||||
m_Conversation[m_Index++].PublicOverheadMessage(m_Owner, MessageType.Regular, 0x3B2);
|
||||
Interval = GetDelay();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Darius : DoneQuestCollector
|
||||
{
|
||||
private static readonly TextDefinition[] m_Offer =
|
||||
{
|
||||
1073998, // Blessings of Sosaria to you and merry met, friend.
|
||||
1073999, // I am glad for your company and wonder if you seek the heritage of your people? I sense within you an elven bloodline -- the purity of which was lost when our brothers and sisters were exiled here in the Rupture.
|
||||
1074000, // If it is your desire to reclaim your place amongst the people, you must demonstrate that you understand and embrace the responsibilities expected of you as an elf.
|
||||
1074001, // The most basic lessons of our Sosaria are taught by her humblest children. Seek Maul, the great bear, who understands instinctively the seasons.
|
||||
1074398, // Seek Strongroot, the great treefellow, whose very roots reach to the heart of the world. Seek Enigma, whose wisdom can only be conveyed in riddles and rhymes. Seek Bravehorn, the great hart, who exemplifies the fierce dedication of a protector of his people.
|
||||
1074399, // Seek the Huntsman, the centaur tasked with maintaining the balance. And lastly seek Arielle, the pixie, who has perhaps the most important lesson -- not to take yourself too seriously.
|
||||
1074400 // Or do none of these things. You must choose your own path in the world, and what use you'll make of your existence.
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Incomplete =
|
||||
{
|
||||
1074002, // You have begun to walk the path of reclaiming your heritage, but you have not learned all the lessons before you.
|
||||
1074003 // You yet must perform these services:
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Complete =
|
||||
{
|
||||
1074004, // You have carved a path in history, sought to understand the way from our sage companions.
|
||||
1074005, // And now you have returned full circle to the place of your origin within the arms of Mother Sosaria. There is but one thing left to do if you truly wish to embrace your elven heritage.
|
||||
1074006, // To be born once more an elf, you must strip of all worldly possessions. Nothing of man or beast much touch your skin.
|
||||
1074007 // Then you may step forth into history.
|
||||
};
|
||||
|
||||
private static readonly Type[] m_Needed =
|
||||
{
|
||||
typeof(Seasons),
|
||||
typeof(CaretakerOfTheLand),
|
||||
typeof(WisdomOfTheSphynx),
|
||||
typeof(DefendingTheHerd),
|
||||
typeof(TheBalanceOfNature),
|
||||
typeof(TheJoysOfLife)
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
public Darius()
|
||||
{
|
||||
Title = "the wise";
|
||||
Race = Race.Elf;
|
||||
Hue = Race.RandomSkinHue();
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
AddItem(new WildStaff());
|
||||
AddItem(new Sandals(0x1BB));
|
||||
AddItem(new GemmedCirclet());
|
||||
AddItem(new Tunic(Utility.RandomBrightHue()));
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
SetStr(40, 50);
|
||||
SetDex(60, 70);
|
||||
SetInt(90, 100); // Verified int
|
||||
}
|
||||
|
||||
public Darius(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override TextDefinition[] Offer => m_Offer;
|
||||
public override TextDefinition[] Incomplete => m_Incomplete;
|
||||
public override TextDefinition[] Complete => m_Complete;
|
||||
public override Type[] Needed => m_Needed;
|
||||
|
||||
public override string DefaultName => "Darius";
|
||||
|
||||
public override bool CanTalkTo(Mobile from) => from.Race == Race.Human;
|
||||
|
||||
public override void DenyTalk(Mobile from)
|
||||
{
|
||||
from.SendLocalizedMessage(1074017); // He's too busy right now, so he ignores you.
|
||||
}
|
||||
|
||||
public override void OnComplete(PlayerMobile from)
|
||||
{
|
||||
from.SendGump(new RaceChangeConfirmGump(this, from, Race.Elf));
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
public class Nedrick : DoneQuestCollector
|
||||
{
|
||||
private static readonly TextDefinition[] m_Offer =
|
||||
{
|
||||
1074403, // Greetings, traveler and welcome.
|
||||
1074404, // Perhaps you have heard of the service I offer? Perhaps you wish to avail yourself of the opportunity I lay before you.
|
||||
1074405, // Elves and humans; we lived together once in peace. Mighty relics that attest to our friendship remain, of course. Yet, memories faded when the Gem was shattered and the world torn asunder. Alone in The Heartwood, our elven brothers and sisters wondered what terrible evil had befallen Sosaria.
|
||||
1074406, // Violent change marked the sundering of our ties. We are different -- elves and humans. And yet we are much alike. I can give an elf the chance to walk as a human upon Sosaria. I can undertake the transformation.
|
||||
1074407, // But you must prove yourself to me. Humans possess a strength of character and back. Humans are quick-witted and able to pick up a smattering of nearly any talent. Humans are tough both mentally and physically. And of course, humans defend their own -- sometimes with their own lives.
|
||||
1074408, // Seek Sledge the Versatile and learn about human ingenuity and creativity. Seek Patricus and demonstrate your integrity and strength.
|
||||
1074409, // Seek out a human in need and prove your worth as a defender of humanity. Seek Belulah in Nu'Jelm and heartily challenge the elements in a display of toughness to rival any human.
|
||||
1074411 // Or turn away and embrace your heritage. It matters not to me.
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Incomplete =
|
||||
{
|
||||
1074412, // You have made a good start but have more yet to do.
|
||||
1074413 // You must yet perform these deeds:
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Complete =
|
||||
{
|
||||
1074410, // You have proven yourself capable and commited and so I will grant you the transformation you seek.
|
||||
1074531, // The first time you were born, you entered the world bare of all possessions and concerns. So too as you transform to your new life as a human, you must remove all worldly goods from the touch of your flesh.
|
||||
1074532 // I call upon all nearby to witness your rebirth!
|
||||
};
|
||||
|
||||
private static readonly Type[] m_Needed =
|
||||
{
|
||||
typeof(Ingenuity),
|
||||
typeof(HeaveHo),
|
||||
typeof(HumanInNeed),
|
||||
typeof(AllSeasonAdventurer)
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
public Nedrick()
|
||||
{
|
||||
Title = "the iron worker";
|
||||
Race = Race.Human;
|
||||
Hue = Race.RandomSkinHue();
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
AddItem(new Boots());
|
||||
AddItem(new LongPants(Utility.RandomNondyedHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomNondyedHue()));
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
Utility.AssignRandomFacialHair(this, HairHue);
|
||||
|
||||
SetStr(70, 80);
|
||||
SetDex(50, 60);
|
||||
SetInt(60, 70); // Verified int
|
||||
}
|
||||
|
||||
public Nedrick(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override TextDefinition[] Offer => m_Offer;
|
||||
public override TextDefinition[] Incomplete => m_Incomplete;
|
||||
public override TextDefinition[] Complete => m_Complete;
|
||||
public override Type[] Needed => m_Needed;
|
||||
|
||||
public override string DefaultName => "Nedrick";
|
||||
|
||||
public override bool CanTalkTo(Mobile from) => from.Race == Race.Elf;
|
||||
|
||||
public override void DenyTalk(Mobile from)
|
||||
{
|
||||
from.SendLocalizedMessage(1074017); // He's too busy right now, so he ignores you.
|
||||
}
|
||||
|
||||
public override void OnComplete(PlayerMobile from)
|
||||
{
|
||||
from.SendGump(new RaceChangeConfirmGump(this, from, Race.Human));
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Darius : DoneQuestCollector
|
||||
{
|
||||
private static readonly TextDefinition[] m_Offer =
|
||||
{
|
||||
1073998, // Blessings of Sosaria to you and merry met, friend.
|
||||
1073999, // I am glad for your company and wonder if you seek the heritage of your people? I sense within you an elven bloodline -- the purity of which was lost when our brothers and sisters were exiled here in the Rupture.
|
||||
1074000, // If it is your desire to reclaim your place amongst the people, you must demonstrate that you understand and embrace the responsibilities expected of you as an elf.
|
||||
1074001, // The most basic lessons of our Sosaria are taught by her humblest children. Seek Maul, the great bear, who understands instinctively the seasons.
|
||||
1074398, // Seek Strongroot, the great treefellow, whose very roots reach to the heart of the world. Seek Enigma, whose wisdom can only be conveyed in riddles and rhymes. Seek Bravehorn, the great hart, who exemplifies the fierce dedication of a protector of his people.
|
||||
1074399, // Seek the Huntsman, the centaur tasked with maintaining the balance. And lastly seek Arielle, the pixie, who has perhaps the most important lesson -- not to take yourself too seriously.
|
||||
1074400 // Or do none of these things. You must choose your own path in the world, and what use you'll make of your existence.
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Incomplete =
|
||||
{
|
||||
1074002, // You have begun to walk the path of reclaiming your heritage, but you have not learned all the lessons before you.
|
||||
1074003 // You yet must perform these services:
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Complete =
|
||||
{
|
||||
1074004, // You have carved a path in history, sought to understand the way from our sage companions.
|
||||
1074005, // And now you have returned full circle to the place of your origin within the arms of Mother Sosaria. There is but one thing left to do if you truly wish to embrace your elven heritage.
|
||||
1074006, // To be born once more an elf, you must strip of all worldly possessions. Nothing of man or beast much touch your skin.
|
||||
1074007 // Then you may step forth into history.
|
||||
};
|
||||
|
||||
private static readonly Type[] m_Needed =
|
||||
{
|
||||
typeof(Seasons),
|
||||
typeof(CaretakerOfTheLand),
|
||||
typeof(WisdomOfTheSphynx),
|
||||
typeof(DefendingTheHerd),
|
||||
typeof(TheBalanceOfNature),
|
||||
typeof(TheJoysOfLife)
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
public Darius()
|
||||
{
|
||||
Title = "the wise";
|
||||
Race = Race.Elf;
|
||||
Hue = Race.RandomSkinHue();
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
AddItem(new WildStaff());
|
||||
AddItem(new Sandals(0x1BB));
|
||||
AddItem(new GemmedCirclet());
|
||||
AddItem(new Tunic(Utility.RandomBrightHue()));
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
|
||||
SetStr(40, 50);
|
||||
SetDex(60, 70);
|
||||
SetInt(90, 100); // Verified int
|
||||
}
|
||||
|
||||
public override TextDefinition[] Offer => m_Offer;
|
||||
public override TextDefinition[] Incomplete => m_Incomplete;
|
||||
public override TextDefinition[] Complete => m_Complete;
|
||||
public override Type[] Needed => m_Needed;
|
||||
|
||||
public override string DefaultName => "Darius";
|
||||
|
||||
public override bool CanTalkTo(Mobile from) => from.Race == Race.Human;
|
||||
|
||||
public override void DenyTalk(Mobile from)
|
||||
{
|
||||
from.SendLocalizedMessage(1074017); // He's too busy right now, so he ignores you.
|
||||
}
|
||||
|
||||
public override void OnComplete(PlayerMobile from)
|
||||
{
|
||||
from.SendGump(new RaceChangeConfirmGump(this, from, Race.Elf));
|
||||
}
|
||||
}
|
||||
|
||||
[SerializationGenerator(0, false)]
|
||||
public partial class Nedrick : DoneQuestCollector
|
||||
{
|
||||
private static readonly TextDefinition[] m_Offer =
|
||||
{
|
||||
1074403, // Greetings, traveler and welcome.
|
||||
1074404, // Perhaps you have heard of the service I offer? Perhaps you wish to avail yourself of the opportunity I lay before you.
|
||||
1074405, // Elves and humans; we lived together once in peace. Mighty relics that attest to our friendship remain, of course. Yet, memories faded when the Gem was shattered and the world torn asunder. Alone in The Heartwood, our elven brothers and sisters wondered what terrible evil had befallen Sosaria.
|
||||
1074406, // Violent change marked the sundering of our ties. We are different -- elves and humans. And yet we are much alike. I can give an elf the chance to walk as a human upon Sosaria. I can undertake the transformation.
|
||||
1074407, // But you must prove yourself to me. Humans possess a strength of character and back. Humans are quick-witted and able to pick up a smattering of nearly any talent. Humans are tough both mentally and physically. And of course, humans defend their own -- sometimes with their own lives.
|
||||
1074408, // Seek Sledge the Versatile and learn about human ingenuity and creativity. Seek Patricus and demonstrate your integrity and strength.
|
||||
1074409, // Seek out a human in need and prove your worth as a defender of humanity. Seek Belulah in Nu'Jelm and heartily challenge the elements in a display of toughness to rival any human.
|
||||
1074411 // Or turn away and embrace your heritage. It matters not to me.
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Incomplete =
|
||||
{
|
||||
1074412, // You have made a good start but have more yet to do.
|
||||
1074413 // You must yet perform these deeds:
|
||||
};
|
||||
|
||||
private static readonly TextDefinition[] m_Complete =
|
||||
{
|
||||
1074410, // You have proven yourself capable and commited and so I will grant you the transformation you seek.
|
||||
1074531, // The first time you were born, you entered the world bare of all possessions and concerns. So too as you transform to your new life as a human, you must remove all worldly goods from the touch of your flesh.
|
||||
1074532 // I call upon all nearby to witness your rebirth!
|
||||
};
|
||||
|
||||
private static readonly Type[] m_Needed =
|
||||
{
|
||||
typeof(Ingenuity),
|
||||
typeof(HeaveHo),
|
||||
typeof(HumanInNeed),
|
||||
typeof(AllSeasonAdventurer)
|
||||
};
|
||||
|
||||
[Constructible]
|
||||
public Nedrick()
|
||||
{
|
||||
Title = "the iron worker";
|
||||
Race = Race.Human;
|
||||
Hue = Race.RandomSkinHue();
|
||||
SpeechHue = Utility.RandomDyedHue();
|
||||
|
||||
AddItem(new Boots());
|
||||
AddItem(new LongPants(Utility.RandomNondyedHue()));
|
||||
AddItem(new FancyShirt(Utility.RandomNondyedHue()));
|
||||
|
||||
Utility.AssignRandomHair(this);
|
||||
Utility.AssignRandomFacialHair(this, HairHue);
|
||||
|
||||
SetStr(70, 80);
|
||||
SetDex(50, 60);
|
||||
SetInt(60, 70); // Verified int
|
||||
}
|
||||
|
||||
public override TextDefinition[] Offer => m_Offer;
|
||||
public override TextDefinition[] Incomplete => m_Incomplete;
|
||||
public override TextDefinition[] Complete => m_Complete;
|
||||
public override Type[] Needed => m_Needed;
|
||||
|
||||
public override string DefaultName => "Nedrick";
|
||||
|
||||
public override bool CanTalkTo(Mobile from) => from.Race == Race.Elf;
|
||||
|
||||
public override void DenyTalk(Mobile from)
|
||||
{
|
||||
from.SendLocalizedMessage(1074017); // He's too busy right now, so he ignores you.
|
||||
}
|
||||
|
||||
public override void OnComplete(PlayerMobile from)
|
||||
{
|
||||
from.SendGump(new RaceChangeConfirmGump(this, from, Race.Human));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
4
Projects/UOContent/Migrations/Server.BloodRose.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.BloodRose.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.BloodRose"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.ClarityPotion.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.ClarityPotion.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.ClarityPotion"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Aeluva.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Aeluva.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Aeluva"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Aernya.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Aernya.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Aernya"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.AldenArmstrong.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.AldenArmstrong.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.AldenArmstrong"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Alefian.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Alefian.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Alefian"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.AmeliaYoungstone.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.AmeliaYoungstone.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.AmeliaYoungstone"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.AndreasVesalius.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.AndreasVesalius.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.AndreasVesalius"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Andric.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Andric.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Andric"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Andros.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Andros.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Andros"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Arielle.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Arielle.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Arielle"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Asandos.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Asandos.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Asandos"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Avicenna.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Avicenna.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Avicenna"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Belulah.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Belulah.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Belulah"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Ben.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Ben.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Ben"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Beotham.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Beotham.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Beotham"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Bravehorn.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Bravehorn.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Bravehorn"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.BravehornsMate.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.BravehornsMate.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.BravehornsMate"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Canir.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Canir.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Canir"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Chiyo.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Chiyo.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Chiyo"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Churchill.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Churchill.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Churchill"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Clairesse.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Clairesse.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Clairesse"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Dallid.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Dallid.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Dallid"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Danoel.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Danoel.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Danoel"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Dimethro.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Dimethro.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Dimethro"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Drithen.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Drithen.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Drithen"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.ElderBrae.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.ElderBrae.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.ElderBrae"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.ElderOnallan.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.ElderOnallan.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.ElderOnallan"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Emerillo.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Emerillo.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Emerillo"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Emilio.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Emilio.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Emilio"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Enigma.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Enigma.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Enigma"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Evan.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Evan.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Evan"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Frederic.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Frederic.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Frederic"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.GeorgeHephaestus.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.GeorgeHephaestus.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.GeorgeHephaestus"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Gervis.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Gervis.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Gervis"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Gorrow.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Gorrow.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Gorrow"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.GrandpaCharley.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.GrandpaCharley.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.GrandpaCharley"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Gustar.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Gustar.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Gustar"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.GustarShroud.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.GustarShroud.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.GustarShroud"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Hamato.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Hamato.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Hamato"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Hargrove.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Hargrove.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Hargrove"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Huntsman.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Huntsman.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Huntsman"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.JacobWaltz.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.JacobWaltz.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.JacobWaltz"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jelrice.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jelrice.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Jelrice"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jillian.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jillian.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Jillian"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jockles.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jockles.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Jockles"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jun.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Jun.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Jun"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Kaelynna.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Kaelynna.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Kaelynna"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Kashiel.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Kashiel.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Kashiel"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Kia.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Kia.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Kia"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Koole.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Koole.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Koole"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Leon.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Leon.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Leon"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.LorekeeperBroolol.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.LorekeeperBroolol.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.LorekeeperBroolol"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.LorekeeperOolua.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.LorekeeperOolua.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.LorekeeperOolua"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.LorekeeperRollarn.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.LorekeeperRollarn.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.LorekeeperRollarn"
|
||||
}
|
||||
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Lowel.v0.json
generated
Normal file
4
Projects/UOContent/Migrations/Server.Engines.MLQuests.Definitions.Lowel.v0.json
generated
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"version": 0,
|
||||
"type": "Server.Engines.MLQuests.Definitions.Lowel"
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue