Cleans up comments for localization (#260)

This commit is contained in:
Kamron Batman 2020-09-20 12:48:10 -07:00 committed by GitHub
parent fd9ec089f7
commit 13e2693b59
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
52 changed files with 751 additions and 798 deletions

View file

@ -792,30 +792,31 @@ namespace Server.Items
if (ParentsContain<BankBox>()) // Root Parent is the Mobile. Parent could be another containter.
{
list.Add(
1073841,
1073841, // Contents: ~1_COUNT~/~2_MAXCOUNT~ items, ~3_WEIGHT~ stones
"{0}\t{1}\t{2}",
TotalItems,
MaxItems,
TotalWeight
); // Contents: ~1_COUNT~/~2_MAXCOUNT~ items, ~3_WEIGHT~ stones
);
}
else
{
list.Add(
1072241,
1072241, // Contents: ~1_COUNT~/~2_MAXCOUNT~ items, ~3_WEIGHT~/~4_MAXWEIGHT~ stones
"{0}\t{1}\t{2}\t{3}",
TotalItems,
MaxItems,
TotalWeight,
MaxWeight
); // Contents: ~1_COUNT~/~2_MAXCOUNT~ items, ~3_WEIGHT~/~4_MAXWEIGHT~ stones
);
}
// TODO: Where do the other clilocs come into play? 1073839 & 1073840?
}
else
{
list.Add(1050044, "{0}\t{1}", TotalItems, TotalWeight); // ~1_COUNT~ items, ~2_WEIGHT~ stones
// ~1_COUNT~ items, ~2_WEIGHT~ stones
list.Add(1050044, "{0}\t{1}", TotalItems, TotalWeight);
}
}
}

View file

@ -3241,9 +3241,9 @@ namespace Server
// OSI sends 1074769, bug!
if (QuestItem)
{
from.SendLocalizedMessage(
1049343
); // You can only drop quest items into the top-most level of your backpack while you still need them for your quest.
// You can only drop quest items into the top-most level of your backpack
// while you still need them for your quest.
from.SendLocalizedMessage(1049343);
}
}

View file

@ -4297,7 +4297,7 @@ namespace Server
this,
criminal
)
); // new AggressorInfo( aggressor, this, criminal, true ) );
);
if (CanSee(aggressor))
{
@ -4320,7 +4320,7 @@ namespace Server
this,
criminal
)
); // new AggressorInfo( aggressor, this, criminal, false ) );
);
if (CanSee(aggressor))
{
@ -4794,7 +4794,7 @@ namespace Server
m_NetState.Sequence,
this
)
); // new MovementAck( m_NetState.Sequence, this ) );
);
SetLocation(newLocation, false);
SetDirection(d);
@ -8352,9 +8352,9 @@ namespace Server
if (item.QuestItem)
{
item.QuestItem = false;
SendLocalizedMessage(
1074769
); // An item must be in your backpack (and not in a container within) to be toggled as a quest item.
// An item must be in your backpack (and not in a container within) to be toggled as a quest item.
SendLocalizedMessage(1074769);
}
return true;
@ -10494,10 +10494,7 @@ namespace Server
if (m_Mobile.InLOS(combatant))
{
weapon.OnBeforeSwing(
m_Mobile,
combatant
); // OnBeforeSwing for checking in regards to being hidden and whatnot
weapon.OnBeforeSwing(m_Mobile, combatant);
m_Mobile.RevealingAction();
m_Mobile.NextCombatTime =
Core.TickCount + (int)weapon.OnSwing(m_Mobile, combatant).TotalMilliseconds;

View file

@ -750,9 +750,9 @@ namespace Server.Accounting
m.SendLocalizedMessage(message);
}
m.SendLocalizedMessage(
1019039
); // You are no longer considered a young player of Ultima Online, and are no longer subject to the limitations and benefits of being in that caste.
// You are no longer considered a young player of Ultima Online,
// and are no longer subject to the limitations and benefits of being in that caste.
m.SendLocalizedMessage(1019039);
}
}
}
@ -762,9 +762,8 @@ namespace Server.Accounting
{
if (TotalGameTime >= YoungDuration)
{
RemoveYoungStatus(
1019038
); // You are old enough to be considered an adult, and have outgrown your status as a young player!
// You are old enough to be considered an adult, and have outgrown your status as a young player!
RemoveYoungStatus(1019038);
}
}

View file

@ -83,9 +83,9 @@ namespace Server.Gumps
250,
170,
20,
1061027,
1061027, // Next page
(m_Page + 1) * 10 < searchResults.Length ? 0x7FFF : 0x5EF7
); // Next page
);
}
public static void Initialize()

View file

@ -132,9 +132,8 @@ namespace Server.Engines.BulkOrders
{
if (Complete)
{
from.SendLocalizedMessage(
1045166
); // The maximum amount of requested items have already been combined to this deed.
// The maximum amount of requested items have already been combined to this deed.
from.SendLocalizedMessage(1045166);
}
else
{

View file

@ -615,9 +615,10 @@ namespace Server.Engines.BulkOrders
var sizeOfDroppedBod = bobEntry is BOBLargeEntry entry ? entry.Entries.Length : 1;
m_From.AddToBackpack(item);
m_From.SendLocalizedMessage(
1045152
); // The bulk order deed has been placed in your backpack.
// The bulk order deed has been placed in your backpack.
m_From.SendLocalizedMessage(1045152);
m_Book.Entries.Remove(bobEntry);
m_Book.InvalidateProperties();

View file

@ -107,9 +107,9 @@ namespace Server.Engines.BulkOrders
m_Book.InvalidateProperties();
pv.HoldGold += price;
m_From.AddToBackpack(item);
m_From.SendLocalizedMessage(
1045152
); // The bulk order deed has been placed in your backpack.
// The bulk order deed has been placed in your backpack.
m_From.SendLocalizedMessage(1045152);
if (m_Book.Entries.Count / 5 < m_Book.ItemCount)
{

View file

@ -133,9 +133,8 @@ namespace Server.Engines.BulkOrders
}
else if (AmountMax != small.AmountMax)
{
from.SendLocalizedMessage(
1045163
); // The two orders have different requested amounts and cannot be combined.
// The two orders have different requested amounts and cannot be combined.
from.SendLocalizedMessage(1045163);
}
else if (small.AmountCur < small.AmountMax)
{
@ -143,9 +142,8 @@ namespace Server.Engines.BulkOrders
}
else if (entry.Amount >= AmountMax)
{
from.SendLocalizedMessage(
1045166
); // The maximum amount of requested items have already been combined to this deed.
// The maximum amount of requested items have already been combined to this deed.
from.SendLocalizedMessage(1045166);
}
else
{

View file

@ -64,20 +64,22 @@ namespace Server.Engines.BulkOrders
y,
350,
20,
GetMaterialNumberFor(deed.Material),
GetMaterialNumberFor(deed.Material), // All items must be made with x material.
0x7FFF
); // All items must be made with x material.
y += 24;
);
}
}
AddHtmlLocalized(40, 192 + entries.Length * 24, 350, 20, 1045139, 0x7FFF); // Do you want to accept this order?
// Do you want to accept this order?
AddHtmlLocalized(40, 192 + entries.Length * 24, 350, 20, 1045139, 0x7FFF);
// Ok
AddButton(100, 216 + entries.Length * 24, 4005, 4007, 1);
AddHtmlLocalized(135, 216 + entries.Length * 24, 120, 20, 1006044, 0x7FFF); // Ok
AddHtmlLocalized(135, 216 + entries.Length * 24, 120, 20, 1006044, 0x7FFF);
// CANCEL
AddButton(275, 216 + entries.Length * 24, 4005, 4007, 0);
AddHtmlLocalized(310, 216 + entries.Length * 24, 120, 20, 1011012, 0x7FFF); // CANCEL
AddHtmlLocalized(310, 216 + entries.Length * 24, 120, 20, 1011012, 0x7FFF);
}
public override void OnResponse(NetState sender, RelayInfo info)

View file

@ -70,20 +70,21 @@ namespace Server.Engines.BulkOrders
y,
300,
20,
GetMaterialNumberFor(deed.Material),
GetMaterialNumberFor(deed.Material), // All items must be made with x material.
0x7FFF
); // All items must be made with x material.
);
}
AddButton(125, 168 + entries.Length * 24, 4005, 4007, 2);
AddHtmlLocalized(
160,
168 + entries.Length * 24,
300,
20,
1045155,
1045155, // Combine this deed with another deed.
0x7FFF
); // Combine this deed with another deed.
);
AddButton(125, 192 + entries.Length * 24, 4005, 4007, 1);
AddHtmlLocalized(160, 192 + entries.Length * 24, 120, 20, 1011441, 0x7FFF); // EXIT

View file

@ -77,7 +77,7 @@ namespace Server.Engines.BulkOrders
list.Add(SmallBODGump.GetMaterialNumberFor(Material)); // All items must be made with x material.
}
list.Add(1060656, AmountMax.ToString()); // amount to make: ~1_val~
list.Add(1060656, AmountMax.ToString()); // amount to make: ~1_val~
list.Add(1060658, "#{0}\t{1}", m_Number, m_AmountCur); // ~1_val~: ~2_val~
}
@ -128,9 +128,8 @@ namespace Server.Engines.BulkOrders
if (m_AmountCur >= AmountMax)
{
from.SendLocalizedMessage(
1045166
); // The maximum amount of requested items have already been combined to this deed.
// The maximum amount of requested items have already been combined to this deed.
from.SendLocalizedMessage(1045166);
}
else if (Type == null || objectType != Type && !objectType.IsSubclassOf(Type) ||
!(item is BaseWeapon) && !(item is BaseArmor) && !(item is BaseClothing))

View file

@ -54,9 +54,9 @@ namespace Server.Engines.BulkOrders
deed.RequireExceptional ? 192 : 168,
350,
20,
GetMaterialNumberFor(deed.Material),
GetMaterialNumberFor(deed.Material), // All items must be made with x material.
0x7FFF
); // All items must be made with x material.
);
}
}

View file

@ -57,9 +57,9 @@ namespace Server.Engines.BulkOrders
deed.RequireExceptional ? 168 : 144,
300,
20,
GetMaterialNumberFor(deed.Material),
GetMaterialNumberFor(deed.Material), // All items must be made with x material.
0x7FFF
); // All items must be made with x material.
);
}
AddButton(125, 192, 4005, 4007, 2);

View file

@ -883,14 +883,14 @@ namespace Server.Engines.CannedEvil
list.Add(1060742); // active
list.Add(1060658, "Type\t{0}", m_Type); // ~1_val~: ~2_val~
list.Add(1060659, "Level\t{0}", Level); // ~1_val~: ~2_val~
list.Add(
1060660,
1060660, // ~1_val~: ~2_val~
"Kills\t{0} of {1} ({2:F1}%)",
m_Kills,
MaxKills,
100.0 * ((double)m_Kills / MaxKills)
); // ~1_val~: ~2_val~
// list.Add( 1060661, "Spawn Range\t{0}", m_SpawnRange ); // ~1_val~: ~2_val~
);
}
else
{
@ -1145,9 +1145,8 @@ namespace Server.Engines.CannedEvil
}
else
{
to.SendLocalizedMessage(
1062317
); // For your valor in combating the fallen beast, a special artifact has been bestowed on you.
// For your valor in combating the fallen beast, a special artifact has been bestowed on you.
to.SendLocalizedMessage(1062317);
}
}
@ -1336,11 +1335,10 @@ namespace Server.Engines.CannedEvil
public override void AlterLightLevel(Mobile m, ref int global, ref int personal)
{
base.AlterLightLevel(m, ref global, ref personal);
global = Math.Max(
global,
1 + ChampionSpawn
.Level
); // This is a guesstimate. TODO: Verify & get exact values // OSI testing: at 2 red skulls, light = 0x3 ; 1 red = 0x3.; 3 = 8; 9 = 0xD 8 = 0xD 12 = 0x12 10 = 0xD
// TODO: Verify & get exact values
// OSI testing: at 2 red skulls, light = 0x3 ; 1 red = 0x3.; 3 = 8; 9 = 0xD 8 = 0xD 12 = 0x12 10 = 0xD
global = Math.Max(global, 1 + ChampionSpawn.Level);
}
}

