Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
70
Scripts/Services/Armor Refinement/ArmorRefiner.cs
Normal file
70
Scripts/Services/Armor Refinement/ArmorRefiner.cs
Normal file
@@ -0,0 +1,70 @@
|
||||
using Server;
|
||||
using System;
|
||||
using Server.Items;
|
||||
using System.Collections.Generic;
|
||||
using Server.Gumps;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class ArmorRefiner : BaseVendor
|
||||
{
|
||||
private RefinementCraftType m_RefineType;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementCraftType RefineType { get { return m_RefineType; } set { m_RefineType = value; } }
|
||||
|
||||
private List<SBInfo> m_SBInfos = new List<SBInfo>();
|
||||
protected override List<SBInfo> SBInfos { get { return m_SBInfos; } }
|
||||
|
||||
public override void InitSBInfo()
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public ArmorRefiner(RefinementCraftType type) : base("the armor refiner")
|
||||
{
|
||||
m_RefineType = type;
|
||||
|
||||
SetSkill(SkillName.ArmsLore, 36.0, 68.0);
|
||||
AddItem(new HalfApron());
|
||||
|
||||
switch (m_RefineType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith:
|
||||
AddItem(new SmithHammer());
|
||||
SetSkill(SkillName.Blacksmith, 65.0, 88.0);
|
||||
break;
|
||||
case RefinementCraftType.Tailor:
|
||||
SetSkill(SkillName.Tailoring, 60.0, 83.0);
|
||||
break;
|
||||
case RefinementCraftType.Carpenter:
|
||||
SetSkill(SkillName.Carpentry, 61.0, 93.0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if(from.InRange(this.Location, 10))
|
||||
from.SendGump(new RefinementHelpGump(m_RefineType));
|
||||
}
|
||||
|
||||
public ArmorRefiner(Serial serial) : base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
writer.Write((int)m_RefineType);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
m_RefineType = (RefinementCraftType)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
313
Scripts/Services/Armor Refinement/Gumps.cs
Normal file
313
Scripts/Services/Armor Refinement/Gumps.cs
Normal file
@@ -0,0 +1,313 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Network;
|
||||
using System.Collections.Generic;
|
||||
using Server.Targeting;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Gumps
|
||||
{
|
||||
public class RefinementGump : Gump
|
||||
{
|
||||
public const int DarkGreen = 10000;
|
||||
public const int White = 0x7FFF;
|
||||
public const int WhiteLabel = 0xFFFFFF;
|
||||
public const int Yellow = 0xFFE0;
|
||||
|
||||
private RefinementItem m_Item;
|
||||
private ModEntry m_Entry;
|
||||
private bool m_CanRefine;
|
||||
|
||||
public RefinementGump(RefinementItem item) : base(50, 50)
|
||||
{
|
||||
m_Item = item;
|
||||
m_Entry = item.Entry;
|
||||
|
||||
if (m_Entry == null)
|
||||
return;
|
||||
|
||||
AddBackground(0, 0, 400, 350, 83);
|
||||
|
||||
int y = 70;
|
||||
m_CanRefine = true;
|
||||
|
||||
AddHtmlLocalized(10, 10, 200, 20, 1154094, DarkGreen, false, false); // Refinement Crafting Options
|
||||
AddHtmlLocalized(10, 35, 200, 20, 1153967, m_Item.GetNameArgs(), DarkGreen, false, false);
|
||||
|
||||
for (int i = 0; i < m_Item.ModAmount; i++)
|
||||
{
|
||||
AddButton(15, y, 4005, 4007, i + 100, GumpButtonType.Reply, 0);
|
||||
|
||||
AddHtmlLocalized(55, y, 150, 16, 1154097 + i, WhiteLabel, false, false); // CHOOSE RESIST #1
|
||||
AddHtmlLocalized(230, y, 150, 16, GetResistanceLabel(m_Entry.Resists[i], m_Entry.Values[i]), WhiteLabel, false, false);
|
||||
|
||||
if (!m_Item.CheckBonus && i == m_Item.ModAmount - 1 && m_Item.GetBonusChance() > 0)
|
||||
{
|
||||
if (Utility.Random(100) <= m_Item.GetBonusChance())
|
||||
m_Item.ModAmount++;
|
||||
|
||||
m_Item.CheckBonus = true;
|
||||
}
|
||||
|
||||
if (m_CanRefine && m_Entry.Values[i] == 0)
|
||||
m_CanRefine = false;
|
||||
|
||||
y += 20;
|
||||
}
|
||||
|
||||
y += 50;
|
||||
|
||||
AddHtmlLocalized(10, y, 150, 16, 1154106, Yellow, false, false); // MODIFICATIONS:
|
||||
AddHtmlLocalized(170, y, 10, 16, 1114057, m_Item.ModAmount.ToString(), Yellow, false, false);
|
||||
|
||||
if (m_CanRefine)
|
||||
{
|
||||
AddHtmlLocalized(230, y, 150, 16, 1154105, WhiteLabel, false, false); // REFINE ITEM
|
||||
AddButton(360, y, 4014, 4016, 1, GumpButtonType.Reply, 0);
|
||||
}
|
||||
else
|
||||
AddHtmlLocalized(230, y, 150, 16, 1154108, WhiteLabel, false, false); // SELECT RESISTS
|
||||
|
||||
y += 25;
|
||||
|
||||
AddHtmlLocalized(10, y, 200, 16, 1154107, WhiteLabel, false, false); // BONUS MOD CHANCE:
|
||||
AddHtmlLocalized(170, y, 15, 16, 1114057, m_Item.GetBonusChance().ToString() + "%", WhiteLabel, false, false);
|
||||
|
||||
AddButton(10, 320, 4017, 4019, 0, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(50, 320, 100, 16, 3002084, WhiteLabel, false, false); // Close
|
||||
|
||||
AddHtmlLocalized(250, 320, 100, 16, 3000391, WhiteLabel, false, false); // Help
|
||||
AddButton(360, 320, 4011, 4013, 2, GumpButtonType.Reply, 0);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState state, RelayInfo info)
|
||||
{
|
||||
Mobile from = state.Mobile;
|
||||
|
||||
if (info.ButtonID == 1) // Refine Item
|
||||
{
|
||||
if (m_CanRefine)
|
||||
{
|
||||
from.Target = new InternalTarget(m_Item);
|
||||
from.SendLocalizedMessage(1153985); // Target the armor you wish to apply this Refinement.
|
||||
}
|
||||
}
|
||||
else if (info.ButtonID == 2)
|
||||
{
|
||||
from.SendGump(new RefinementHelpGump(m_Item.CraftType));
|
||||
}
|
||||
else if (info.ButtonID >= 100) // Choose Resist
|
||||
{
|
||||
int i = info.ButtonID - 100;
|
||||
ResistanceType oldType = m_Entry.Resists[i];
|
||||
int value = (int)oldType;
|
||||
|
||||
if (value == 4) value = 0;
|
||||
else value++;
|
||||
|
||||
ResistanceType newType = (ResistanceType)value;
|
||||
|
||||
m_Entry.Resists[i] = newType;
|
||||
m_Entry.Values[i] = m_Item.RefinementType == RefinementType.Reinforcing ? 1 : -1;
|
||||
|
||||
for (int idx = 0; idx < m_Entry.Resists.Length; idx++)
|
||||
{
|
||||
if (idx != i && m_Entry.Resists[idx] == newType)
|
||||
{
|
||||
m_Entry.Resists[idx] = oldType;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
from.SendGump(new RefinementGump(m_Item));
|
||||
}
|
||||
}
|
||||
|
||||
private class InternalTarget : Target
|
||||
{
|
||||
private RefinementItem m_Item;
|
||||
private ModEntry m_Entry;
|
||||
|
||||
public InternalTarget(RefinementItem item) : base(-1, false, TargetFlags.None)
|
||||
{
|
||||
m_Item = item;
|
||||
m_Entry = item.Entry;
|
||||
}
|
||||
|
||||
protected override void OnTarget(Mobile from, object targeted)
|
||||
{
|
||||
if (m_Item == null || m_Item.Deleted)
|
||||
return;
|
||||
|
||||
if (targeted is BaseArmor)
|
||||
{
|
||||
BaseArmor armor = targeted as BaseArmor;
|
||||
|
||||
if (!armor.IsChildOf(from.Backpack))
|
||||
from.SendLocalizedMessage(1054107); // This item must be in your backpack.
|
||||
else if (armor.ArmorAttributes.MageArmor > 0)
|
||||
from.SendLocalizedMessage(1153986); // You cannot refine this piece of armor!
|
||||
else if (!RefinementGump.CanApplyToArmor(from, armor, m_Item))
|
||||
from.SendLocalizedMessage(1153987); // The type of armor you have selected is not compatible with this Refinement Tool.
|
||||
else if(RefinementItem.CheckForVendor(from, m_Item))
|
||||
{
|
||||
//Resets old refinement if it exists
|
||||
armor.RefinedPhysical = 0;
|
||||
armor.RefinedFire = 0;
|
||||
armor.RefinedCold = 0;
|
||||
armor.RefinedPoison = 0;
|
||||
armor.RefinedEnergy = 0;
|
||||
|
||||
for (int i = 0; i < m_Item.ModAmount; i++)
|
||||
{
|
||||
if (i < 0 || i >= m_Entry.Resists.Length)
|
||||
continue;
|
||||
|
||||
int value = i < m_Entry.Values.Length ? m_Entry.Values[i] : 0;
|
||||
|
||||
switch (m_Entry.Resists[i])
|
||||
{
|
||||
case ResistanceType.Physical: armor.RefinedPhysical += value; break;
|
||||
case ResistanceType.Fire: armor.RefinedFire += value; break;
|
||||
case ResistanceType.Cold: armor.RefinedCold += value; break;
|
||||
case ResistanceType.Poison: armor.RefinedPoison += value; break;
|
||||
case ResistanceType.Energy: armor.RefinedEnergy += value; break;
|
||||
}
|
||||
}
|
||||
|
||||
from.PrivateOverheadMessage(MessageType.Regular, 0, 1153980, from.NetState); // *You carefully apply the Refinement to the armor*
|
||||
m_Item.Delete();
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
from.SendLocalizedMessage(1153991); // You can only refine non-medable armor.
|
||||
|
||||
from.SendGump(new RefinementGump(m_Item));
|
||||
}
|
||||
}
|
||||
|
||||
public int GetResistanceLabel(ResistanceType attr, int value)
|
||||
{
|
||||
if(value == 0)
|
||||
return 1062648; // None Selected
|
||||
|
||||
switch (attr)
|
||||
{
|
||||
default:
|
||||
case ResistanceType.Physical: return 1061158;
|
||||
case ResistanceType.Fire: return 1061159;
|
||||
case ResistanceType.Cold: return 1061160;
|
||||
case ResistanceType.Poison: return 1061161;
|
||||
case ResistanceType.Energy: return 1061162;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool CanApplyToArmor(Mobile from, BaseArmor armor, RefinementItem item)
|
||||
{
|
||||
switch (item.SubCraftType)
|
||||
{
|
||||
case RefinementSubCraftType.StuddedLeather:
|
||||
return armor is StuddedBustierArms || armor is StuddedArms || armor is StuddedChest || armor is StuddedGloves || armor is StuddedGorget || armor is StuddedLegs;
|
||||
case RefinementSubCraftType.StuddedSamurai:
|
||||
return armor is StuddedDo || armor is StuddedHaidate || armor is StuddedHiroSode || armor is StuddedMempo || armor is StuddedSuneate;
|
||||
case RefinementSubCraftType.Hide:
|
||||
return armor is HideChest || armor is HideFemaleChest || armor is HideGloves || armor is HideGorget || armor is HidePants || armor is HidePauldrons;
|
||||
case RefinementSubCraftType.Bone:
|
||||
return armor is BoneArms || armor is BoneChest || armor is BoneGloves || armor is BoneLegs;
|
||||
case RefinementSubCraftType.Ringmail:
|
||||
return armor is RingmailArms || armor is RingmailChest || armor is RingmailGloves || armor is RingmailLegs;
|
||||
case RefinementSubCraftType.Chainmail:
|
||||
return armor is ChainChest || armor is ChainLegs || armor is ChainCoif;
|
||||
case RefinementSubCraftType.Platemail:
|
||||
return armor is FemalePlateChest || armor is PlateArms || armor is PlateChest || armor is PlateGloves || armor is PlateGorget || armor is PlateLegs || armor is PlateHelm || armor is Bascinet || armor is CloseHelm || armor is Helmet;
|
||||
case RefinementSubCraftType.PlatemailSamurai:
|
||||
return armor is DecorativePlateKabuto || armor is HeavyPlateJingasa || armor is LightPlateJingasa || armor is PlateBattleKabuto || armor is PlateDo || armor is PlateHaidate || armor is PlateHatsuburi || armor is PlateHiroSode
|
||||
|| armor is PlateMempo || armor is PlateSuneate || armor is SmallPlateJingasa || armor is StandardPlateKabuto;
|
||||
case RefinementSubCraftType.GargishPlatemail:
|
||||
return armor is GargishPlateArms || armor is GargishPlateChest || armor is GargishPlateKilt || armor is GargishPlateLegs || armor is FemaleGargishPlateArms || armor is FemaleGargishPlateLegs || armor is FemaleGargishPlateChest || armor is FemaleGargishPlateKilt;
|
||||
case RefinementSubCraftType.Dragon:
|
||||
return armor is DragonArms || armor is DragonChest || armor is DragonGloves || armor is DragonHelm || armor is DragonLegs;
|
||||
case RefinementSubCraftType.Woodland:
|
||||
return armor is WoodlandArms || armor is WoodlandChest || armor is WoodlandGloves || armor is WoodlandGorget || armor is WoodlandLegs;
|
||||
case RefinementSubCraftType.GargishStone:
|
||||
return armor is GargishStoneArms || armor is GargishStoneChest || armor is GargishStoneLegs || armor is GargishStoneKilt || armor is FemaleGargishStoneArms || armor is FemaleGargishStoneChest || armor is FemaleGargishStoneLegs || armor is FemaleGargishStoneKilt;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public class RefinementHelpGump : Gump
|
||||
{
|
||||
public RefinementHelpGump(RefinementCraftType type)
|
||||
: base(50, 50)
|
||||
{
|
||||
AddImageTiled(50, 20, 400, 400, 0x1404);
|
||||
AddImageTiled(50, 29, 30, 390, 0x28DC);
|
||||
AddImageTiled(34, 140, 17, 279, 0x242F);
|
||||
AddImage(48, 135, 0x28AB);
|
||||
AddImage(-16, 285, 0x28A2);
|
||||
AddImage(0, 10, 0x28B5);
|
||||
AddImage(25, 0, 0x28B4);
|
||||
AddImageTiled(83, 15, 350, 15, 0x280A);
|
||||
AddImage(34, 419, 0x2842);
|
||||
AddImage(442, 419, 0x2840);
|
||||
AddImageTiled(51, 419, 392, 17, 0x2775);
|
||||
AddImageTiled(415, 29, 44, 390, 0xA2D);
|
||||
AddImageTiled(415, 29, 30, 390, 0x28DC);
|
||||
AddImage(370, 50, 0x589);
|
||||
|
||||
AddImage(379, 60, 0x15A9);
|
||||
AddImage(425, 0, 0x28C9);
|
||||
AddImage(90, 33, 0x232D);
|
||||
AddImageTiled(130, 65, 175, 1, 0x238D);
|
||||
|
||||
AddPage(0);
|
||||
int cliloc = 0;
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith: cliloc = 1153992; break;
|
||||
case RefinementCraftType.Tailor: cliloc = 1153993; break;
|
||||
case RefinementCraftType.Carpenter: cliloc = 1153994; break;
|
||||
}
|
||||
|
||||
AddHtmlLocalized(130, 45, 270, 16, 1154001, 0xFFFFFF, false, false); // Armor Refinement
|
||||
|
||||
AddButton( 313, 395, 0x2EEC, 0x2EEE, 0, GumpButtonType.Reply, 0 );
|
||||
|
||||
AddPage(1);
|
||||
|
||||
AddHtmlLocalized(98, 140, 312, 105, cliloc, 0xFFFFFF, false, true);
|
||||
|
||||
AddButton(98, 255, 9904, 9905, 1, GumpButtonType.Page, 2);
|
||||
AddHtmlLocalized(125, 255, 250, 20, 1153995, 0xFFFFFF, false, false); // What is an Armor Refinement?
|
||||
|
||||
AddButton(98, 275, 9904, 9905, 1, GumpButtonType.Page, 3);
|
||||
AddHtmlLocalized(125, 275, 250, 20, 1153996, 0xFFFFFF, false, false); // Where can I find components?
|
||||
|
||||
AddButton(98, 295, 9904, 9905, 1, GumpButtonType.Page, 4);
|
||||
AddHtmlLocalized(125, 295, 250, 20, 1153997, 0xFFFFFF, false, false); // What raw materials do I need to use?
|
||||
|
||||
AddButton(98, 315, 9904, 9905, 1, GumpButtonType.Page, 5);
|
||||
AddHtmlLocalized(125, 315, 250, 20, 1154006, 0xFFFFFF, false, false); // Where can I find raw materials?
|
||||
|
||||
AddPage(2);
|
||||
|
||||
AddHtmlLocalized(98, 140, 312, 205, 1153998, 0xFFFFFF, false, true);
|
||||
|
||||
AddPage(3);
|
||||
|
||||
AddHtmlLocalized(98, 140, 312, 205, 1153999, 0xFFFFFF, false, true);
|
||||
|
||||
AddPage(4);
|
||||
|
||||
AddHtmlLocalized(98, 140, 312, 205, 1154000, 0xFFFFFF, false, true);
|
||||
|
||||
AddPage(5);
|
||||
|
||||
AddHtmlLocalized(98, 140, 312, 205, 1154007, 0xFFFFFF, false, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
705
Scripts/Services/Armor Refinement/Items.cs
Normal file
705
Scripts/Services/Armor Refinement/Items.cs
Normal file
@@ -0,0 +1,705 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Network;
|
||||
using Server.Gumps;
|
||||
using Server.Mobiles;
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public enum RefinementType
|
||||
{
|
||||
Reinforcing,
|
||||
Deflecting
|
||||
}
|
||||
|
||||
public enum RefinementCraftType
|
||||
{
|
||||
Blacksmith,
|
||||
Tailor,
|
||||
Carpenter
|
||||
}
|
||||
|
||||
public enum ModType
|
||||
{
|
||||
Defense,
|
||||
Protection,
|
||||
Hardening,
|
||||
Fortification,
|
||||
Invulnerability
|
||||
}
|
||||
|
||||
public enum RefinementSubCraftType
|
||||
{
|
||||
StuddedLeather,
|
||||
StuddedSamurai,
|
||||
Hide,
|
||||
Bone,
|
||||
Ringmail,
|
||||
Chainmail,
|
||||
Platemail,
|
||||
PlatemailSamurai,
|
||||
GargishPlatemail,
|
||||
Dragon,
|
||||
Woodland,
|
||||
GargishStone
|
||||
}
|
||||
|
||||
public class RefinementComponent : Item
|
||||
{
|
||||
private RefinementType m_RefinementType;
|
||||
private RefinementCraftType m_CraftType;
|
||||
private RefinementSubCraftType m_SubCraftType;
|
||||
private ModType m_ModType;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementType RefinementType
|
||||
{
|
||||
get { return m_RefinementType; }
|
||||
set
|
||||
{
|
||||
m_RefinementType = value;
|
||||
GetItemID();
|
||||
GetHue();
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementCraftType CraftType
|
||||
{
|
||||
get { return m_CraftType; }
|
||||
set
|
||||
{
|
||||
RefinementCraftType old = m_CraftType;
|
||||
|
||||
m_CraftType = value;
|
||||
|
||||
if (old != m_CraftType)
|
||||
GetSubCraftType();
|
||||
|
||||
GetItemID();
|
||||
GetHue();
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementSubCraftType SubCraftType { get { return m_SubCraftType; } set { m_SubCraftType = value; } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public ModType ModType { get { return m_ModType; } set { m_ModType = value; InvalidateProperties(); } }
|
||||
|
||||
[Constructable]
|
||||
public RefinementComponent()
|
||||
: this(RefinementType.Reinforcing, RefinementCraftType.Blacksmith, ModType.Defense)
|
||||
{
|
||||
}
|
||||
|
||||
public RefinementComponent(RefinementType type, RefinementCraftType craftType, ModType modType)
|
||||
: base(0)
|
||||
{
|
||||
m_RefinementType = type;
|
||||
m_CraftType = craftType;
|
||||
GetSubCraftType();
|
||||
m_ModType = modType;
|
||||
GetItemID();
|
||||
GetHue();
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
list.Add(1153966, String.Format("#{0}\t#{1}", Labels[(int)m_RefinementType][(int)m_CraftType], GetModLabel())); // ~1_OBJTYPE~ ~2_BONUSLEVEL~
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1154002, String.Format("#{0}", 1153954 + (int)m_SubCraftType)); // Armor Type: ~1_TYPE~
|
||||
list.Add(1154124, String.Format("#{0}", m_RefinementType == RefinementType.Reinforcing ? 1154123 : 1154122)); // Bonus Type: ~1_TYPE~
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if(!IsChildOf(from.Backpack) || from.Backpack == null)
|
||||
from.SendLocalizedMessage(1054107); // This item must be in your backpack.
|
||||
else if(!CheckSkill(from))
|
||||
from.SendLocalizedMessage(1153981, m_CraftType.ToString()); // Only a Grandmaster ~1_PROFESSION~ would know what to do with this.
|
||||
else if(!from.Backpack.ConsumeTotal(GetRawMaterial(), 20))
|
||||
from.SendLocalizedMessage(1153978); // You lack the required quantity of raw materials to craft the Armor Refinement.
|
||||
else
|
||||
{
|
||||
from.Backpack.DropItem(new RefinementItem(m_RefinementType, m_CraftType, m_SubCraftType, m_ModType));
|
||||
from.PrivateOverheadMessage(MessageType.Regular, 0, 1153979, from.NetState); // *You carefully and skillfully craft an Armor Refinement* TODO Hue???
|
||||
|
||||
Consume();
|
||||
}
|
||||
}
|
||||
|
||||
private void GetHue()
|
||||
{
|
||||
if (m_RefinementType == RefinementType.Reinforcing)
|
||||
{
|
||||
switch (m_CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith: Hue = 2967; break;
|
||||
case RefinementCraftType.Tailor: Hue = 2587; break;
|
||||
case RefinementCraftType.Carpenter: Hue = 0; break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
switch (m_CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith: Hue = 2506; break;
|
||||
case RefinementCraftType.Tailor: Hue = 2952; break;
|
||||
case RefinementCraftType.Carpenter: Hue = 2119; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private bool CheckSkill(Mobile from)
|
||||
{
|
||||
SkillName check = SkillName.Blacksmith;
|
||||
|
||||
switch (m_CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith: break;
|
||||
case RefinementCraftType.Tailor: check = SkillName.Tailoring; break;
|
||||
case RefinementCraftType.Carpenter: check = SkillName.Carpentry; break;
|
||||
}
|
||||
|
||||
return from.Skills[check].Value >= 100;
|
||||
}
|
||||
|
||||
private Type GetRawMaterial()
|
||||
{
|
||||
switch (m_CraftType)
|
||||
{
|
||||
default:
|
||||
case RefinementCraftType.Blacksmith: return typeof(MalleableAlloy);
|
||||
case RefinementCraftType.Tailor: return typeof(LeatherBraid);
|
||||
case RefinementCraftType.Carpenter: return typeof(SolventFlask);
|
||||
}
|
||||
}
|
||||
|
||||
public void GetSubCraftType()
|
||||
{
|
||||
switch (m_CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith:
|
||||
m_SubCraftType = (RefinementSubCraftType)Utility.RandomMinMax(4, 9); break;
|
||||
case RefinementCraftType.Tailor:
|
||||
m_SubCraftType = (RefinementSubCraftType)Utility.RandomMinMax(0, 3); break;
|
||||
case RefinementCraftType.Carpenter:
|
||||
m_SubCraftType = (RefinementSubCraftType)Utility.RandomMinMax(10, 11); break;
|
||||
}
|
||||
}
|
||||
|
||||
private int[][] Labels = new int[][]
|
||||
{
|
||||
//Scour Thread Varnish
|
||||
//Polish Wash Gloss
|
||||
new int[] { 1153951, 1153948, 1153952 },
|
||||
new int[] { 1153950, 1153949, 1153953 }
|
||||
};
|
||||
|
||||
private int GetModLabel()
|
||||
{
|
||||
switch ((int)m_ModType)
|
||||
{
|
||||
default:
|
||||
case 0: return 1153941;
|
||||
case 1: return 1153944;
|
||||
case 2: return 1153945;
|
||||
case 3: return 1153946;
|
||||
case 4: return 1153947;
|
||||
}
|
||||
}
|
||||
|
||||
private int[][] ItemIDs = new int[][]
|
||||
{
|
||||
// Smith Tail Carp
|
||||
new int[] { 19673, 5163, 11617 }, //Reinforcing
|
||||
new int[] { 19672, 5162, 19674 } //Deflecting
|
||||
};
|
||||
|
||||
private void GetItemID()
|
||||
{
|
||||
ItemID = ItemIDs[(int)m_RefinementType][(int)m_CraftType];
|
||||
}
|
||||
|
||||
public static bool Roll(Container c, int rolls, double chance)
|
||||
{
|
||||
for (int i = 0; i < rolls; i++)
|
||||
{
|
||||
if (chance >= Utility.RandomDouble())
|
||||
{
|
||||
c.DropItem(GetRandom());
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public static RefinementComponent GetRandom()
|
||||
{
|
||||
return new RefinementComponent((RefinementType)Utility.Random(2), (RefinementCraftType)Utility.Random(3), GetRandomMod());
|
||||
}
|
||||
|
||||
private static ModType GetRandomMod()
|
||||
{
|
||||
double ran = Utility.RandomDouble();
|
||||
|
||||
if (ran >= .95) return ModType.Invulnerability;
|
||||
if (ran >= .80) return ModType.Fortification;
|
||||
if (ran >= .70) return ModType.Hardening;
|
||||
if (ran >= .50) return ModType.Protection;
|
||||
|
||||
return ModType.Defense;
|
||||
}
|
||||
|
||||
public RefinementComponent(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write((int)m_RefinementType);
|
||||
writer.Write((int)m_CraftType);
|
||||
writer.Write((int)m_SubCraftType);
|
||||
writer.Write((int)m_ModType);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
|
||||
m_RefinementType = (RefinementType)reader.ReadInt();
|
||||
m_CraftType = (RefinementCraftType)reader.ReadInt();
|
||||
m_SubCraftType = (RefinementSubCraftType)reader.ReadInt();
|
||||
m_ModType = (ModType)reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class RefinementItem : Item
|
||||
{
|
||||
private RefinementType m_RefinementType;
|
||||
private RefinementCraftType m_CraftType;
|
||||
private RefinementSubCraftType m_SubCraftType;
|
||||
private ModType m_ModType;
|
||||
private int m_ModAmount;
|
||||
private bool m_CheckBonus;
|
||||
private ModEntry m_Entry;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementType RefinementType
|
||||
{
|
||||
get { return m_RefinementType; }
|
||||
set
|
||||
{
|
||||
m_RefinementType = value;
|
||||
GetItemID();
|
||||
GetHue();
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementCraftType CraftType
|
||||
{
|
||||
get { return m_CraftType; }
|
||||
set
|
||||
{
|
||||
RefinementCraftType old = m_CraftType;
|
||||
|
||||
m_CraftType = value;
|
||||
|
||||
if(old != m_CraftType)
|
||||
GetSubCraftType();
|
||||
|
||||
GetItemID();
|
||||
GetHue();
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public RefinementSubCraftType SubCraftType { get { return m_SubCraftType; } set { m_SubCraftType = value; InvalidateProperties(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public ModType ModType { get { return m_ModType; } set { m_ModType = value; InvalidateProperties(); ApplyModAmount(); } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int ModAmount { get { return m_ModAmount; } set { m_ModAmount = value; if (m_ModAmount > 5) m_ModAmount = 5; if (m_ModAmount < 1) m_ModAmount = 1; ; } }
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public bool CheckBonus { get { return m_CheckBonus; } set { m_CheckBonus = value; } }
|
||||
|
||||
public ModEntry Entry { get { return m_Entry; } }
|
||||
|
||||
[Constructable]
|
||||
public RefinementItem()
|
||||
: this(RefinementType.Reinforcing, RefinementCraftType.Blacksmith, RefinementSubCraftType.Ringmail, ModType.Defense)
|
||||
{
|
||||
}
|
||||
|
||||
public RefinementItem(RefinementType type, RefinementCraftType craftType, RefinementSubCraftType srtype, ModType modType)
|
||||
: base(0)
|
||||
{
|
||||
m_RefinementType = type;
|
||||
m_CraftType = craftType;
|
||||
m_SubCraftType = srtype;
|
||||
ModType = modType;
|
||||
GetItemID();
|
||||
GetHue();
|
||||
ApplyModAmount();
|
||||
|
||||
m_Entry = new ModEntry(m_ModAmount);
|
||||
|
||||
m_CheckBonus = false;
|
||||
}
|
||||
|
||||
public void ApplyModAmount()
|
||||
{
|
||||
switch ((int)m_ModType)
|
||||
{
|
||||
default:
|
||||
case 0:
|
||||
case 1: m_ModAmount = 1; break;
|
||||
case 2: m_ModAmount = 2; break;
|
||||
case 3: m_ModAmount = 3; break;
|
||||
case 4: m_ModAmount = 4; break;
|
||||
}
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile from)
|
||||
{
|
||||
if (!IsChildOf(from.Backpack))
|
||||
from.SendLocalizedMessage(1054107); // This item must be in your backpack.
|
||||
else if (CheckForVendor(from, this))
|
||||
{
|
||||
from.CloseGump(typeof(RefinementGump));
|
||||
from.SendGump(new RefinementGump(this));
|
||||
}
|
||||
}
|
||||
|
||||
public override void AddNameProperty(ObjectPropertyList list)
|
||||
{
|
||||
list.Add(1153967, GetNameArgs()); // ~1_BONUSTYPE~ ~2_OBJTYPE~ ~3_BONUSLEVEL~
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
list.Add(1154002, String.Format("#{0}", (1153954 + (int)m_SubCraftType).ToString())); // Armor Type: ~1_TYPE~
|
||||
list.Add(1154124, m_RefinementType == RefinementType.Reinforcing ? "#1154123" : "#1154122"); // Bonus Type: ~1_TYPE~
|
||||
}
|
||||
|
||||
private void GetHue()
|
||||
{
|
||||
if (m_RefinementType == RefinementType.Reinforcing)
|
||||
Hue = 2970;
|
||||
else
|
||||
Hue = 2953;
|
||||
}
|
||||
|
||||
private bool CheckSkill(Mobile from)
|
||||
{
|
||||
SkillName check = SkillName.Blacksmith;
|
||||
|
||||
switch (m_CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith: break;
|
||||
case RefinementCraftType.Tailor: check = SkillName.Tailoring; break;
|
||||
case RefinementCraftType.Carpenter: check = SkillName.Carpentry; break;
|
||||
}
|
||||
|
||||
return from.Skills[check].Value >= 100;
|
||||
}
|
||||
|
||||
public virtual int GetBonusChance()
|
||||
{
|
||||
if (m_ModType == ModType.Defense)
|
||||
return 0;
|
||||
|
||||
return 5;
|
||||
}
|
||||
|
||||
private void GetItemID()
|
||||
{
|
||||
ItemID = ItemIDs[(int)m_RefinementType][(int)m_CraftType];
|
||||
}
|
||||
|
||||
public void GetSubCraftType()
|
||||
{
|
||||
switch (m_CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith:
|
||||
m_SubCraftType = (RefinementSubCraftType)Utility.RandomMinMax(4, 9); break;
|
||||
case RefinementCraftType.Tailor:
|
||||
m_SubCraftType = (RefinementSubCraftType)Utility.RandomMinMax(0, 3); break;
|
||||
case RefinementCraftType.Carpenter:
|
||||
m_SubCraftType = (RefinementSubCraftType)Utility.RandomMinMax(10, 11); break;
|
||||
}
|
||||
}
|
||||
|
||||
public string GetNameArgs()
|
||||
{
|
||||
return String.Format("#{0}\t#{1}\t#{2}", LabelPrefix[(int)m_RefinementType][(int)m_CraftType], LabelSuffix[(int)m_CraftType], GetModLabel());
|
||||
}
|
||||
|
||||
public int[][] LabelPrefix = new int[][]
|
||||
{ //Scoured Cured Varnished
|
||||
//Polished Washed Glazed
|
||||
new int[] { 1153971, 1153968, 1153972 }, // Reinforcing
|
||||
new int[] { 1153970, 1153969, 1153973 } // Deflecting
|
||||
};
|
||||
|
||||
public int[] LabelSuffix = new int[]
|
||||
{
|
||||
//Plating Thread Resin
|
||||
1153975, 1153974, 1153976 //Reinforcing and Deflecting
|
||||
};
|
||||
|
||||
private int GetModLabel()
|
||||
{
|
||||
switch ((int)m_ModType)
|
||||
{
|
||||
default:
|
||||
case 0: return 1153941; // of Defense
|
||||
case 1: return 1153944; // of Protection
|
||||
case 2: return 1153945; // of Hardening
|
||||
case 3: return 1153946; // of Fortification
|
||||
case 4: return 1153947; // of Invulnerability
|
||||
}
|
||||
}
|
||||
|
||||
private int[][] ItemIDs = new int[][]
|
||||
{ // Smith Tail Carp
|
||||
new int[] { 19676, 19675, 19677 }, //Reinforcing
|
||||
new int[] { 19676, 19675, 19677 } //Deflecing
|
||||
};
|
||||
|
||||
public static bool CheckForVendor(Mobile from, RefinementItem item)
|
||||
{
|
||||
IPooledEnumerable eable = from.Map.GetMobilesInRange(from.Location, 12);
|
||||
|
||||
foreach (Mobile m in eable)
|
||||
{
|
||||
if (m is ArmorRefiner && ((ArmorRefiner)m).RefineType == item.CraftType)
|
||||
{
|
||||
eable.Free();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
bool wtf = .5 > Utility.RandomDouble();
|
||||
|
||||
switch (item.CraftType)
|
||||
{
|
||||
case RefinementCraftType.Blacksmith: from.SendLocalizedMessage(wtf ? 1154012 : 1154009); break;
|
||||
case RefinementCraftType.Tailor: from.SendLocalizedMessage(wtf ? 1154011 : 1154008); break;
|
||||
case RefinementCraftType.Carpenter: from.SendLocalizedMessage(wtf ? 1154013 : 1154010); break;
|
||||
}
|
||||
|
||||
eable.Free();
|
||||
return false;
|
||||
}
|
||||
|
||||
public RefinementItem(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write((int)m_RefinementType);
|
||||
writer.Write((int)m_CraftType);
|
||||
writer.Write((int)m_SubCraftType);
|
||||
writer.Write((int)m_ModType);
|
||||
writer.Write(m_ModAmount);
|
||||
writer.Write(m_CheckBonus);
|
||||
|
||||
m_Entry.Serialize(writer);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
|
||||
m_RefinementType = (RefinementType)reader.ReadInt();
|
||||
m_CraftType = (RefinementCraftType)reader.ReadInt();
|
||||
m_SubCraftType = (RefinementSubCraftType)reader.ReadInt();
|
||||
m_ModType = (ModType)reader.ReadInt();
|
||||
m_ModAmount = reader.ReadInt();
|
||||
m_CheckBonus = reader.ReadBool();
|
||||
|
||||
m_Entry = new ModEntry(reader);
|
||||
}
|
||||
}
|
||||
|
||||
public class ModEntry
|
||||
{
|
||||
private ResistanceType[] m_Resists = new ResistanceType[5];
|
||||
private int[] m_Values = new int[5];
|
||||
|
||||
public ResistanceType[] Resists { get { return m_Resists; } }
|
||||
public int[] Values { get { return m_Values; } }
|
||||
|
||||
public ModEntry(int count)
|
||||
{
|
||||
for (int i = 0; i < m_Resists.Length; i++)
|
||||
{
|
||||
m_Resists[i] = (ResistanceType)i;
|
||||
m_Values[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
public ModEntry(GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
m_Resists[i] = (ResistanceType)reader.ReadInt();
|
||||
m_Values[i] = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write((int)0);
|
||||
|
||||
writer.Write(m_Resists.Length);
|
||||
|
||||
for (int i = 0; i < m_Resists.Length; i++)
|
||||
{
|
||||
writer.Write((int)m_Resists[i]);
|
||||
writer.Write(m_Values[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class LeatherBraid : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1154003; } } // Leather braid
|
||||
|
||||
[Constructable]
|
||||
public LeatherBraid() : this(1)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public LeatherBraid(int amount) : base(5152)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
Hue = 2968;
|
||||
}
|
||||
|
||||
public LeatherBraid(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class MalleableAlloy : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1154005; } } // Melleable Alloy
|
||||
|
||||
[Constructable]
|
||||
public MalleableAlloy()
|
||||
: this(1)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public MalleableAlloy(int amount)
|
||||
: base(0x1BE9)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
Hue = 2949;
|
||||
}
|
||||
|
||||
public MalleableAlloy(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
|
||||
public class SolventFlask : Item
|
||||
{
|
||||
public override int LabelNumber { get { return 1154004; } } // Solvent Flask
|
||||
|
||||
[Constructable]
|
||||
public SolventFlask()
|
||||
: this(1)
|
||||
{
|
||||
}
|
||||
|
||||
[Constructable]
|
||||
public SolventFlask(int amount)
|
||||
: base(7192)
|
||||
{
|
||||
Stackable = true;
|
||||
Amount = amount;
|
||||
Hue = 2969;
|
||||
}
|
||||
|
||||
public SolventFlask(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write((int)0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int v = reader.ReadInt();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user