fix: Fixes TextDefinition and optimizes CraftItem (#930)

This commit is contained in:
Kamron Batman 2022-02-12 22:42:50 -08:00 • committed by GitHub
parent 202c4a99b7
commit d7786ce586
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
27 changed files with 138 additions and 173 deletions

View file

@ -24,7 +24,7 @@ namespace Server.Engines.Craft
private readonly BaseTool m_Tool;
public CraftGump(
Mobile from, CraftSystem craftSystem, BaseTool tool, object notice, CraftPage page = CraftPage.None
Mobile from, CraftSystem craftSystem, BaseTool tool, TextDefinition notice, CraftPage page = CraftPage.None
) : base(40, 40)
{
m_From = from;
@ -48,13 +48,13 @@ namespace Server.Engines.Craft
AddImageTiled(215, 37, 305, 250, 2624);
AddAlphaRegion(10, 10, 510, 417);
if (craftSystem.GumpTitleNumber > 0)
if (craftSystem.GumpTitle.Number > 0)
{
AddHtmlLocalized(10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor);
AddHtmlLocalized(10, 12, 510, 20, craftSystem.GumpTitle.Number, LabelColor);
}
else
{
AddHtml(10, 12, 510, 20, craftSystem.GumpTitleString);
AddHtml(10, 12, 510, 20, craftSystem.GumpTitle.String);
}
AddHtmlLocalized(10, 37, 200, 22, 1044010, LabelColor); // <CENTER>CATEGORIES</CENTER>
@ -106,20 +106,20 @@ namespace Server.Engines.Craft
}
// ****************************************
if (notice is int noticeInt && noticeInt > 0)
if (notice.Number > 0)
{
AddHtmlLocalized(170, 295, 350, 40, noticeInt, LabelColor);
AddHtmlLocalized(170, 295, 350, 40, notice.Number, LabelColor);
}
else if (notice is string)
else
{
AddHtml(170, 295, 350, 40, $"<BASEFONT COLOR=#{FontColor:X6}>{notice}</BASEFONT>");
AddHtml(170, 295, 350, 40, $"<BASEFONT COLOR=#{FontColor:X6}>{notice.String}</BASEFONT>");
}
// If the system has more than one resource
if (craftSystem.CraftSubRes.Init)
{
var nameString = craftSystem.CraftSubRes.NameString;
var nameNumber = craftSystem.CraftSubRes.NameNumber;
var nameString = craftSystem.CraftSubRes.Name.String;
var nameNumber = craftSystem.CraftSubRes.Name.Number;
var resIndex = context?.LastResourceIndex ?? -1;
@ -129,8 +129,8 @@ namespace Server.Engines.Craft
{
var subResource = craftSystem.CraftSubRes.GetAt(resIndex);
nameString = subResource.NameString;
nameNumber = subResource.NameNumber;
nameString = subResource.Name.String;
nameNumber = subResource.Name.Number;
resourceType = subResource.ItemType;
}
@ -162,8 +162,8 @@ namespace Server.Engines.Craft
// For dragon scales
if (craftSystem.CraftSubRes2.Init)
{
var nameString = craftSystem.CraftSubRes2.NameString;
var nameNumber = craftSystem.CraftSubRes2.NameNumber;
var nameString = craftSystem.CraftSubRes2.Name.String;
var nameNumber = craftSystem.CraftSubRes2.Name.Number;
var resIndex = context?.LastResourceIndex2 ?? -1;
@ -173,8 +173,8 @@ namespace Server.Engines.Craft
{
var subResource = craftSystem.CraftSubRes2.GetAt(resIndex);
nameString = subResource.NameString;
nameNumber = subResource.NameNumber;
nameString = subResource.Name.String;
nameNumber = subResource.Name.Number;
resourceType = subResource.ItemType;
}
@ -270,21 +270,21 @@ namespace Server.Engines.Craft
AddButton(220, 60 + index * 20, 4005, 4007, GetButtonID(5, i));
if (subResource.NameNumber > 0)
if (subResource.Name.Number > 0)
{
AddHtmlLocalized(
255,
63 + index * 20,
250,
18,
subResource.NameNumber,
subResource.Name.Number,
resourceCount.ToString(),
LabelColor
);
}
else
{
AddLabel(255, 60 + index * 20, LabelHue, $"{subResource.NameString} ({resourceCount})");
AddLabel(255, 60 + index * 20, LabelHue, $"{subResource.Name.String} ({resourceCount})");
}
}
}

View file

@ -58,13 +58,13 @@ namespace Server.Engines.Craft
AddHtmlLocalized(10, 277, 150, 22, 1044055, LabelColor); // <CENTER>MATERIALS</CENTER>
AddHtmlLocalized(10, 362, 150, 22, 1044056, LabelColor); // <CENTER>OTHER</CENTER>
if (craftSystem.GumpTitleNumber > 0)
if (craftSystem.GumpTitle.Number > 0)
{
AddHtmlLocalized(10, 12, 510, 20, craftSystem.GumpTitleNumber, LabelColor);
AddHtmlLocalized(10, 12, 510, 20, craftSystem.GumpTitle.Number, LabelColor);
}
else
{
AddHtml(10, 12, 510, 20, craftSystem.GumpTitleString);
AddHtml(10, 12, 510, 20, craftSystem.GumpTitle.String);
}
AddButton(15, 387, 4014, 4016, 0);
@ -230,15 +230,11 @@ namespace Server.Engines.Craft
for (var i = 0; i < m_CraftItem.Resources.Count - (cropScroll ? 1 : 0) && i < 4; i++)
{
Type type;
string nameString;
int nameNumber;
var craftResource = m_CraftItem.Resources[i];
type = craftResource.ItemType;
nameString = craftResource.NameString;
nameNumber = craftResource.NameNumber;
var type = craftResource.ItemType;
var nameString = craftResource.Name.String;
var nameNumber = craftResource.Name.Number;
// Resource Mutation
if (type == res.ResType && resIndex > -1)
@ -247,12 +243,12 @@ namespace Server.Engines.Craft
type = subResource.ItemType;
nameString = subResource.NameString;
nameString = subResource.Name.String;
nameNumber = subResource.GenericNameNumber;
if (nameNumber <= 0)
{
nameNumber = subResource.NameNumber;
nameNumber = subResource.Name.Number;
}
}
// ******************

View file

@ -279,7 +279,7 @@ namespace Server.Engines.Craft
Skills.Add(craftSkill);
}
public bool ConsumeAttributes(Mobile from, ref object message, bool consume)
public bool ConsumeAttributes(Mobile from, ref TextDefinition message, bool consume)
{
bool consumMana;
bool consumHits;
@ -393,7 +393,7 @@ namespace Server.Engines.Craft
return inResourceTable;
}
public bool Find(Mobile from, int[] itemIDs)
public static bool Find(Mobile from, int[] itemIDs)
{
var map = from.Map;
@ -474,6 +474,7 @@ namespace Server.Engines.Craft
throw new ArgumentOutOfRangeException(nameof(types));
}
// TODO: Optimize allocation
var items = new Item[types.Length][];
var totals = new int[types.Length];
@ -576,13 +577,13 @@ namespace Server.Engines.Craft
public bool ConsumeRes(
Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount,
ConsumeType consumeType, ref object message
ConsumeType consumeType, ref TextDefinition message
) =>
ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, consumeType, ref message, false);
public bool ConsumeRes(
Mobile from, Type typeRes, CraftSystem craftSystem, ref int resHue, ref int maxAmount,
ConsumeType consumeType, ref object message, bool isFailure
ConsumeType consumeType, ref TextDefinition message, bool isFailure
)
{
var ourPack = from.Backpack;
@ -662,13 +663,13 @@ namespace Server.Engines.Craft
{
res = Resources[i];
if (res.MessageNumber > 0)
if (res.Message.Number > 0)
{
message = res.MessageNumber;
message = res.Message.Number;
}
else if (!string.IsNullOrEmpty(res.MessageString))
else if (!string.IsNullOrEmpty(res.Message.String))
{
message = res.MessageString;
message = res.Message.String;
}
else
{
@ -720,10 +721,12 @@ namespace Server.Engines.Craft
{
index = -1;
var isQuantityType = IsQuantityType(types);
// TODO: Optimize this
for (var i = 0; i < types.Length; i++)
{
var quantity = IsQuantityType(types)
var quantity = isQuantityType
? GetQuantity(ourPack, types[i])
: ourPack.GetBestGroupAmount(types[i], true, CheckHueGrouping);
@ -772,13 +775,13 @@ namespace Server.Engines.Craft
res = Resources[index];
if (res.MessageNumber > 0)
if (res.Message.Number > 0)
{
message = res.MessageNumber;
message = res.Message.Number;
}
else if (!string.IsNullOrEmpty(res.MessageString))
else if (!string.IsNullOrEmpty(res.Message.String))
{
message = res.MessageString;
message = res.Message.String;
}
else
{
@ -975,7 +978,7 @@ namespace Server.Engines.Craft
var resHue = 0;
var maxAmount = 0;
object message = null;
TextDefinition message = null;
if (!ConsumeRes(from, typeRes, craftSystem, ref resHue, ref maxAmount, ConsumeType.None, ref message))
{
@ -1036,7 +1039,7 @@ namespace Server.Engines.Craft
}
int checkResHue = 0, checkMaxAmount = 0;
object checkMessage = null;
TextDefinition checkMessage = null;
// Not enough resource to craft it
if (!(ConsumeRes(
@ -1054,13 +1057,13 @@ namespace Server.Engines.Craft
{
from.SendGump(new CraftGump(from, craftSystem, tool, checkMessage));
}
else if (checkMessage is int messageInt && messageInt > 0)
else if (checkMessage.Number > 0)
{
from.SendLocalizedMessage(messageInt);
from.SendLocalizedMessage(checkMessage.Number);
}
else
{
from.SendMessage(checkMessage.ToString());
from.SendMessage(checkMessage.String);
}
return;
@ -1072,7 +1075,7 @@ namespace Server.Engines.Craft
var endquality = 1;
var resHue = 0;
var maxAmount = 0;
object message = null;
TextDefinition message = null;
var num = 0;
if (CheckSkills(from, typeRes, craftSystem, ref ignored, out var allRequiredSkills))
@ -1085,13 +1088,13 @@ namespace Server.Engines.Craft
{
from.SendGump(new CraftGump(from, craftSystem, tool, message));
}
else if (message is int messageIn && messageIn > 0)
else if (message.Number > 0)
{
from.SendLocalizedMessage(messageIn);
from.SendLocalizedMessage(message.Number);
}
else
{
from.SendMessage(message.ToString());
from.SendMessage(message.String);
}
return;
@ -1265,13 +1268,13 @@ namespace Server.Engines.Craft
{
from.SendGump(new CraftGump(from, craftSystem, tool, message));
}
else if (message is int messageInt && messageInt > 0)
else if (message.Number > 0)
{
from.SendLocalizedMessage(messageInt);
from.SendLocalizedMessage(message.Number);
}
else
{
from.SendMessage(message.ToString());
from.SendMessage(message.String);
}
return;

View file

@ -9,34 +9,27 @@ namespace Server.Engines.Craft
ItemType = type;
Amount = amount;
NameNumber = name;
MessageNumber = message;
NameString = name;
MessageString = message;
Name = name;
Message = message;
}
public Type ItemType { get; }
public string MessageString { get; }
public TextDefinition Message { get; }
public int MessageNumber { get; }
public string NameString { get; }
public int NameNumber { get; }
public TextDefinition Name { get; }
public int Amount { get; }
public void SendMessage(Mobile from)
{
if (MessageNumber > 0)
if (Message.Number > 0)
{
from.SendLocalizedMessage(MessageNumber);
from.SendLocalizedMessage(Message.Number);
}
else if (!string.IsNullOrEmpty(MessageString))
else if (!string.IsNullOrEmpty(Message.String))
{
from.SendMessage(MessageString);
from.SendMessage(Message.String);
}
else
{

View file

@ -4,7 +4,7 @@ namespace Server.Engines.Craft
{
public class CraftSubRes
{
public CraftSubRes(Type type, TextDefinition name, double reqSkill, object message) : this(
public CraftSubRes(Type type, TextDefinition name, double reqSkill, TextDefinition message) : this(
type,
name,
reqSkill,
@ -14,11 +14,10 @@ namespace Server.Engines.Craft
{
}
public CraftSubRes(Type type, TextDefinition name, double reqSkill, int genericNameNumber, object message)
public CraftSubRes(Type type, TextDefinition name, double reqSkill, int genericNameNumber, TextDefinition message)
{
ItemType = type;
NameNumber = name;
NameString = name;
Name = name;
RequiredSkill = reqSkill;
GenericNameNumber = genericNameNumber;
Message = message;
@ -26,13 +25,11 @@ namespace Server.Engines.Craft
public Type ItemType { get; }
public string NameString { get; }
public int NameNumber { get; }
public TextDefinition Name { get; }
public int GenericNameNumber { get; }
public object Message { get; }
public TextDefinition Message { get; }
public double RequiredSkill { get; }
}

View file

@ -11,9 +11,7 @@ namespace Server.Engines.Craft
public Type ResType { get; set; }
public string NameString { get; set; }
public int NameNumber { get; set; }
public TextDefinition Name { get; set; }
public CraftSubRes GetAt(int index) => this[index];

View file

@ -50,8 +50,7 @@ namespace Server.Engines.Craft
public abstract SkillName MainSkill { get; }
public virtual int GumpTitleNumber => 0;
public virtual string GumpTitleString => "";
public virtual TextDefinition GumpTitle => 0;
public virtual CraftECA ECA => CraftECA.ChanceMinusSixty;
@ -269,65 +268,39 @@ namespace Server.Engines.Craft
CraftItems[index].ForceNonExceptional = true;
}
public void SetSubRes(Type type, string name)
public void SetSubRes(Type type, TextDefinition name)
{
CraftSubRes.ResType = type;
CraftSubRes.NameString = name;
CraftSubRes.Name = name;
CraftSubRes.Init = true;
}
public void SetSubRes(Type type, int name)
{
CraftSubRes.ResType = type;
CraftSubRes.NameNumber = name;
CraftSubRes.Init = true;
}
public void AddSubRes(Type type, int name, double reqSkill, object message)
{
var craftSubRes = new CraftSubRes(type, name, reqSkill, message);
CraftSubRes.Add(craftSubRes);
}
public void AddSubRes(Type type, int name, double reqSkill, int genericName, object message)
public void AddSubRes(Type type, TextDefinition name, double reqSkill, int genericName, TextDefinition message)
{
var craftSubRes = new CraftSubRes(type, name, reqSkill, genericName, message);
CraftSubRes.Add(craftSubRes);
}
public void AddSubRes(Type type, string name, double reqSkill, object message)
public void AddSubRes(Type type, TextDefinition name, double reqSkill, TextDefinition message)
{
var craftSubRes = new CraftSubRes(type, name, reqSkill, message);
CraftSubRes.Add(craftSubRes);
}
public void SetSubRes2(Type type, string name)
public void SetSubRes2(Type type, TextDefinition name)
{
CraftSubRes2.ResType = type;
CraftSubRes2.NameString = name;
CraftSubRes2.Name = name;
CraftSubRes2.Init = true;
}
public void SetSubRes2(Type type, int name)
{
CraftSubRes2.ResType = type;
CraftSubRes2.NameNumber = name;
CraftSubRes2.Init = true;
}
public void AddSubRes2(Type type, int name, double reqSkill, object message)
{
var craftSubRes = new CraftSubRes(type, name, reqSkill, message);
CraftSubRes2.Add(craftSubRes);
}
public void AddSubRes2(Type type, int name, double reqSkill, int genericName, object message)
public void AddSubRes2(Type type, TextDefinition name, double reqSkill, int genericName, TextDefinition message)
{
var craftSubRes = new CraftSubRes(type, name, reqSkill, genericName, message);
CraftSubRes2.Add(craftSubRes);
}
public void AddSubRes2(Type type, string name, double reqSkill, object message)
public void AddSubRes2(Type type, TextDefinition name, double reqSkill, TextDefinition message)
{
var craftSubRes = new CraftSubRes(type, name, reqSkill, message);
CraftSubRes2.Add(craftSubRes);

View file

@ -22,7 +22,7 @@ namespace Server.Engines.Craft
{
public static EnhanceResult Invoke(
Mobile from, CraftSystem craftSystem, BaseTool tool, Item item,
CraftResource resource, Type resType, ref object resMessage
CraftResource resource, Type resType, ref TextDefinition resMessage
)
{
if (item == null)
@ -410,7 +410,7 @@ namespace Server.Engines.Craft
{
if (targeted is Item item)
{
object message = null;
TextDefinition message = null;
var res = Enhance.Invoke(
from,
m_CraftSystem,

View file

@ -15,7 +15,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Alchemy;
public override int GumpTitleNumber => 1044001;
public override TextDefinition GumpTitle => 1044001;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefAlchemy();

View file

@ -28,7 +28,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Blacksmith;
public override int GumpTitleNumber => 1044002;
public override TextDefinition GumpTitle => 1044002;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefBlacksmithy();

View file

@ -13,7 +13,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Fletching;
public override int GumpTitleNumber => 1044006;
public override TextDefinition GumpTitle => 1044006;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefBowFletching();

View file

@ -13,7 +13,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Carpentry;
public override int GumpTitleNumber => 1044004;
public override TextDefinition GumpTitle => 1044004;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefCarpentry();

View file

@ -13,7 +13,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Cartography;
public override int GumpTitleNumber => 1044008;
public override TextDefinition GumpTitle => 1044008;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefCartography();

View file

@ -13,7 +13,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Cooking;
public override int GumpTitleNumber => 1044003;
public override TextDefinition GumpTitle => 1044003;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefCooking();

View file

@ -14,7 +14,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Alchemy;
public override int GumpTitleNumber => 1044622;
public override TextDefinition GumpTitle => 1044622;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefGlassblowing();

View file

@ -35,7 +35,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Inscribe;
public override int GumpTitleNumber => 1044009;
public override TextDefinition GumpTitle => 1044009;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefInscription();

View file

@ -14,7 +14,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Carpentry;
public override int GumpTitleNumber => 1044500;
public override TextDefinition GumpTitle => 1044500;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefMasonry();

View file

@ -21,7 +21,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Tailoring;
public override int GumpTitleNumber => 1044005; // Tailoring Menu
public override TextDefinition GumpTitle => 1044005; // Tailoring Menu
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefTailoring();

View file

@ -29,7 +29,7 @@ namespace Server.Engines.Craft
public override SkillName MainSkill => SkillName.Tinkering;
public override int GumpTitleNumber => 1044007;
public override TextDefinition GumpTitle => 1044007;
public static CraftSystem CraftSystem => m_CraftSystem ??= new DefTinkering();