View file

@ -51,13 +51,13 @@ namespace Server.Engines.Chat
if (value)
{
SendMessage(
56
); // From now on, only moderators will have speaking privileges in this conference by default.
// From now on, only moderators will have speaking privileges in this conference by default.
SendMessage(56);
}
else
{
SendMessage(55); // From now on, everyone in the conference will have speaking privileges by default.
// From now on, everyone in the conference will have speaking privileges by default.
SendMessage(55);
}
}
}
@ -207,17 +207,13 @@ namespace Server.Engines.Chat
{
if (wasBanned)
{
user.SendMessage(
63,
moderator.Username
); // %1, a conference moderator, has banned you from the conference.
// %1, a conference moderator, has banned you from the conference.
user.SendMessage(63, moderator.Username);
}
else
{
user.SendMessage(
45,
moderator.Username
); // %1, a conference moderator, has kicked you out of the conference.
// %1, a conference moderator, has kicked you out of the conference.
user.SendMessage(45, moderator.Username);
}
}
@ -250,11 +246,8 @@ namespace Server.Engines.Chat
if (moderator != null)
{
user.SendMessage(
54,
moderator
.Username
); // %1, a conference moderator, has granted you speaking privileges in this conference.
// %1, a conference moderator, has granted you speaking privileges in this conference.
user.SendMessage(54, moderator.Username);
}
SendMessage(52, user, user.Username); // %1 now has speaking privileges in this conference.
@ -275,11 +268,8 @@ namespace Server.Engines.Chat
if (moderator != null)
{
user.SendMessage(
53,
moderator
.Username
); // %1, a conference moderator, has removed your speaking privileges for this conference.
// %1, a conference moderator, has removed your speaking privileges for this conference.
user.SendMessage(53, moderator.Username);
}
SendMessage(51, user, user.Username); // %1 no longer has speaking privileges in this conference.

View file

@ -98,10 +98,8 @@ namespace Server.Engines.Chat
if (target.IsIgnored(from))
{
from.SendMessage(
35,
target.Username
); // %1 has chosen to ignore you. None of your messages to them will get through.
// %1 has chosen to ignore you. None of your messages to them will get through.
from.SendMessage(35, target.Username);
}
else if (target.IgnorePrivateMessage)
{
@ -109,7 +107,8 @@ namespace Server.Engines.Chat
}
else
{
target.SendMessage(59, from.Mobile, from.GetColorCharacter() + from.Username, text); // [%1]: %2
// [%1]: %2
target.SendMessage(59, from.Mobile, $"{from.GetColorCharacter()}{from.Username}", text);
}
}
@ -148,17 +147,17 @@ namespace Server.Engines.Chat
public static void ShowCharacterName(ChatUser from, Channel channel, string param)
{
from.Anonymous = false;
from.SendMessage(
39
); // You are now showing your character name to any players who inquire with the whois command.
// You are now showing your character name to any players who inquire with the whois command.
from.SendMessage(39);
}
public static void HideCharacterName(ChatUser from, Channel channel, string param)
{
from.Anonymous = true;
from.SendMessage(
40
); // You are no longer showing your character name to any players who inquire with the whois command.
// You are no longer showing your character name to any players who inquire with the whois command.
from.SendMessage(40);
}
public static void ToggleCharacterName(ChatUser from, Channel channel, string param)

View file

@ -2069,27 +2069,15 @@ namespace Server.Engines.ConPVP
{
pack.DropItem(item);
if (item is BaseWeapon)
// TODO: Use Layer instead of Type
int number = item switch
{
mob.SendLocalizedMessage(
1062001,
item.Name ?? $"#{item.LabelNumber}"
); // You can no longer wield your ~1_WEAPON~
}
else if (item is BaseArmor && !(item is BaseShield))
{
mob.SendLocalizedMessage(
1062002,
item.Name ?? $"#{item.LabelNumber}"
); // You can no longer wear your ~1_ARMOR~
}
else
{
mob.SendLocalizedMessage(
1062003,
item.Name ?? $"#{item.LabelNumber}"
); // You can no longer equip your ~1_SHIELD~
}
BaseWeapon _ => 1062001, // You can no longer wield your ~1_WEAPON~
BaseShield _ => 1062003, // You can no longer equip your ~1_SHIELD~
_ when item is BaseArmor || item is BaseClothing => 1062002 // You can no longer wear your ~1_ARMOR~
};
mob.SendLocalizedMessage(number, item.Name ?? $"#{item.LabelNumber}");
}
}

View file

@ -76,9 +76,9 @@ namespace Server.Engines.Craft
365,
150,
18,
1044017 + (context == null ? 0 : (int)context.MarkOption),
1044017 + (int)(context?.MarkOption ?? CraftMarkOption.MarkItem), // MARK ITEM
LabelColor
); // MARK ITEM
);
}
// ****************************************
@ -640,10 +640,10 @@ namespace Server.Engines.Craft
m_From,
m_CraftSystem,
m_Tool,
1044165,
1044165, // You haven't made anything yet.
m_Page
)
); // You haven't made anything yet.
);
}
break;

View file

@ -100,20 +100,15 @@ namespace Server.Engines.Craft
302 + m_OtherCount++ * 20,
310,
18,
1048176,
1048176, // Makes as many as possible at once
LabelColor
); // Makes as many as possible at once
);
}
DrawItem();
DrawSkill();
DrawResource();
/*
if (craftItem.RequiresSE)
AddHtmlLocalized( 170, 302 + (m_OtherCount++ * 20), 310, 18, 1063363, LabelColor, false, false ); //* Requires the "Samurai Empire" expansion
* */
if (craftItem.RequiredExpansion != Expansion.None)
{
var supportsEx = from.NetState?.SupportsExpansion(craftItem.RequiredExpansion) == true;
@ -138,9 +133,9 @@ namespace Server.Engines.Craft
302 + m_OtherCount++ * 20,
310,
18,
1073620,
1073620, // You have not learned this recipe.
RedLabelColor
); // You have not learned this recipe.
);
}
}
@ -167,9 +162,9 @@ namespace Server.Engines.Craft
302 + m_OtherCount++ * 20,
310,
18,
1044059,
1044059, // This item may hold its maker's mark
LabelColor
); // This item may hold its maker's mark
);
m_ShowExceptionalChance = true;
}
}
@ -270,9 +265,9 @@ namespace Server.Engines.Craft
302 + m_OtherCount++ * 20,
310,
18,
1044152,
1044152, // * The item retains the color of this material
LabelColor
); // * The item retains the color of this material
);
AddLabel(500, 219 + i * 20, LabelHue, "*");
}
@ -301,9 +296,9 @@ namespace Server.Engines.Craft
302 + m_OtherCount++ * 20,
360,
18,
1044379,
1044379, // Inscribing scrolls also requires a blank scroll and mana.
LabelColor
); // Inscribing scrolls also requires a blank scroll and mana.
);
}
}

View file

@ -1015,9 +1015,9 @@ namespace Server.Engines.Craft
from,
craftSystem,
tool,
1072847
1072847 // You must learn that recipe from a scroll.
)
); // You must learn that recipe from a scroll.
);
}
}
else
@ -1028,9 +1028,9 @@ namespace Server.Engines.Craft
from,
craftSystem,
tool,
1044153
1044153 // You don't have the required skills to attempt this item.
)
); // You don't have the required skills to attempt this item.
);
}
}
else
@ -1041,9 +1041,9 @@ namespace Server.Engines.Craft
from,
craftSystem,
tool,
RequiredExpansionMessage(RequiredExpansion)
RequiredExpansionMessage(RequiredExpansion) // The {0} expansion is required to attempt this item.
)
); // The {0} expansion is required to attempt this item.
);
}
}
else
@ -1052,8 +1052,7 @@ namespace Server.Engines.Craft
}
}
// Eventually convert to TextDefinition, but that requires that we convert all the gumps to ues it too. Not that it wouldn't be a bad idea.
private object RequiredExpansionMessage(Expansion expansion)
private TextDefinition RequiredExpansionMessage(Expansion expansion)
{
return expansion switch
{

View file

@ -356,9 +356,8 @@ namespace Server.Engines.Craft
if (resource != CraftResource.None)
{
from.Target = new InternalTarget(craftSystem, tool, res.ItemType, resource);
from.SendLocalizedMessage(
1061004
); // Target an item to enhance with the properties of your selected material.
// Target an item to enhance with the properties of your selected material.
from.SendLocalizedMessage(1061004);
}
else
{
@ -367,9 +366,10 @@ namespace Server.Engines.Craft
from,
craftSystem,
tool,
// You must select a special material in order to enhance an item with its properties.
1061010
)
); // You must select a special material in order to enhance an item with its properties.
);
}
}
}
@ -380,9 +380,10 @@ namespace Server.Engines.Craft
from,
craftSystem,
tool,
// You must select a special material in order to enhance an item with its properties.
1061010
)
); // You must select a special material in order to enhance an item with its properties.
);
}
}

View file

@ -239,8 +239,8 @@ namespace Server.Engines.Craft
typeof(IronIngot),
1044036,
28,
1044037
); // Double check skill
1044037 // Double check skill
);
SetNeededExpansion(index, Expansion.SE);
index = AddCraft(

View file

@ -141,7 +141,7 @@ namespace Server.Engines.Craft
1044041,
5,
1044351
); // This is in the categor of Other during AoS
);
AddSkill(index, SkillName.Tailoring, 40.0, 45.0);
AddRes(index, typeof(Cloth), 1044286, 5, 1044287);
}
@ -483,7 +483,7 @@ namespace Server.Engines.Craft
1044041,
5,
1044351
); // This is in the categor of Other during AoS
);
AddSkill(index, SkillName.Tailoring, 40.0, 45.0);
AddRes(index, typeof(Cloth), 1044286, 5, 1044287);
}

View file

@ -192,12 +192,12 @@ namespace Server.Engines.Craft
1061677,
1060509 + spell,
minSkill,
minSkill + 1.0,
minSkill + 1.0, // Yes, on OSI it's only 1.0 skill diff'. Don't blame me, blame OSI.
regs[0],
CraftItem.LabelNumber(regs[0]),
1,
501627
); // Yes, on OSI it's only 1.0 skill diff'. Don't blame me, blame OSI.
);
for (var i = 1; i < regs.Length; ++i)
{

View file

@ -182,9 +182,8 @@ namespace Server.Factions
{
if (Candidates.Count == 1)
{
Faction.Broadcast(
1038031
); // There are no longer any valid candidates in the Faction Commander election.
// There are no longer any valid candidates in the Faction Commander election.
Faction.Broadcast(1038031);
var winner = Candidates[0];
@ -206,9 +205,8 @@ namespace Server.Factions
}
else if (Candidates.Count == 0) // well, I guess this'll never happen
{
Faction.Broadcast(
1038031
); // There are no longer any valid candidates in the Faction Commander election.
// There are no longer any valid candidates in the Faction Commander election.
Faction.Broadcast(1038031);
Candidates.Clear();
State = ElectionState.Pending;

View file

@ -436,9 +436,9 @@ namespace Server.Factions
if (mob.Young)
{
guild.RemoveMember(mob);
mob.SendLocalizedMessage(
1042283
); // You have been kicked out of your guild! Young players may not remain in a guild which is allied with a faction.
// You have been kicked out of your guild!
// Young players may not remain in a guild which is allied with a faction.
mob.SendLocalizedMessage(1042283);
}
else if (AlreadyHasCharInFaction(mob))
{
@ -453,7 +453,8 @@ namespace Server.Factions
else
{
AddMember(mob);
mob.SendLocalizedMessage(1042756, true, $" {m_Definition.FriendlyName}"); // You are now joining a faction:
// You are now joining a faction:
mob.SendLocalizedMessage(1042756, true, $" {m_Definition.FriendlyName}");
}
}
@ -506,15 +507,13 @@ namespace Server.Factions
}
else if (pl?.IsLeaving == true)
{
pm.SendLocalizedMessage(
1005051
); // You cannot use the faction stone until you have finished quitting your current faction
// You cannot use the faction stone until you have finished quitting your current faction
pm.SendLocalizedMessage(1005051);
}
else if (AlreadyHasCharInFaction(pm))
{
pm.SendLocalizedMessage(
1005059
); // You cannot join a faction because you already declared your allegiance with another character
// You cannot join a faction because you already declared your allegiance with another character
pm.SendLocalizedMessage(1005059);
}
else if (IsFactionBanned(mob))
{
@ -526,15 +525,13 @@ namespace Server.Factions
if (guild?.Leader != pm)
{
pm.SendLocalizedMessage(
1005057
); // You cannot join a faction because you are in a guild and not the guildmaster
// You cannot join a faction because you are in a guild and not the guildmaster
pm.SendLocalizedMessage(1005057);
}
else if (guild.Type != GuildType.Regular)
{
pm.SendLocalizedMessage(
1042161
); // You cannot join a faction because your guild is an Order or Chaos type.
// You cannot join a faction because your guild is an Order or Chaos type.
pm.SendLocalizedMessage(1042161);
}
else if (!Guild.NewGuildSystem && guild.Enemies?.Count > 0) // CAN join w/wars in new system
{
@ -542,15 +539,13 @@ namespace Server.Factions
}
else if (Guild.NewGuildSystem && guild.Alliance != null)
{
pm.SendLocalizedMessage(
1080454
); // Your guild cannot join a faction while in alliance with non-factioned guilds.
// Your guild cannot join a faction while in alliance with non-factioned guilds.
pm.SendLocalizedMessage(1080454);
}
else if (!CanHandleInflux(guild.Members.Count))
{
pm.SendLocalizedMessage(
1018031
); // In the interest of faction stability, this faction declines to accept new members for now.
// In the interest of faction stability, this faction declines to accept new members for now.
pm.SendLocalizedMessage(1018031);
}
else
{
@ -569,9 +564,8 @@ namespace Server.Factions
}
else if (!CanHandleInflux(1))
{
pm.SendLocalizedMessage(
1018031
); // In the interest of faction stability, this faction declines to accept new members for now.
// In the interest of faction stability, this faction declines to accept new members for now.
pm.SendLocalizedMessage(1018031);
}
else
{
@ -579,15 +573,7 @@ namespace Server.Factions
}
}
public bool IsCommander(Mobile mob)
{
if (mob == null)
{
return false;
}
return mob.AccessLevel >= AccessLevel.GameMaster || mob == Commander;
}
public bool IsCommander(Mobile mob) => mob != null && mob.AccessLevel >= AccessLevel.GameMaster || mob == Commander;
public override string ToString() => m_Definition.FriendlyName;
@ -1059,14 +1045,14 @@ namespace Server.Factions
else if (Sigil.ExistsOn(killer))
{
sigil.ReturnHome();
killer?.SendLocalizedMessage(
1010258
); // The sigil has gone back to its home location because you already have a sigil.
// The sigil has gone back to its home location because you already have a sigil.
killer?.SendLocalizedMessage(1010258);
}
else if (!killerPack.TryDropItem(killer, sigil, false))
{
sigil.ReturnHome();
killer?.SendLocalizedMessage(1010259); // The sigil has gone home because your backpack is full.
// The sigil has gone home because your backpack is full.
killer?.SendLocalizedMessage(1010259);
}
}
);
@ -1086,10 +1072,8 @@ namespace Server.Factions
if (silver > 0)
{
killer?.SendLocalizedMessage(
1042748,
silver.ToString("N0")
); // Thou hast earned ~1_AMOUNT~ silver for vanquishing the vile creature.
// Thou hast earned ~1_AMOUNT~ silver for vanquishing the vile creature.
killer?.SendLocalizedMessage(1042748, silver.ToString("N0"));
}
}
@ -1179,10 +1163,8 @@ namespace Server.Factions
if (silver > 0)
{
killer?.SendLocalizedMessage(
1042736,
$"{silver:N0} silver\t{victim.Name}"
); // You have earned ~1_SILVER_AMOUNT~ pieces for vanquishing ~2_PLAYER_NAME~!
// You have earned ~1_SILVER_AMOUNT~ pieces for vanquishing ~2_PLAYER_NAME~!
killer?.SendLocalizedMessage(1042736, $"{silver:N0} silver\t{victim.Name}");
}
}
@ -1193,14 +1175,11 @@ namespace Server.Factions
var args = $"{award}\t{victim.Name}\t{killer?.Name}";
killer?.SendLocalizedMessage(
1042737 + offset,
args
); // Thou hast been honored with ~1_KILL_POINTS~ kill point(s) for vanquishing ~2_DEAD_PLAYER~!
victim.SendLocalizedMessage(
1042738 + offset,
args
); // Thou has lost ~1_KILL_POINTS~ kill point(s) to ~3_ATTACKER_NAME~ for being vanquished!
// Thou hast been honored with ~1_KILL_POINTS~ kill point(s) for vanquishing ~2_DEAD_PLAYER~!
killer?.SendLocalizedMessage(1042737 + offset, args);
// Thou has lost ~1_KILL_POINTS~ kill point(s) to ~3_ATTACKER_NAME~ for being vanquished!
victim.SendLocalizedMessage(1042738 + offset, args);
var killerEPL = Player.Find(killer);
var victimEPL = Player.Find(victim);
@ -1227,9 +1206,8 @@ namespace Server.Factions
}
else
{
killer?.SendLocalizedMessage(
1042231
); // You have recently defeated this enemy and thus their death brings you no honor.
// You have recently defeated this enemy and thus their death brings you no honor.
killer?.SendLocalizedMessage(1042231);
}
}
}

View file

@ -18,7 +18,7 @@ namespace Server.Factions
pl.Mobile.SpeechHue,
true,
pl.KillPoints.ToString("N0")
); // NOTE: Added 'N0'
);
}
private static void EventSink_Speech(SpeechEventArgs e)
@ -133,22 +133,19 @@ namespace Server.Factions
}
else if (remaining.TotalHours >= 1)
{
from.SendLocalizedMessage(
1042741,
remaining.TotalHours
.ToString("N0")
); // Your term of service will come to an end in ~1_HOURS~ hours.
// Your term of service will come to an end in ~1_HOURS~ hours.
from.SendLocalizedMessage(1042741, remaining.TotalHours.ToString("N0"));
}
else
{
from.SendLocalizedMessage(
1042742
); // Your term of service will come to an end in less than one hour.
// Your term of service will come to an end in less than one hour.
from.SendLocalizedMessage(1042742);
}
}
else if (pl != null)
{
from.SendLocalizedMessage(1042233); // You are not in the process of quitting the faction.
// You are not in the process of quitting the faction.
from.SendLocalizedMessage(1042233);
}
break;
@ -164,9 +161,8 @@ namespace Server.Factions
if (from.AccessLevel == AccessLevel.Player && !faction.FactionMessageReady)
{
from.SendLocalizedMessage(
1010264
); // The required time has not yet passed since the last message was sent
// The required time has not yet passed since the last message was sent
from.SendLocalizedMessage(1010264);
}
else
{

View file

@ -213,33 +213,28 @@ namespace Server.Factions
if (remaining.TotalMinutes < 4)
{
m_From.SendLocalizedMessage(
1042165
); // You must wait a short while before changing prices again.
// You must wait a short while before changing prices again.
m_From.SendLocalizedMessage(1042165);
}
else if (remaining.TotalMinutes < 10)
{
m_From.SendLocalizedMessage(
1042166
); // You must wait several minutes before changing prices again.
// You must wait several minutes before changing prices again.
m_From.SendLocalizedMessage(1042166);
}
else if (remaining.TotalHours < 1)
{
m_From.SendLocalizedMessage(
1042167
); // You must wait up to an hour before changing prices again.
// You must wait up to an hour before changing prices again.
m_From.SendLocalizedMessage(1042167);
}
else if (remaining.TotalHours < 4)
{
m_From.SendLocalizedMessage(
1042168
); // You must wait a few hours before changing prices again.
// You must wait a few hours before changing prices again.
m_From.SendLocalizedMessage(1042168);
}
else
{
m_From.SendLocalizedMessage(
1042169
); // You must wait several hours before changing prices again.
// You must wait several hours before changing prices again.
m_From.SendLocalizedMessage(1042169);
}
}
else
@ -268,13 +263,13 @@ namespace Server.Factions
if (Town.FromRegion(m_From.Region) != m_Town)
{
m_From.SendLocalizedMessage(1010305); // You must be in your controlled city to buy Items
// You must be in your controlled city to buy Items
m_From.SendLocalizedMessage(1010305);
}
else if (vendorList.Vendors.Count >= vendorList.Definition.Maximum)
{
m_From.SendLocalizedMessage(
1010306
); // You currently have too many of this enhancement type to place another
// You currently have too many of this enhancement type to place another
m_From.SendLocalizedMessage(1010306);
}
else if (BaseBoat.FindBoatAt(m_From.Location, m_From.Map) != null)
{

View file

@ -26,14 +26,15 @@ namespace Server.Factions
15,
230,
60,
1018057,
1018057, // Are you sure you want your entire guild to leave this faction?
true,
true
); // Are you sure you want your entire guild to leave this faction?
);
}
else
{
AddHtmlLocalized(20, 15, 230, 60, 1018063, true, true); // Are you sure you want to leave this faction?
// Are you sure you want to leave this faction?s
AddHtmlLocalized(20, 15, 230, 60, 1018063, true, true);
}
AddHtmlLocalized(55, 80, 75, 20, 1011011); // CONTINUE
@ -72,9 +73,8 @@ namespace Server.Factions
}
else if (guild.Leader != m_From)
{
m_From.SendLocalizedMessage(
1005061
); // You cannot quit the faction because you are not the guild master
// You cannot quit the faction because you are not the guild master
m_From.SendLocalizedMessage(1005061);
}
else
{
@ -91,7 +91,8 @@ namespace Server.Factions
if (TimeSpan.FromDays(3.0) == Faction.LeavePeriod)
{
mob.SendLocalizedMessage(1005060); // Your guild will quit the faction in 3 days
// Your guild will quit the faction in 3 days
mob.SendLocalizedMessage(1005060);
}
else
{

View file

@ -142,9 +142,8 @@ namespace Server.Factions
}
else if (guardList.Guards.Count >= guardList.Definition.Maximum)
{
m_From.SendLocalizedMessage(
1010306
); // You currently have too many of this enhancement type to place another
// You currently have too many of this enhancement type to place another
m_From.SendLocalizedMessage(1010306);
}
else if (BaseBoat.FindBoatAt(m_From.Location, m_From.Map) != null)
{

View file

@ -54,9 +54,8 @@ namespace Server.Factions
{
if (m_Town.Sheriff != null)
{
m_From.SendLocalizedMessage(
1010342
); // You must fire your Sheriff before you can elect a new one
// You must fire your Sheriff before you can elect a new one
m_From.SendLocalizedMessage(1010342);
}
else
{
@ -70,9 +69,8 @@ namespace Server.Factions
{
if (m_Town.Finance != null)
{
m_From.SendLocalizedMessage(
1010345
); // You must fire your finance minister before you can elect a new one
// You must fire your finance minister before you can elect a new one
m_From.SendLocalizedMessage(1010345);
}
else
{
@ -86,7 +84,8 @@ namespace Server.Factions
{
if (m_Town.Sheriff == null)
{
m_From.SendLocalizedMessage(1010350); // You need to elect a sheriff before you can fire one
// You need to elect a sheriff before you can fire one
m_From.SendLocalizedMessage(1010350);
}
else
{
@ -101,9 +100,8 @@ namespace Server.Factions
{
if (m_Town.Finance == null)
{
m_From.SendLocalizedMessage(
1010352
); // You need to elect a financial minister before you can fire one
// You need to elect a financial minister before you can fire one
m_From.SendLocalizedMessage(1010352);
}
else
{
@ -147,7 +145,8 @@ namespace Server.Factions
}
else if (pl.Sheriff != null || pl.Finance != null)
{
from.SendLocalizedMessage(1005245); // You must pick someone who does not already hold a city post
// You must pick someone who does not already hold a city post
from.SendLocalizedMessage(1005245);
}
else
{
@ -190,7 +189,8 @@ namespace Server.Factions
}
else if (pl.Sheriff != null || pl.Finance != null)
{
from.SendLocalizedMessage(1005245); // You must pick someone who does not already hold a city post
// You must pick someone who does not already hold a city post
from.SendLocalizedMessage(1005245);
}
else
{

View file

@ -57,9 +57,8 @@ namespace Server.Factions
if (pl?.IsLeaving == true)
{
mobile.SendLocalizedMessage(
1005051
); // You cannot use the faction stone until you have finished quitting your current faction
// You cannot use the faction stone until you have finished quitting your current faction
mobile.SendLocalizedMessage(1005051);
}
else
{

View file

@ -37,9 +37,8 @@ namespace Server
return true;
}
from.SendLocalizedMessage(
1062927
); // You have eaten one of these recently and eating another would provide no benefit.
// You have eaten one of these recently and eating another would provide no benefit.
from.SendLocalizedMessage(1062927);
return false;
}

View file

@ -373,9 +373,8 @@ namespace Server.Factions
}
else if (m_Corrupted == null || m_Corrupted != Faction.Find(from))
{
from.SendLocalizedMessage(
1042244
); // Your faction did not corrupt this sigil. Take it to your stronghold.
// Your faction did not corrupt this sigil. Take it to your stronghold.
from.SendLocalizedMessage(1042244);
}
else
{

View file

@ -101,10 +101,8 @@ namespace Server.Factions
}
else
{
Placer.SendLocalizedMessage(
1042736,
$"{silverGiven} silver\t{from.Name}"
); // You have earned ~1_SILVER_AMOUNT~ pieces for vanquishing ~2_PLAYER_NAME~!
// You have earned ~1_SILVER_AMOUNT~ pieces for vanquishing ~2_PLAYER_NAME~!
Placer.SendLocalizedMessage(1042736, $"{silverGiven} silver\t{from.Name}");
}
}

View file

@ -79,9 +79,8 @@ namespace Server.Factions
}
else if (pl.Rank.Rank < 2)
{
from.SendLocalizedMessage(
1010368
); // You must achieve a faction rank of at least two before riding a war horse!
// You must achieve a faction rank of at least two before riding a war horse!
from.SendLocalizedMessage(1010368);
}
else
{

View file

@ -40,9 +40,9 @@ namespace Server.Factions
PrivateOverheadMessage(
MessageType.Regular,
0x3B2,
1042201,
1042201, // You are not in my faction, I cannot sell you a horse!
from.NetState
); // You are not in my faction, I cannot sell you a horse!
);
}
else if (FactionGump.Exists(from))
{

View file

@ -40,9 +40,8 @@ namespace Server.Engines.Harvest
if (obj?.Completed == false && obj.Ingredient == Ingredient.Bones)
{
player.SendLocalizedMessage(
1055037
); // You finish your grim work, finding some of the specific bones listed in the Hag's recipe.
// You finish your grim work, finding some of the specific bones listed in the Hag's recipe.
player.SendLocalizedMessage(1055037);
obj.Complete();
return;

View file

@ -117,21 +117,14 @@ namespace Server.Engines.Harvest
{
if (Utility.RandomDouble() < 0.5)
{
player.SendLocalizedMessage(
1055086,
"",
0x59
); // You pull a shellfish out of the water, and find a rainbow pearl inside of it.
// You pull a shellfish out of the water, and find a rainbow pearl inside of it.
player.SendLocalizedMessage(1055086, "", 0x59);
obj.CurProgress++;
}
else
{
player.SendLocalizedMessage(
1055087,
"",
0x2C
); // You pull a shellfish out of the water, but it doesn't have a rainbow pearl.
// You pull a shellfish out of the water, but it doesn't have a rainbow pearl.
player.SendLocalizedMessage(1055087, "", 0x2C);
}
return true;

View file

@ -161,9 +161,9 @@ namespace Server.Engines.Harvest
mobile.PrivateOverheadMessage(
MessageType.Regular,
0x3B2,
500450,
500450, // You can only skin dead creatures.
from.NetState
); // You can only skin dead creatures.
);
}
else if (toHarvest is Item item)
{

View file

@ -419,11 +419,8 @@ namespace Server.Engines.Help
{
if (from.Region.IsPartOf<JailRegion>())
{
from.SendLocalizedMessage(
1114345,
"",
0x35
); // You'll need a better jailbreak plan than that!
// You'll need a better jailbreak plan than that!
from.SendLocalizedMessage(1114345, "", 0x35);
}
else if (from.Region.IsPartOf("Haven Island"))
{

View file

@ -20,13 +20,8 @@ namespace Server.Engines.Help
AddPage(0);
AddHtmlLocalized(264, 80, 200, 24, 1062524); // Enter Description
AddHtmlLocalized(
120,
108,
420,
48,
1062638
); // Please enter a brief description (up to 200 characters) of your problem:
// Please enter a brief description (up to 200 characters) of your problem:
AddHtmlLocalized(120, 108, 420, 48, 1062638);
AddBackground(100, 148, 440, 200, 3500);
AddTextEntry(120, 168, 400, 200, 1153, 0, "");

View file

@ -93,15 +93,10 @@ namespace Server.Engines.Help
if (m_Entry.Sender.NetState != null && index != -1)
{
m_Entry.Sender.SendLocalizedMessage(
1008077,
true,
(index + 1).ToString()
); // Thank you for paging. Queue status :
m_Entry.Sender
.SendLocalizedMessage(
1008084
); // You can reference our website at www.uo.com or contact us at support@uo.com. To cancel your page, please select the help button again and select cancel.
// Thank you for paging. Queue status :
m_Entry.Sender.SendLocalizedMessage(1008077, true, (index + 1).ToString());
// You can reference our website at www.uo.com or contact us at support@uo.com. To cancel your page, please select the help button again and select cancel.
m_Entry.Sender.SendLocalizedMessage(1008084);
if (m_Entry.Handler != null && m_Entry.Handler.NetState == null)
{
@ -111,8 +106,6 @@ namespace Server.Engines.Help
else
{
if (index != -1)
// m_Entry.AddResponse(m_Entry.Sender, "[Logout]");
{
PageQueue.Remove(m_Entry);
}
@ -142,9 +135,8 @@ namespace Server.Engines.Help
if (pm.DesignContext != null)
{
from.SendLocalizedMessage(
500182
); // You cannot request help while customizing a house or transferring a character.
// You cannot request help while customizing a house or transferring a character.
from.SendLocalizedMessage(500182);
return false;
}
@ -159,17 +151,12 @@ namespace Server.Engines.Help
public static string GetPageTypeName(PageType type)
{
if (type == PageType.VerbalHarassment)
return type switch
{
return "Verbal Harassment";
}
if (type == PageType.PhysicalHarassment)
{
return "Physical Harassment";
}
return type.ToString();
PageType.VerbalHarassment => "Verbal Harassment",
PageType.PhysicalHarassment => "Physical Harassment",
_ => type.ToString()
};
}
public static void OnHandlerChanged(Mobile old, Mobile value, PageEntry entry)

View file

@ -19,17 +19,13 @@ namespace Server.Engines.Help
AddPage(0);
AddHtmlLocalized(150, 40, 360, 40, 1062610); // <CENTER><U>Ultima Online Help Response</U></CENTER>
// <CENTER><U>Ultima Online Help Response</U></CENTER>
AddHtmlLocalized(150, 40, 360, 40, 1062610);
AddHtml(80, 90, 480, 290, $"{name} tells {from.Name}: {text}", true, true);
AddHtmlLocalized(
80,
390,
480,
40,
1062611
); // Clicking the OKAY button will remove the reponse you have received.
// Clicking the OKAY button will remove the reponse you have received.
AddHtmlLocalized(80, 390, 480, 40, 1062611);
AddButton(400, 417, 2074, 2075, 1); // OKAY
AddButton(475, 417, 2073, 2072, 0); // CANCEL

View file

@ -351,11 +351,8 @@ namespace Server.Items
case 2:
{
to.PlaySound(0x223);
to.LocalOverheadMessage(
MessageType.Regular,
0x62,
1010525
); // Pain lances through thee from a sharp metal blade.
// Pain lances through thee from a sharp metal blade.
to.LocalOverheadMessage(MessageType.Regular, 0x62, 1010525);
AOS.Damage(to, to, Utility.RandomMinMax(10, 40), 100, 0, 0, 0, 0);
@ -364,7 +361,8 @@ namespace Server.Items
default:
{
to.BoltEffect(0);
to.LocalOverheadMessage(MessageType.Regular, 0xDA, 1010526); // Lightning arcs through thy body.
// Lightning arcs through thy body.
to.LocalOverheadMessage(MessageType.Regular, 0xDA, 1010526);
AOS.Damage(to, to, Utility.RandomMinMax(10, 40), 0, 0, 0, 0, 100);

View file

@ -13,22 +13,24 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1075287; // A Ghost of Covetous
Description =
1075286; // 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.
RefusalMessage =
1075288; // That's okay, I'm sure someone with more courage than either of us will come along eventually.
// 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.
CompletionMessage =
1075291; // (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!
// (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)));
Rewards.Add(
new DummyReward(
1075284
)
); // Return the filled Spirit Bottle to Griswolt the Master Necromancer to receive a reward.
// 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);
@ -67,11 +69,8 @@ namespace Server.Engines.MLQuests.Definitions
)
);
Rewards.Add(
new DummyReward(
1075339
)
); // Hurry! You must get the silk to Leon the Alchemist quickly, or it will crumble and become useless!
// 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);

View file

@ -149,9 +149,8 @@ namespace Server.Engines.MLQuests.Definitions
if (pm.Skills.Blacksmith.Base < 45.0) // TODO: Verify threshold
{
pm.SendLocalizedMessage(
1075005
); // You observe carefully but you can't grasp the complexities of smithing a bone handled machete.
// You observe carefully but you can't grasp the complexities of smithing a bone handled machete.
pm.SendLocalizedMessage(1075005);
}
else
{
@ -177,13 +176,8 @@ namespace Server.Engines.MLQuests.Definitions
CompletionMessage =
1074996; // I hear sloshing ... that must mean you've got my water samples. Whew, I'm so glad you braved the dangers in there ... I mean, I would have but I'm so busy out here. Here's your reward!
Objectives.Add(
new CollectObjective(
3,
typeof(SamplesOfCorruptedWater),
"samples of corrupted water"
)
); // On OSI the label is "#1074999"
// On OSI the label is "#1074999"
Objectives.Add(new CollectObjective(3, typeof(SamplesOfCorruptedWater), "samples of corrupted water"));
// TODO: "Return to" should say "Jamal (near Blighted Grove)"
// Maybe every quest NPC has directions as a property?
@ -272,9 +266,9 @@ namespace Server.Engines.MLQuests.Definitions
pm,
Utility.RandomList(
1074209, // Hey, could you help me out with something?
1074215
1074215 // Dont test my patience you sniveling worm!
)
); // Dont test my patience you sniveling worm!
);
}
public override void Serialize(IGenericWriter writer)

View file

@ -12,8 +12,9 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072244; // They're Breeding Like Rabbits
Description =
1072259; // Aaaahhhh! They're everywhere! Aaaaahhh! Ahem. Actually, friend, how do you feel about rabbits? Well, we're being overrun by them. We're finding fuzzy bunnies everywhere. Aaaaahhh!
// Aaaahhhh! They're everywhere! Aaaaahhh! Ahem. Actually, friend, how do you feel about rabbits?
// Well, we're being overrun by them. We're finding fuzzy bunnies everywhere. Aaaaahhh!
Description = 1072259;
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!
@ -131,8 +132,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072248; // They'll Eat Anything
Description =
1072262; // Pork is the fruit of the land! You can barbeque it, boil it, bake it, sautee it. There's pork kebabs, pork creole, pork gumbo, pan fried, deep fried, stir fried. There's apple pork, peppered pork, pork soup, pork salad, pork and potatoes, pork burger, pork sandwich, pork stew, pork chops, pork loins, shredded pork. So, lets get some piggies butchered!
// Pork is the fruit of the land! You can barbeque it, boil it, bake it, sautee it.
// There's pork kebabs, pork creole, pork gumbo, pan fried, deep fried, stir fried.
// There's apple pork, peppered pork, pork soup, pork salad, pork and potatoes, pork burger, pork sandwich,
// pork stew, pork chops, pork loins, shredded pork. So, lets get some piggies butchered!
Description = 1072262;
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!
@ -148,8 +152,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072251; // No Good, Fish Stealing ...
Description =
1072265; // Mighty creatures they are, aye. Fierce and strong, can't blame 'em for wanting to feed themselves an' all. Blame or no, they're eating all the fish up, so they got to go. Lend a hand?
// Mighty creatures they are, aye.
// Fierce and strong, can't blame 'em for wanting to feed themselves an' all.
// Blame or no, they're eating all the fish up, so they got to go. Lend a hand?
Description = 1072265;
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!
@ -165,8 +171,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072246; // A Hero in the Making
Description =
1072257; // Are you new around here? Well, nevermind that. You look ready for adventure, I can see the gleam of glory in your eyes! Nothing is more valiant, more noble, more praiseworthy than mongbat slaying.
// Are you new around here? Well, nevermind that.
// You look ready for adventure, I can see the gleam of glory in your eyes!
// Nothing is more valiant, more noble, more praiseworthy than mongbat slaying.
Description = 1072257;
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!
@ -182,8 +190,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072247; // Bullfighting ... Sort Of
Description =
1072254; // You there! Yes, you. Listen, I've got a little problem on my hands, but a brave, bold hero like yourself should find it a snap to solve. Bottom line -- we need some of the bulls in the area culled. You're welcome to any meat or hides, and of course, I'll give you a nice reward.
// You there! Yes, you. Listen, I've got a little problem on my hands, but a brave,
// bold hero like yourself should find it a snap to solve.
// Bottom line -- we need some of the bulls in the area culled.
// You're welcome to any meat or hides, and of course, I'll give you a nice reward.
Description = 1072254;
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!
@ -199,8 +210,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072243; // A Fine Feast.
Description =
1072261; // Mmm, I do love mutton! It's slaughtering time again and my usual hirelings haven't turned up. I've arranged for a butcher to come by and cut everything up but the basic sheep killing part I haven't gotten worked out yet. Are you up for the task?
// Mmm, I do love mutton! It's slaughtering time again and my usual hirelings haven't turned up.
// I've arranged for a butcher to come by and cut everything up but the basic sheep killing part
// I haven't gotten worked out yet. Are you up for the task?
Description = 1072261;
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!
@ -216,8 +229,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072250; // Forced Migration
Description =
1072264; // Chirp chirp ... tweet chirp. Tra la la. Bloody birds and their blasted noise. I've tried everything but they just won't stop that infernal clamor. Return me to blessed silence and I'll make it worth your while.
// Chirp chirp ... tweet chirp. Tra la la. Bloody birds and their blasted noise.
// I've tried everything but they just won't stop that infernal clamor.
// Return me to blessed silence and I'll make it worth your while.
Description = 1072264;
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!
@ -233,8 +248,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072242; // Filthy Pests!
Description =
1072253; // They're everywhere I tell you! They crawl in the walls, they scurry in the bushes. Disgusting critters. Say ... I don't suppose you're up for some sewer rat killing? Sewer rats now, not any other kind of squeaker will do.
// They're everywhere I tell you! They crawl in the walls, they scurry in the bushes.
// Disgusting critters. Say ... I don't suppose you're up for some sewer rat killing?
// Sewer rats now, not any other kind of squeaker will do.
Description = 1072253;
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!
@ -250,8 +267,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072983; // Dead Man Walking
Description =
1073009; // Why? I ask you why? They walk around after they're put in the ground. It's just wrong in so many ways. Put them to proper rest, I beg you. I'll find some way to pay you for the kindness. Just kill five zombies and five skeletons.
// Why? I ask you why? They walk around after they're put in the ground.
// It's just wrong in so many ways. Put them to proper rest, I beg you.
// I'll find some way to pay you for the kindness. Just kill five zombies and five skeletons.
Description = 1073009;
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!
@ -268,8 +287,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072996; // King of Bears
Description =
1073030; // A pity really. With the balance of nature awry, we have no choice but to accept the responsibility of making it all right. It's all a part of the circle of life, after all. So, yes, the grizzly bears are running rampant. There are far too many in the region. Will you shoulder your obligations as a higher life form?
// A pity really. With the balance of nature awry, we have no choice but to accept the responsibility
// of making it all right. It's all a part of the circle of life, after all. So, yes, the grizzly bears are
// running rampant. There are far too many in the region. Will you shoulder your obligations as a higher life form?
Description = 1073030;
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!
@ -285,8 +306,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072999; // Specimens
Description =
1073032; // I admire them, you know. The solen have their place -- regimented, organized. They're fascinating to watch with their constant strife between red and black. I can't help but want to stir things up from time to time. And that's where you come in. Kill either twelve red or twelve black solen workers and let's see what happens next!
// I admire them, you know. The solen have their place -- regimented, organized.
// They're fascinating to watch with their constant strife between red and black.
// I can't help but want to stir things up from time to time. And that's where you come in.
// Kill either twelve red or twelve black solen workers and let's see what happens next!
Description = 1073032;
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!
@ -305,9 +329,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073076; // Spirits
Description =
1073566; // It is a piteous thing when the dead continue to walk the earth. Restless spirits are known to inhabit these parts, taking the lives of unwary travelers. It is about time a hero put the dead back in their graves. I'm sure such a hero would be justly rewarded.
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
// It is a piteous thing when the dead continue to walk the earth.
// Restless spirits are known to inhabit these parts, taking the lives of unwary travelers.
// It is about time a hero put the dead back in their graves. I'm sure such a hero would be justly rewarded.
Description = 1073566;
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farewell.
InProgressMessage = 1073586; // The restless spirts still walk -- you must kill 15 of them.
Objectives.Add(
@ -328,8 +354,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073002; // Roll the Bones
Description =
1073011; // Why? I ask you why? They walk around after they're put in the ground. It's just wrong in so many ways. Put them to proper rest, I beg you. I'll find some way to pay you for the kindness. Just kill eight patchwork skeletons.
// Why? I ask you why? They walk around after they're put in the ground.
// It's just wrong in so many ways. Put them to proper rest, I beg you.
// I'll find some way to pay you for the kindness. Just kill eight patchwork skeletons.
Description = 1073011;
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!
@ -345,8 +373,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073008; // It's a Ghastly Job
Description =
1073012; // Why? I ask you why? They walk around after they're put in the ground. It's just wrong in so many ways. Put them to proper rest, I beg you. I'll find some way to pay you for the kindness. Just kill twelve ghouls.
// Why? I ask you why? They walk around after they're put in the ground.
// It's just wrong in so many ways. Put them to proper rest, I beg you.
// I'll find some way to pay you for the kindness. Just kill twelve ghouls.
Description = 1073012;
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!
@ -362,8 +392,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1074688; // Troglodytes!
Description =
1074689; // Oh nevermind, you don't look capable of my task afterall. Haha! What was I thinking - you could never handle killing troglodytes. It'd be suicide. What? I don't know, I don't want to be responsible ... well okay if you're really sure?
// Oh nevermind, you don't look capable of my task afterall.
// Haha! What was I thinking - you could never handle killing troglodytes.
// It'd be suicide. What? I don't know, I don't want to be responsible ... well okay if you're really sure?
Description = 1074689;
RefusalMessage = 1074690; // Probably the wiser course of action.
InProgressMessage = 1074691; // You still need to kill those troglodytes, remember?
@ -379,9 +411,12 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073075; // Unholy Knights
Description =
1073565; // Please, hear me kind traveler. You know when a knight falls, sometimes they are cursed to roam the earth as undead mockeries of their former glory? That is too grim a fate for even any knight to suffer! Please, put them out of their misery. I will offer you what payment I can if you will end the torment of these undead wretches.
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
// Please, hear me kind traveler. You know when a knight falls, sometimes they are cursed to roam the earth as
// undead mockeries of their former glory? That is too grim a fate for even any knight to suffer!
// Please, put them out of their misery.
// I will offer you what payment I can if you will end the torment of these undead wretches.
Description = 1073565;
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farewell.
InProgressMessage = 1073585; // Your task is not done. Continue putting the Skeleton and Bone Knights to rest.
Objectives.Add(
@ -402,11 +437,17 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1074738; // A Feather in Yer Cap
Description =
1074737; // I've seen how you strut about, as if you were something special. I have some news for you, you don't impress me at all. It's not enough to have a fancy hat you know. That may impress people in the big city, but not here. If you want a reputation you have to climb a mountain, slay some great beast, and then write about it. Trust me, it's a long process. The first step is doing a great feat. If I were you, I'd go pluck a feather from the harpy Saliva, that would give you a good start.
// I've seen how you strut about, as if you were something special.
// I have some news for you, you don't impress me at all. It's not enough to have a fancy hat you know.
// That may impress people in the big city, but not here. If you want a reputation you have to climb a mountain,
// slay some great beast, and then write about it. Trust me, it's a long process.
// The first step is doing a great feat. If I were you, I'd go pluck a feather from the harpy Saliva,
// that would give you a good start.
Description = 1074737;
RefusalMessage = 1074736; // The path to greatness isn't for everyone obviously.
InProgressMessage =
1074735; // If you're going to get anywhere in the adventuring game, you have to take some risks. A harpy, well, it's bad, but it's not a dragon.
// If you're going to get anywhere in the adventuring game, you have to take some risks.
// A harpy, well, it's bad, but it's not a dragon.
InProgressMessage = 1074735;
CompletionMessage = 1074734; // The hero returns from the glorious battle and - oh, such a small feather?
Objectives.Add(new CollectObjective(1, typeof(SalivasFeather), "Saliva's Feather"));
@ -421,13 +462,17 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1074726; // A Tale of Tail
Description =
1074727; // I've heard of you, adventurer. Your reputation is impressive, and now I'll put it to the test. This is not something I ask lightly, for this task is fraught with danger, but it is vital. Seek out the vile hydra Abscess, slay it, and return to me with it's tail.
// I've heard of you, adventurer. Your reputation is impressive, and now I'll put it to the test.
// This is not something I ask lightly, for this task is fraught with danger, but it is vital.
// Seek out the vile hydra Abscess, slay it, and return to me with it's tail.
Description = 1074727;
RefusalMessage = 1074728; // Well, the beast will still be there when you are ready I suppose.
InProgressMessage =
1074729; // Em, I thought I had explained already. Abscess, the hydra, you know? Lots of heads but just the one tail. I need the tail. I have my reasons. Go go go.
CompletionMessage =
1074730; // Ah, the tail. You did it! You know the rumours about dried ground hydra tail powder are all true? Thank you so much!
// Em, I thought I had explained already. Abscess, the hydra, you know? Lots of heads but just the one tail.
// I need the tail. I have my reasons. Go go go.
InProgressMessage = 1074729;
// Ah, the tail. You did it! You know the rumours about dried ground hydra tail powder are all true?\
// Thank you so much!
CompletionMessage = 1074730;
Objectives.Add(new CollectObjective(1, typeof(AbscessTail), "Abscess' Tail"));
@ -441,11 +486,13 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1074681; // A Trog and His Dog
Description =
1074680; // I don't know if you can handle it, but I'll give you a go at it. Troglodyte chief - name of Lurg and his mangy wolf pet need killing. Do the deed and I'll reward you.
// I don't know if you can handle it, but I'll give you a go at it.
// Troglodyte chief - name of Lurg and his mangy wolf pet need killing. Do the deed and I'll reward you.
Description = 1074680;
RefusalMessage = 1074655; // Perhaps I thought too highly of you.
InProgressMessage =
1074682; // The trog chief and his mutt should be easy enough to find. Just kill them and report back. Easy enough.
// The trog chief and his mutt should be easy enough to find. Just kill them and report back.
// Easy enough.
InProgressMessage = 1074682;
CompletionMessage = 1074683; // Not half bad. Here's your prize.
Objectives.Add(new KillObjective(1, new[] { typeof(Lurg) }, "Lurg"));
@ -461,8 +508,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072252; // Overpopulation
Description =
1072267; // I just can't bear it any longer. Sure, it's my job to thin the deer out so they don't overeat the area and starve themselves come winter time. Sure, I know we killed off the predators that would do this naturally so now we have to make up for it. But they're so graceful and innocent. I just can't do it. Will you?
// I just can't bear it any longer. Sure, it's my job to thin the deer out so they don't overeat the area and
// starve themselves come winter time. Sure, I know we killed off the predators that would do this naturally
// so now we have to make up for it. But they're so graceful and innocent. I just can't do it. Will you?
Description = 1072267;
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!
@ -478,8 +527,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1072245; // Wild Boar Cull
Description =
1072260; // A pity really. With the balance of nature awry, we have no choice but to accept the responsibility of making it all right. It's all a part of the circle of life, after all. So, yes, the boars are running rampant. There are far too many in the region. Will you shoulder your obligations as a higher life form?
// A pity really. With the balance of nature awry, we have no choice but to accept the responsibility of
// making it all right. It's all a part of the circle of life, after all. So, yes, the boars are running rampant.
// There are far too many in the region. Will you shoulder your obligations as a higher life form?
Description = 1072260;
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!
@ -495,8 +546,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073089; // It's Elemental
Description =
1073579; // The universe is all about balance my friend. Tip one end, you must balance the other. That's why I must ask you to kill not just one kind of elemental, but three kinds. Snuff out some Fire, douse a few Water, and crush some Earth elementals and I'll pay you for your trouble.
// The universe is all about balance my friend. Tip one end, you must balance the other.
// That's why I must ask you to kill not just one kind of elemental, but three kinds. Snuff out some Fire, douse
// a few Water, and crush some Earth elementals and I'll pay you for your trouble.
Description = 1073579;
RefusalMessage = 1073580; // I hope you'll reconsider. Until then, farwell.
InProgressMessage = 1073599; // Four of each, that's all I ask. Water, earth and fire.
@ -514,8 +567,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073656; // Circle of Life
Description =
1073695; // There's been a bumper crop of evil with the Bog Things in these parts, my friend. Though they are foul creatures, they are also most fecund. Slay one and you make the land more fertile. Even better, slay several and I will give you whatever coin I can spare.
// There's been a bumper crop of evil with the Bog Things in these parts, my friend.
// Though they are foul creatures, they are also most fecund. Slay one and you make the land more fertile.
// Even better, slay several and I will give you whatever coin I can spare.
Description = 1073695;
RefusalMessage = 1073733; // Perhaps you'll change your mind and return at some point.
InProgressMessage = 1073736; // Continue to seek and kill the Bog Things.
@ -1634,8 +1689,9 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073067; // Paroxysmus' Succubi
Description =
1074696; // The succubi that have congregated within the sinkhole to worship Paroxysmus pose a tremendous danger. Will you enter the lair and see to their destruction?
// The succubi that have congregated within the sinkhole to worship Paroxysmus pose a tremendous danger.
// Will you enter the lair and see to their destruction?
Description = 1074696;
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!
@ -1644,9 +1700,12 @@ namespace Server.Engines.MLQuests.Definitions
3,
new[] { typeof(Succubus) },
"succubi",
new QuestArea(1074806, "The Palace of Paroxysmus")
new QuestArea(
1074806, // The Palace of Paroxysmus
"The Palace of Paroxysmus"
)
)
); // The Palace of Paroxysmus
);
Rewards.Add(ItemReward.LargeBagOfTreasure);
}
@ -1658,8 +1717,9 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073068; // Paroxysmus' Moloch
Description =
1074695; // The moloch daemons that have congregated to worship Paroxysmus pose a tremendous danger. Will you enter the lair and see to their destruction?
// The moloch daemons that have congregated to worship Paroxysmus pose a tremendous danger.
// Will you enter the lair and see to their destruction?
Description = 1074695;
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!
@ -1682,8 +1742,9 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073069; // Paroxysmus' Daemons
Description =
1074694; // The daemons that have congregated to worship Paroxysmus pose a tremendous danger. Will you enter the lair and see to their destruction?
// The daemons that have congregated to worship Paroxysmus pose a tremendous danger.
// Will you enter the lair and see to their destruction?
Description = 1074694;
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!
@ -1706,8 +1767,9 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073070; // Paroxysmus' Arcane Daemons
Description =
1074697; // The arcane daemons that worship Paroxysmus pose a tremendous danger. Will you enter the lair and see to their destruction?
// The arcane daemons that worship Paroxysmus pose a tremendous danger.
// Will you enter the lair and see to their destruction?
Description = 1074697;
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!
@ -1730,8 +1792,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073062; // Caustic Combo
Description =
1074693; // Vile creatures have exited the sinkhole and begun terrorizing the surrounding area. The demons are bad enough, but the elementals are an abomination, their poisons seeping into the fertile ground here. Will you enter the sinkhole and put a stop to their depredations?
// Vile creatures have exited the sinkhole and begun terrorizing the surrounding area.
// The demons are bad enough, but the elementals are an abomination, their poisons seeping into the fertile ground here.
// Will you enter the sinkhole and put a stop to their depredations?
Description = 1074693;
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!
@ -1762,8 +1826,10 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073061; // Plague Lord
Description =
1074692; // Some of the most horrific creatures have slithered out of the sinkhole there and begun terrorizing the surrounding area. The plague creatures are one of the most destruction of the minions of Paroxysmus. Are you willing to do something about them?
// Some of the most horrific creatures have slithered out of the sinkhole there and begun terrorizing
// the surrounding area. The plague creatures are one of the most destruction of the minions of Paroxysmus.
// Are you willing to do something about them?
Description = 1074692;
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!
@ -1802,8 +1868,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073055; // Glassy Foe
Description =
1074669; // Good, you're here. The presence of a twisted creature deep under the earth near Nu'Jelm has corrupted the natural growth of crystals in that region. They've become infused with the twisting energy - they've come to a sort of life. This is an abomination that festers within Sosaria. You must eradicate the crystal lattice seekers.
// Good, you're here. The presence of a twisted creature deep under the earth near Nu'Jelm has corrupted the
// natural growth of crystals in that region. They've become infused with the twisting energy -
// they've come to a sort of life. This is an abomination that festers within Sosaria.
// You must eradicate the crystal lattice seekers.
Description = 1074669;
RefusalMessage = 1074671; // These abominations must not be permitted to fester!
InProgressMessage = 1074672; // You must not waste time. Do not suffer these crystalline abominations to live.
CompletionMessage = 1074673; // You have done well. Enjoy this reward.
@ -1827,8 +1896,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073053; // Daemonic Prism
Description =
1074668; // Good, you're here. The presence of a twisted creature deep under the earth near Nu'Jelm has corrupted the natural growth of crystals in that region. They've become infused with the twisting energy - they've come to a sort of life. This is an abomination that festers within Sosaria. You must eradicate the crystal daemons.
// Good, you're here.
// The presence of a twisted creature deep under the earth near Nu'Jelm has corrupted the natural growth of
// crystals in that region. They've become infused with the twisting energy - they've come to a sort of life.
// This is an abomination that festers within Sosaria. You must eradicate the crystal daemons.
Description = 1074668;
RefusalMessage = 1074671; // These abominations must not be permitted to fester!
InProgressMessage = 1074672; // You must not waste time. Do not suffer these crystalline abominations to live.
CompletionMessage = 1074673; // You have done well. Enjoy this reward.
@ -1852,8 +1924,11 @@ namespace Server.Engines.MLQuests.Definitions
{
Activated = true;
Title = 1073057; // Hailstorm
Description =
1074670; // Good, you're here. The presence of a twisted creature deep under the earth near Nu'Jelm has corrupted the natural growth of crystals in that region. They've become infused with the twisting energy - they've come to a sort of life. This is an abomination that festers within Sosaria. You must eradicate the crystal vortices.
// Good, you're here.
// The presence of a twisted creature deep under the earth near Nu'Jelm has corrupted the natural growth of
// crystals in that region. They've become infused with the twisting energy - they've come to a sort of life.
// This is an abomination that festers within Sosaria. You must eradicate the crystal vortices.
Description = 1074670;
RefusalMessage = 1074671; // These abominations must not be permitted to fester!
InProgressMessage = 1074672; // You must not waste time. Do not suffer these crystalline abominations to live.
CompletionMessage = 1074673; // You have done well. Enjoy this reward.
@ -1882,9 +1957,9 @@ namespace Server.Engines.MLQuests.Definitions
RefusalMessage = 1074671; // These abominations must not be permitted to fester!
InProgressMessage = 1074672; // You must not waste time. Do not suffer these crystalline abominations to live.
CompletionMessage = 1074673; // You have done well. Enjoy this reward.
Objectives.Add( new KillObjective( 3, new Type[] { typeof( CrystalHydra ) }, "crystal hydras", new QuestArea( 1074805, "The Prism of Light" ) ) ); // The Prism of Light
Rewards.Add( ItemReward.LargeBagOfTreasure );
}
}
@ -1901,9 +1976,9 @@ namespace Server.Engines.MLQuests.Definitions
RefusalMessage = 1074647; // How can you not feel as I do?
InProgressMessage = 1074648; // The lush and fertile land where Dread Horn now lives is twisted and tainted, a result of his corruption. The fey folk have sealed the land off through their magics, but you can enter through an enchanted mushroom fairy circle.
CompletionMessage = 1074649; // Thank you. I haven't the words to express my gratitude.
Objectives.Add( new KillObjective( 1, new Type[] { typeof( DreadHorn ) }, "dread horn" ) );
Rewards.Add( ItemReward.RewardStrongbox );
}
}
@ -1919,11 +1994,11 @@ namespace Server.Engines.MLQuests.Definitions
Description = 1072963; // I have a task for you ... adventurer. Will you risk all to win great renown? The Black Order is organized into three sects, each with their own speciality. The Dragon's Flame serves the will of the Grand Mage, the Tiger's Claw answers to the Master Thief, and the Serpent's Fang kills at the direction of the High Executioner. Slay all three and you will strike the order a devastating blow!
RefusalMessage = 1072973; // I do not fault your decision.
InProgressMessage = 1072974; // Once you gain entrance into The Citadel, you will need to move cautiously to find the sect leaders.
Objectives.Add( new KillObjective( 1, new Type[] { typeof( SerpentsFangHighExecutioner ) }, "serpent's fang high executioner", new QuestArea( 1074804, "The Citadel" ) ) ); // The Citadel
Objectives.Add( new KillObjective( 1, new Type[] { typeof( TigersClawThief ) }, "tiger's claw thief", new QuestArea( 1074804, "The Citadel" ) ) ); // The Citadel
Objectives.Add( new KillObjective( 1, new Type[] { typeof( DragonsFlameGrandMage ) }, "dragon's flame mage", new QuestArea( 1074804, "The Citadel" ) ) ); // The Citadel
Rewards.Add( ItemReward.RewardStrongbox );
}
}
@ -1939,10 +2014,10 @@ namespace Server.Engines.MLQuests.Definitions
Description = 1072969; // The Serpent's Fang sect members have gone too far! Express to them my displeasure by slaying ten of them. But remember, I do not condone war on women, so I will only accept the deaths of men, human and elf.
RefusalMessage = 1072979; // As you wish.
InProgressMessage = 1072980; // The Black Order's fortress home is well hidden. Legend has it that a humble fishing village disguises the magical portal.
// TODO: This has to be MALES only!
Objectives.Add( new KillObjective( 10, new Type[] { typeof( SerpentsFangAssassin ) }, "male serpent's fang assassins", new QuestArea( 1074804, "The Citadel" ) ) ); // The Citadel
Rewards.Add( ItemReward.BagOfTreasure );
}
}
@ -1958,10 +2033,10 @@ namespace Server.Engines.MLQuests.Definitions
Description = 1072966; // The Dragon's Flame sect members have gone too far! Express to them my displeasure by slaying ten of them. But remember, I do not condone war on women, so I will only accept the deaths of men, human or elf. Either race will do, I care not for the shape of their ears. Yes, this action will properly make clear my disapproval and has a pleasing harmony.
RefusalMessage = 1072979; // As you wish.
InProgressMessage = 1072980; // The Black Order's fortress home is well hidden. Legend has it that a humble fishing village disguises the magical portal.
// TODO: This has to be MALES only!
Objectives.Add( new KillObjective( 10, new Type[] { typeof( DragonsFlameMage ) }, "male dragon's flame mages", new QuestArea( 1074804, "The Citadel" ) ) ); // The Citadel
Rewards.Add( ItemReward.BagOfTreasure );
}
}
@ -2003,10 +2078,10 @@ namespace Server.Engines.MLQuests.Definitions
Description = 1072968; // The Tiger's Claw sect members have gone too far! Express to them my displeasure by slaying ten of them. But remember, I do not condone war on women, so I will only accept the deaths of men, human and elf.
RefusalMessage = 1072979; // As you wish.
InProgressMessage = 1072980; // The Black Order's fortress home is well hidden. Legend has it that a humble fishing village disguises the magical portal.
// TODO: This has to be MALES only!
Objectives.Add( new KillObjective( 10, new Type[] { typeof( TigersClawThief ) }, "male tiger's claw thieves", new QuestArea( 1074804, "The Citadel" ) ) ); // The Citadel
Rewards.Add( ItemReward.BagOfTreasure );
}
}
@ -2023,9 +2098,9 @@ namespace Server.Engines.MLQuests.Definitions
RefusalMessage = 1074655; // Perhaps I thought too highly of you.
InProgressMessage = 1074656; // An explorer discovered the cave system under Nu'Jelm. He made multiple trips into the place bringing back fascinating crystals and artifacts that suggested the hollow place in Sosaria was inhabited by other creatures at some point. You'll need to follow in his footsteps to find this abomination and destroy it.
CompletionMessage = 1074657; // I am overjoyed with your efforts! Your devotion to Sosaria is noted and appreciated.
Objectives.Add( new KillObjective( 1, new Type[] { typeof( ShimmeringEffusion ) }, "shimmering effusion" ) );
Rewards.Add( ItemReward.RewardStrongbox );
}
}

View file

@ -0,0 +1,285 @@
using System;
using System.Linq;
using Server.Engines.CannedEvil;
namespace Server.Mobiles
{
[PropertyObject]
public class ChampionTitleInfo
{
public const int LossAmount = 90;
public static TimeSpan LossDelay = TimeSpan.FromDays(1.0);
private TitleInfo[] m_Values;
public ChampionTitleInfo()
{
}
public ChampionTitleInfo(IGenericReader reader)
{
var version = reader.ReadEncodedInt();
switch (version)
{
case 0:
{
Harrower = reader.ReadEncodedInt();
var length = reader.ReadEncodedInt();
m_Values = new TitleInfo[length];
for (var i = 0; i < length; i++)
{
m_Values[i] = new TitleInfo(reader);
}
if (m_Values.Length != ChampionSpawnInfo.Table.Length)
{
var oldValues = m_Values;
m_Values = new TitleInfo[ChampionSpawnInfo.Table.Length];
for (var i = 0; i < m_Values.Length && i < oldValues.Length; i++)
{
m_Values[i] = oldValues[i];
}
}
break;
}
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int Pestilence
{
get => GetValue(ChampionSpawnType.Pestilence);
set => SetValue(ChampionSpawnType.Pestilence, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int Abyss
{
get => GetValue(ChampionSpawnType.Abyss);
set => SetValue(ChampionSpawnType.Abyss, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int Arachnid
{
get => GetValue(ChampionSpawnType.Arachnid);
set => SetValue(ChampionSpawnType.Arachnid, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int ColdBlood
{
get => GetValue(ChampionSpawnType.ColdBlood);
set => SetValue(ChampionSpawnType.ColdBlood, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int ForestLord
{
get => GetValue(ChampionSpawnType.ForestLord);
set => SetValue(ChampionSpawnType.ForestLord, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int SleepingDragon
{
get => GetValue(ChampionSpawnType.SleepingDragon);
set => SetValue(ChampionSpawnType.SleepingDragon, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int UnholyTerror
{
get => GetValue(ChampionSpawnType.UnholyTerror);
set => SetValue(ChampionSpawnType.UnholyTerror, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int VerminHorde
{
get => GetValue(ChampionSpawnType.VerminHorde);
set => SetValue(ChampionSpawnType.VerminHorde, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int Harrower { get; set; }
public int GetValue(ChampionSpawnType type) => GetValue((int)type);
public void SetValue(ChampionSpawnType type, int value)
{
SetValue((int)type, value);
}
public void Award(ChampionSpawnType type, int value)
{
Award((int)type, value);
}
public int GetValue(int index)
{
if (m_Values == null || index < 0 || index >= m_Values.Length)
{
return 0;
}
m_Values[index] ??= new TitleInfo();
return m_Values[index].Value;
}
public DateTime GetLastDecay(int index)
{
if (m_Values == null || index < 0 || index >= m_Values.Length)
{
return DateTime.MinValue;
}
m_Values[index] ??= new TitleInfo();
return m_Values[index].LastDecay;
}
public void SetValue(int index, int value)
{
m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
if (index < 0 || index >= m_Values.Length)
{
return;
}
m_Values[index] ??= new TitleInfo();
m_Values[index].Value = Math.Max(value, 0);
}
public void Award(int index, int value)
{
m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
if (index < 0 || index >= m_Values.Length || value <= 0)
{
return;
}
m_Values[index] ??= new TitleInfo();
m_Values[index].Value += value;
}
public void Atrophy(int index, int value)
{
m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
if (index < 0 || index >= m_Values.Length || value <= 0)
{
return;
}
m_Values[index] ??= new TitleInfo();
var before = m_Values[index].Value;
m_Values[index].Value -= Math.Min(value, m_Values[index].Value);
if (before != m_Values[index].Value)
{
m_Values[index].LastDecay = DateTime.UtcNow;
}
}
public override string ToString() => "...";
public static void Serialize(IGenericWriter writer, ChampionTitleInfo titles)
{
writer.WriteEncodedInt(0); // version
writer.WriteEncodedInt(titles.Harrower);
var length = titles.m_Values.Length;
writer.WriteEncodedInt(length);
for (var i = 0; i < length; i++)
{
titles.m_Values[i] ??= new TitleInfo();
TitleInfo.Serialize(writer, titles.m_Values[i]);
}
}
public static void CheckAtrophy(PlayerMobile pm)
{
var t = pm.ChampionTitles;
if (t == null)
{
return;
}
t.m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
for (var i = 0; i < t.m_Values.Length; i++)
{
if (t.GetLastDecay(i) + LossDelay < DateTime.UtcNow)
{
t.Atrophy(i, LossAmount);
}
}
}
public static void
AwardHarrowerTitle(PlayerMobile pm) // Called when killing a harrower. Will give a minimum of 1 point.
{
var t = pm.ChampionTitles;
if (t == null)
{
return;
}
t.m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
var count = 1 + t.m_Values.Count(t1 => t1.Value > 900);
t.Harrower = Math.Max(count, t.Harrower); // Harrower titles never decay.
}
private class TitleInfo
{
public TitleInfo()
{
}
public TitleInfo(IGenericReader reader)
{
var version = reader.ReadEncodedInt();
switch (version)
{
case 0:
{
Value = reader.ReadEncodedInt();
LastDecay = reader.ReadDateTime();
break;
}
}
}
public int Value { get; set; }
public DateTime LastDecay { get; set; }
public static void Serialize(IGenericWriter writer, TitleInfo info)
{
writer.WriteEncodedInt(0); // version
writer.WriteEncodedInt(info.Value);
writer.Write(info.LastDecay);
}
}
}
}

View file

@ -1420,10 +1420,8 @@ namespace Server.Mobiles
if (drop)
{
from.SendLocalizedMessage(
1062001,
weapon.Name ?? $"#{weapon.LabelNumber}"
); // You can no longer wield your ~1_WEAPON~
// You can no longer wield your ~1_WEAPON~
from.SendLocalizedMessage(1062001, weapon.Name ?? $"#{weapon.LabelNumber}");
from.AddToBackpack(weapon);
moved = true;
}
@ -1510,10 +1508,8 @@ namespace Server.Mobiles
if (drop)
{
from.SendLocalizedMessage(
1062002,
clothing.Name ?? $"#{clothing.LabelNumber}"
); // You can no longer wear your ~1_ARMOR~
// You can no longer wear your ~1_ARMOR~
from.SendLocalizedMessage(1062002, clothing.Name ?? $"#{clothing.LabelNumber}");
from.AddToBackpack(clothing);
moved = true;
@ -3638,15 +3634,8 @@ namespace Server.Mobiles
{
ascii = true;
if (pl.MerchantTitle != MerchantTitle.None)
{
text =
$"({MerchantTitles.GetInfo(pl.MerchantTitle).Title.String}, {faction.Definition.FriendlyName})";
}
else
{
text = $"({pl.Rank.Title.String}, {faction.Definition.FriendlyName})";
}
var title = MerchantTitles.GetInfo(pl.MerchantTitle)?.Title?.String ?? pl.Rank.Title.String;
text = $"({title}, {faction.Definition.FriendlyName})";
}
var hue = Faction.Find(from) == faction ? 98 : 38;
@ -4116,9 +4105,8 @@ namespace Server.Mobiles
if (from.Backpack == null || item.Parent != from.Backpack)
{
SendLocalizedMessage(
1074769
); // An item must be in your backpack (and not in a container within) to be toggled as a quest item.
// An item must be in your backpack (and not in a container within) to be toggled as a quest item.
SendLocalizedMessage(1074769);
}
else if (item.QuestItem)
{
@ -4131,7 +4119,8 @@ namespace Server.Mobiles
}
else
{
SendLocalizedMessage(1072355, "", 0x23); // That item does not match any of your quest criteria
// That item does not match any of your quest criteria
SendLocalizedMessage(1072355, "", 0x23);
}
ToggleQuestItemTarget();
@ -4201,9 +4190,9 @@ namespace Server.Mobiles
{
if (Young && (DuelContext?.Started != true || DuelContext.Finished))
{
SendLocalizedMessage(
502808
); // You would have been poisoned, were you not new to the land of Britannia. Be careful in the future.
// You would have been poisoned, were you not new to the land of Britannia.
// Be careful in the future.
SendLocalizedMessage(502808);
}
else
{
@ -4243,10 +4232,8 @@ namespace Server.Mobiles
{
if (Young && SkillsTotal >= 4500)
{
((Account)Account)
?.RemoveYoungStatus(
1019036
); // You have successfully obtained a respectable skill level, and have outgrown your status as a young player!
// You have successfully obtained a respectable skill level, and have outgrown your status as a young player!
((Account)Account)?.RemoveYoungStatus(1019036);
}
if (MLQuestSystem.Enabled)
@ -4488,9 +4475,9 @@ namespace Server.Mobiles
if (DateTime.UtcNow - m_LastYoungMessage > TimeSpan.FromMinutes(1.0))
{
m_LastYoungMessage = DateTime.UtcNow;
SendLocalizedMessage(
1019067
); // A monster looks at you menacingly but does not attack. You would be under attack now if not for your status as a new citizen of Britannia.
// A monster looks at you menacingly but does not attack.
// You would be under attack now if not for your status as a new citizen of Britannia.
SendLocalizedMessage(1019067);
}
return true;
@ -4604,11 +4591,13 @@ namespace Server.Mobiles
if (DisplayChampionTitle)
{
SendLocalizedMessage(1062419, "", 0x23); // You have chosen to hide your monster kill title.
// You have chosen to hide your monster kill title.
SendLocalizedMessage(1062419, "", 0x23);
}
else
{
SendLocalizedMessage(1062418, "", 0x23); // You have chosen to display your monster kill title.
// You have chosen to display your monster kill title.
SendLocalizedMessage(1062418, "", 0x23);
}
DisplayChampionTitle = !DisplayChampionTitle;
@ -4801,11 +4790,8 @@ namespace Server.Mobiles
if (info.ButtonID == 1)
{
m_Player.SendLocalizedMessage(
1061075,
"",
0x23
); // You have cancelled automatically reinsuring all insured items upon death
// You have cancelled automatically reinsuring all insured items upon death
m_Player.SendLocalizedMessage(1061075, "", 0x23);
m_Player.AutoRenewInsurance = false;
}
else
@ -5068,284 +5054,5 @@ namespace Server.Mobiles
}
}
}
[PropertyObject]
public class ChampionTitleInfo
{
public const int LossAmount = 90;
public static TimeSpan LossDelay = TimeSpan.FromDays(1.0);
private TitleInfo[] m_Values;
public ChampionTitleInfo()
{
}
public ChampionTitleInfo(IGenericReader reader)
{
var version = reader.ReadEncodedInt();
switch (version)
{
case 0:
{
Harrower = reader.ReadEncodedInt();
var length = reader.ReadEncodedInt();
m_Values = new TitleInfo[length];
for (var i = 0; i < length; i++)
{
m_Values[i] = new TitleInfo(reader);
}
if (m_Values.Length != ChampionSpawnInfo.Table.Length)
{
var oldValues = m_Values;
m_Values = new TitleInfo[ChampionSpawnInfo.Table.Length];
for (var i = 0; i < m_Values.Length && i < oldValues.Length; i++)
{
m_Values[i] = oldValues[i];
}
}
break;
}
}
}
[CommandProperty(AccessLevel.GameMaster)]
public int Pestilence
{
get => GetValue(ChampionSpawnType.Pestilence);
set => SetValue(ChampionSpawnType.Pestilence, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int Abyss
{
get => GetValue(ChampionSpawnType.Abyss);
set => SetValue(ChampionSpawnType.Abyss, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int Arachnid
{
get => GetValue(ChampionSpawnType.Arachnid);
set => SetValue(ChampionSpawnType.Arachnid, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int ColdBlood
{
get => GetValue(ChampionSpawnType.ColdBlood);
set => SetValue(ChampionSpawnType.ColdBlood, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int ForestLord
{
get => GetValue(ChampionSpawnType.ForestLord);
set => SetValue(ChampionSpawnType.ForestLord, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int SleepingDragon
{
get => GetValue(ChampionSpawnType.SleepingDragon);
set => SetValue(ChampionSpawnType.SleepingDragon, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int UnholyTerror
{
get => GetValue(ChampionSpawnType.UnholyTerror);
set => SetValue(ChampionSpawnType.UnholyTerror, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int VerminHorde
{
get => GetValue(ChampionSpawnType.VerminHorde);
set => SetValue(ChampionSpawnType.VerminHorde, value);
}
[CommandProperty(AccessLevel.GameMaster)]
public int Harrower { get; set; }
public int GetValue(ChampionSpawnType type) => GetValue((int)type);
public void SetValue(ChampionSpawnType type, int value)
{
SetValue((int)type, value);
}
public void Award(ChampionSpawnType type, int value)
{
Award((int)type, value);
}
public int GetValue(int index)
{
if (m_Values == null || index < 0 || index >= m_Values.Length)
{
return 0;
}
m_Values[index] ??= new TitleInfo();
return m_Values[index].Value;
}
public DateTime GetLastDecay(int index)
{
if (m_Values == null || index < 0 || index >= m_Values.Length)
{
return DateTime.MinValue;
}
m_Values[index] ??= new TitleInfo();
return m_Values[index].LastDecay;
}
public void SetValue(int index, int value)
{
m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
if (index < 0 || index >= m_Values.Length)
{
return;
}
m_Values[index] ??= new TitleInfo();
m_Values[index].Value = Math.Max(value, 0);
}
public void Award(int index, int value)
{
m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
if (index < 0 || index >= m_Values.Length || value <= 0)
{
return;
}
m_Values[index] ??= new TitleInfo();
m_Values[index].Value += value;
}
public void Atrophy(int index, int value)
{
m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
if (index < 0 || index >= m_Values.Length || value <= 0)
{
return;
}
m_Values[index] ??= new TitleInfo();
var before = m_Values[index].Value;
m_Values[index].Value -= Math.Min(value, m_Values[index].Value);
if (before != m_Values[index].Value)
{
m_Values[index].LastDecay = DateTime.UtcNow;
}
}
public override string ToString() => "...";
public static void Serialize(IGenericWriter writer, ChampionTitleInfo titles)
{
writer.WriteEncodedInt(0); // version
writer.WriteEncodedInt(titles.Harrower);
var length = titles.m_Values.Length;
writer.WriteEncodedInt(length);
for (var i = 0; i < length; i++)
{
titles.m_Values[i] ??= new TitleInfo();
TitleInfo.Serialize(writer, titles.m_Values[i]);
}
}
public static void CheckAtrophy(PlayerMobile pm)
{
var t = pm.ChampionTitles;
if (t == null)
{
return;
}
t.m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
for (var i = 0; i < t.m_Values.Length; i++)
{
if (t.GetLastDecay(i) + LossDelay < DateTime.UtcNow)
{
t.Atrophy(i, LossAmount);
}
}
}
public static void
AwardHarrowerTitle(PlayerMobile pm) // Called when killing a harrower. Will give a minimum of 1 point.
{
var t = pm.ChampionTitles;
if (t == null)
{
return;
}
t.m_Values ??= new TitleInfo[ChampionSpawnInfo.Table.Length];
var count = 1 + t.m_Values.Count(t1 => t1.Value > 900);
t.Harrower = Math.Max(count, t.Harrower); // Harrower titles never decay.
}
private class TitleInfo
{
public TitleInfo()
{
}
public TitleInfo(IGenericReader reader)
{
var version = reader.ReadEncodedInt();
switch (version)
{
case 0:
{
Value = reader.ReadEncodedInt();
LastDecay = reader.ReadDateTime();
break;
}
}
}
public int Value { get; set; }
public DateTime LastDecay { get; set; }
public static void Serialize(IGenericWriter writer, TitleInfo info)
{
writer.WriteEncodedInt(0); // version
writer.WriteEncodedInt(info.Value);
writer.Write(info.LastDecay);
}
}
}
}
}

View file

@ -341,7 +341,7 @@ namespace Server.Mobiles
if (ds.m_HasRight && ds.m_Mobile is PlayerMobile mobile)
{
PlayerMobile.ChampionTitleInfo.AwardHarrowerTitle(mobile);
ChampionTitleInfo.AwardHarrowerTitle(mobile);
}
}