Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
624
Scripts/Services/LootGeneration/RunicReforging/Gumps.cs
Normal file
624
Scripts/Services/LootGeneration/RunicReforging/Gumps.cs
Normal file
@@ -0,0 +1,624 @@
|
||||
using System;
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Network;
|
||||
using Server.Engines.Quests;
|
||||
|
||||
namespace Server.Gumps
|
||||
{
|
||||
[Flags]
|
||||
public enum ReforgingOption
|
||||
{
|
||||
None = 0x00000000,
|
||||
Powerful = 0x00000001,
|
||||
Structural = 0x00000002,
|
||||
Fortified = 0x00000004,
|
||||
Fundamental = 0x00000008,
|
||||
Integral = 0x00000010,
|
||||
GrandArtifice = 0x00000020,
|
||||
InspiredArtifice = 0x00000040,
|
||||
ExaltedArtifice = 0x00000080,
|
||||
SublimeArtifice = 0x00000100,
|
||||
|
||||
PowerfulAndStructural = Powerful | Structural,
|
||||
PowerfulAndFundamental = Powerful | Fundamental,
|
||||
StructuralAndFundamental = Structural | Fundamental,
|
||||
PowerfulStructuralAndFundamental = PowerfulAndStructural | Fundamental
|
||||
}
|
||||
|
||||
public class RunicReforgingGump : Gump
|
||||
{
|
||||
private BaseRunicTool m_Tool;
|
||||
private Item m_ToReforge;
|
||||
private ReforgingOption m_Options;
|
||||
private ReforgedPrefix m_Prefix;
|
||||
private ReforgedSuffix m_Suffix;
|
||||
|
||||
private ReforgingContext m_Context;
|
||||
|
||||
private ReforgingOption[] Options =
|
||||
{
|
||||
ReforgingOption.Powerful,
|
||||
ReforgingOption.Structural,
|
||||
ReforgingOption.Fortified,
|
||||
ReforgingOption.Fundamental,
|
||||
ReforgingOption.Integral,
|
||||
ReforgingOption.GrandArtifice,
|
||||
ReforgingOption.InspiredArtifice,
|
||||
ReforgingOption.ExaltedArtifice,
|
||||
ReforgingOption.SublimeArtifice,
|
||||
};
|
||||
|
||||
public RunicReforgingGump(Mobile from, Item toReforge, BaseRunicTool tool)
|
||||
: base(100, 100)
|
||||
{
|
||||
from.CloseGump(typeof(RunicReforgingGump));
|
||||
from.CloseGump(typeof(ImbueGump));
|
||||
|
||||
m_Context = ReforgingContext.GetContext(from);
|
||||
|
||||
if (!m_Context.Contexts.ContainsKey(tool))
|
||||
m_Context.Contexts[tool] = ReforgingOption.None;
|
||||
|
||||
m_Tool = tool;
|
||||
m_ToReforge = toReforge;
|
||||
m_Options = m_Context.Contexts[tool];
|
||||
|
||||
m_Prefix = m_Context.Prefix;
|
||||
m_Suffix = m_Context.Suffix;
|
||||
|
||||
AddBackground(0, 0, 370, 440, 83);
|
||||
AddHtmlLocalized(10, 10, 350, 18, 1114513, "#1151952", 0x4BB7, false, false); // Runic Crafting Options
|
||||
|
||||
int buttonHue = 0x4BB2;
|
||||
int buttonID = 0x4005;
|
||||
int y = 40;
|
||||
int idx = 0;
|
||||
|
||||
for(int i = 0; i < Options.Length; i++)
|
||||
{
|
||||
ReforgingOption option = Options[i];
|
||||
|
||||
if ((m_Options & option) != 0)
|
||||
{
|
||||
if (CanReforge(from, option) && HasMetPrerequisite(option))
|
||||
{
|
||||
buttonHue = 0x4BB2;
|
||||
buttonID = 4006;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonHue = 0x7652;
|
||||
buttonID = 4006;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (CanReforge(from, option) && HasMetPrerequisite(option))
|
||||
{
|
||||
buttonHue = 0x6F7B;
|
||||
buttonID = 4005;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonHue = 0x7652;
|
||||
buttonID = 4006;
|
||||
}
|
||||
}
|
||||
|
||||
if(HasMetPrerequisite(option) && CanReforge(from, option))
|
||||
AddButton(15, y, buttonID, buttonID, i + 100, GumpButtonType.Reply, 0);
|
||||
|
||||
AddHtmlLocalized(55, y, 250, 20, GetCliloc(option), buttonHue, false, false);
|
||||
|
||||
y += 25;
|
||||
idx++;
|
||||
}
|
||||
|
||||
int totalCharges = GetTotalCharges();
|
||||
|
||||
if ((m_Options & ReforgingOption.InspiredArtifice) != 0)
|
||||
{
|
||||
AddButton(15, 305, 4005, 4007, 1, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(55, 305, 250, 20, 1152087, 0x6F7B, false, false);
|
||||
AddHtmlLocalized(190, 305, 250, 20, RunicReforging.GetName((int)m_Prefix), 0x5757, false, false);
|
||||
}
|
||||
|
||||
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
||||
{
|
||||
AddButton(15, 330, 4005, 4007, 2, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(55, 330, 250, 20, 1152088, 0x6F7B, false, false);
|
||||
AddHtmlLocalized(190, 330, 250, 20, RunicReforging.GetName((int)m_Suffix), 0x5757, false, false);
|
||||
}
|
||||
|
||||
AddHtmlLocalized(10, 363, 140, 22, 1114514, "#1152078", 0x4BB2, false, false); // CHARGES NEEDED:
|
||||
AddLabel(160, 363, 0x113, totalCharges.ToString());
|
||||
|
||||
AddHtmlLocalized(10, 385, 140, 22, 1114514, "#1152077", 0x6F7B, false, false); // TOOL CHARGES:
|
||||
AddLabel(160, 385, 0x44E, m_Tool.UsesRemaining.ToString());
|
||||
|
||||
AddButton(10, 412, 4017, 4018, 0, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(45, 410, 200, 20, 1060675, 0x6F7B, false, false); // CLOSE
|
||||
|
||||
AddButton(330, 363, 4014, 4016, 3, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(190, 363, 135, 22, 1114514, "#1152080", 0x6F7B, false, false); // REFORGE ITEM
|
||||
|
||||
AddButton(330, 412, 4011, 4013, 4, GumpButtonType.Reply, 0);
|
||||
AddHtmlLocalized(185, 412, 140, 18, 1114514, "#1149735", 0x6F7B, false, false); // HELP
|
||||
}
|
||||
|
||||
private bool HasMetPrerequisite(ReforgingOption option)
|
||||
{
|
||||
switch (option)
|
||||
{
|
||||
case ReforgingOption.None: return true;
|
||||
case ReforgingOption.Powerful: return true;
|
||||
case ReforgingOption.Structural: return true;
|
||||
case ReforgingOption.Fortified: return (m_Options & ReforgingOption.Structural) != 0;
|
||||
case ReforgingOption.Fundamental: return true;
|
||||
case ReforgingOption.Integral: return (m_Options & ReforgingOption.Fundamental) != 0;
|
||||
case ReforgingOption.GrandArtifice: return true;
|
||||
case ReforgingOption.InspiredArtifice: return (m_Options & ReforgingOption.GrandArtifice) != 0;
|
||||
case ReforgingOption.ExaltedArtifice: return (m_Options & ReforgingOption.GrandArtifice) != 0;
|
||||
case ReforgingOption.SublimeArtifice: return (m_Options & ReforgingOption.ExaltedArtifice) != 0 && (m_Options & ReforgingOption.GrandArtifice) != 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
private void InvalidatePrerequisite(ReforgingOption option)
|
||||
{
|
||||
switch (option)
|
||||
{
|
||||
case ReforgingOption.None:
|
||||
case ReforgingOption.Powerful: break;
|
||||
case ReforgingOption.Structural:
|
||||
if ((m_Options & ReforgingOption.Fortified) != 0)
|
||||
m_Options ^= ReforgingOption.Fortified;
|
||||
break;
|
||||
case ReforgingOption.Fortified: break;
|
||||
case ReforgingOption.Fundamental:
|
||||
if ((m_Options & ReforgingOption.Integral) != 0)
|
||||
m_Options ^= ReforgingOption.Integral;
|
||||
break;
|
||||
case ReforgingOption.Integral: break;
|
||||
case ReforgingOption.GrandArtifice:
|
||||
if ((m_Options & ReforgingOption.InspiredArtifice) != 0)
|
||||
m_Options ^= ReforgingOption.InspiredArtifice;
|
||||
if ((m_Options & ReforgingOption.ExaltedArtifice) != 0)
|
||||
m_Options ^= ReforgingOption.ExaltedArtifice;
|
||||
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
||||
m_Options ^= ReforgingOption.SublimeArtifice;
|
||||
break;
|
||||
case ReforgingOption.InspiredArtifice: break;
|
||||
case ReforgingOption.ExaltedArtifice:
|
||||
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
||||
m_Options ^= ReforgingOption.SublimeArtifice;
|
||||
break;
|
||||
case ReforgingOption.SublimeArtifice: break;
|
||||
}
|
||||
}
|
||||
|
||||
private bool CanReforge(Mobile from, ReforgingOption option)
|
||||
{
|
||||
double skill = from.Skills[SkillName.Imbuing].Value;
|
||||
|
||||
switch (option)
|
||||
{
|
||||
default:
|
||||
case ReforgingOption.None:
|
||||
case ReforgingOption.Powerful: return skill >= 65.0;
|
||||
case ReforgingOption.Structural:
|
||||
case ReforgingOption.Fortified: return skill >= 85.0;
|
||||
case ReforgingOption.Fundamental:
|
||||
case ReforgingOption.Integral: return skill >= 97.0;
|
||||
case ReforgingOption.GrandArtifice:
|
||||
case ReforgingOption.InspiredArtifice: return skill >= 100.1;
|
||||
case ReforgingOption.ExaltedArtifice:
|
||||
case ReforgingOption.SublimeArtifice: return skill >= 110.1;
|
||||
}
|
||||
}
|
||||
|
||||
private int GetCliloc(ReforgingOption option)
|
||||
{
|
||||
switch (option)
|
||||
{
|
||||
default:
|
||||
case ReforgingOption.None: return 0;
|
||||
case ReforgingOption.Powerful: return 1151954;
|
||||
case ReforgingOption.Structural: return 1151955;
|
||||
case ReforgingOption.Fortified: return 1151956;
|
||||
case ReforgingOption.Fundamental: return 1151957;
|
||||
case ReforgingOption.Integral: return 1151958;
|
||||
case ReforgingOption.GrandArtifice: return 1151961;
|
||||
case ReforgingOption.InspiredArtifice: return 1151962;
|
||||
case ReforgingOption.ExaltedArtifice: return 1151963;
|
||||
case ReforgingOption.SublimeArtifice: return 1151964;
|
||||
}
|
||||
}
|
||||
|
||||
private int GetTotalCharges()
|
||||
{
|
||||
int count = 1;
|
||||
|
||||
foreach (var option in Options)
|
||||
{
|
||||
if ((m_Options & option) != 0)
|
||||
count++;
|
||||
}
|
||||
|
||||
return Math.Min(10, count);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState state, RelayInfo info)
|
||||
{
|
||||
Mobile from = state.Mobile;
|
||||
|
||||
if (!BaseTool.CheckAccessible(m_Tool, from, true))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch (info.ButtonID)
|
||||
{
|
||||
case 0: break;
|
||||
case 1: // prefix
|
||||
from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, true));
|
||||
break;
|
||||
case 2: // suffix
|
||||
from.SendGump(new ItemNameGump(m_ToReforge, m_Tool, m_Options, m_Prefix, m_Suffix, false));
|
||||
break;
|
||||
case 3: // Reforge Item
|
||||
{
|
||||
if (!RunicReforging.CanReforge(from, m_ToReforge, m_Tool.CraftSystem))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
int totalCharges = GetTotalCharges();
|
||||
|
||||
if (m_Tool.UsesRemaining >= totalCharges)
|
||||
{
|
||||
CraftResourceInfo resInfo = CraftResources.GetInfo(m_Tool.Resource);
|
||||
|
||||
if (resInfo == null)
|
||||
return;
|
||||
|
||||
CraftAttributeInfo attrs = resInfo.AttributeInfo;
|
||||
|
||||
int min = 10;
|
||||
int max = 80;
|
||||
|
||||
if (min < 10) min = 10;
|
||||
if (max > 100) max = 100;
|
||||
|
||||
int budget = GetBudget();
|
||||
|
||||
ReforgedPrefix prefix = ReforgedPrefix.None;
|
||||
ReforgedSuffix suffix = ReforgedSuffix.None;
|
||||
|
||||
if ((m_Options & ReforgingOption.GrandArtifice) != 0)
|
||||
{
|
||||
// choosing name 1
|
||||
if ((m_Options & ReforgingOption.InspiredArtifice) != 0)
|
||||
{
|
||||
prefix = m_Prefix;
|
||||
|
||||
if (prefix == ReforgedPrefix.None)
|
||||
{
|
||||
from.SendLocalizedMessage(1152287); // Re-forging failed. You did not choose a name! Please try again.
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Not choosing name 1 or 2
|
||||
if ((m_Options & ReforgingOption.SublimeArtifice) == 0)
|
||||
{
|
||||
// random prefix AND suffix
|
||||
if ((m_Options & ReforgingOption.ExaltedArtifice) != 0)
|
||||
{
|
||||
prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge, budget);
|
||||
suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix);
|
||||
}
|
||||
else // random prefix OR suffix
|
||||
{
|
||||
if (0.5 > Utility.RandomDouble())
|
||||
{
|
||||
prefix = RunicReforging.ChooseRandomPrefix(m_ToReforge, budget);
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ((m_Options & ReforgingOption.ExaltedArtifice) != 0)
|
||||
{
|
||||
if ((m_Options & ReforgingOption.SublimeArtifice) != 0)
|
||||
{
|
||||
suffix = m_Suffix;
|
||||
|
||||
if (suffix == ReforgedSuffix.None)
|
||||
{
|
||||
from.SendLocalizedMessage(1152287); // Re-forging failed. You did not choose a name! Please try again.
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
suffix = RunicReforging.ChooseRandomSuffix(m_ToReforge, budget, m_Prefix);
|
||||
budget = Math.Min(800, budget + 50);
|
||||
}
|
||||
}
|
||||
|
||||
// 50% chance to switch prefix/suffix around
|
||||
if ((prefix != ReforgedPrefix.None || suffix != ReforgedSuffix.None) && 0.5 > Utility.RandomDouble())
|
||||
{
|
||||
int pre = (int)prefix;
|
||||
int suf = (int)suffix;
|
||||
|
||||
prefix = (ReforgedPrefix)suf;
|
||||
suffix = (ReforgedSuffix)pre;
|
||||
}
|
||||
|
||||
RunicReforging.ApplyReforgedProperties(m_ToReforge, prefix, suffix, budget, min, max, RunicReforging.GetPropertyCount(m_Tool), 0, m_Tool, m_Options);
|
||||
|
||||
OnAfterReforged(m_ToReforge);
|
||||
from.SendLocalizedMessage(1152286); // You re-forge the item!
|
||||
|
||||
from.PlaySound(0x665);
|
||||
|
||||
m_Tool.UsesRemaining -= totalCharges;
|
||||
|
||||
if (m_Tool.UsesRemaining <= 0)
|
||||
{
|
||||
m_Tool.Delete();
|
||||
from.SendLocalizedMessage(1044038); // You have worn out your tool!
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
from.SendGump(new ReforgingHelpGump());
|
||||
break;
|
||||
default: // Option
|
||||
{
|
||||
ReforgingOption option = Options[info.ButtonID - 100];
|
||||
|
||||
if (HasMetPrerequisite(option))
|
||||
{
|
||||
if ((m_Options & option) == 0)
|
||||
{
|
||||
m_Options |= option;
|
||||
|
||||
if (m_Prefix != ReforgedPrefix.None && !RunicReforging.HasSelection((int)m_Prefix, m_ToReforge, m_Tool, m_Options, -1, -1))
|
||||
{
|
||||
m_Prefix = ReforgedPrefix.None;
|
||||
m_Context.Prefix = ReforgedPrefix.None;
|
||||
}
|
||||
|
||||
if (m_Suffix != ReforgedSuffix.None && !RunicReforging.HasSelection((int)m_Suffix, m_ToReforge, m_Tool, m_Options, -1, -1))
|
||||
{
|
||||
m_Suffix = ReforgedSuffix.None;
|
||||
m_Context.Suffix = ReforgedSuffix.None;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Options ^= option;
|
||||
InvalidatePrerequisite(option);
|
||||
}
|
||||
|
||||
m_Context.Contexts[m_Tool] = m_Options;
|
||||
}
|
||||
|
||||
from.SendGump(new RunicReforgingGump(from, m_ToReforge, m_Tool));
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private int GetBudget()
|
||||
{
|
||||
int budget;
|
||||
|
||||
switch (m_Tool.Resource)
|
||||
{
|
||||
default:
|
||||
case CraftResource.DullCopper:
|
||||
case CraftResource.ShadowIron:
|
||||
case CraftResource.SpinedLeather:
|
||||
case CraftResource.OakWood:
|
||||
budget = 140; break;
|
||||
case CraftResource.Copper:
|
||||
case CraftResource.AshWood:
|
||||
budget = 350; break;
|
||||
case CraftResource.Bronze:
|
||||
case CraftResource.YewWood:
|
||||
case CraftResource.HornedLeather:
|
||||
budget = 500; break;
|
||||
case CraftResource.Gold:
|
||||
case CraftResource.Agapite:
|
||||
case CraftResource.Heartwood:
|
||||
case CraftResource.Bloodwood:
|
||||
budget = 600; break;
|
||||
case CraftResource.Verite:
|
||||
case CraftResource.Frostwood:
|
||||
case CraftResource.BarbedLeather:
|
||||
budget = 700; break;
|
||||
case CraftResource.Valorite:
|
||||
budget = 750; break;
|
||||
}
|
||||
|
||||
if ((m_Options & ReforgingOption.Powerful) != 0)
|
||||
budget += 60;
|
||||
|
||||
if ((m_Options & ReforgingOption.Structural) != 0)
|
||||
budget += 60;
|
||||
|
||||
if ((m_Options & ReforgingOption.Fundamental) != 0)
|
||||
budget += 100;
|
||||
|
||||
return budget;
|
||||
}
|
||||
|
||||
public void OnAfterReforged(Item item)
|
||||
{
|
||||
AosAttributes attr = RunicReforging.GetAosAttributes(item);
|
||||
NegativeAttributes neg = RunicReforging.GetNegativeAttributes(item);
|
||||
|
||||
int durability = 0;
|
||||
|
||||
if (item is BaseWeapon)
|
||||
attr = ((BaseWeapon)item).Attributes;
|
||||
|
||||
else if (item is BaseArmor)
|
||||
attr = ((BaseArmor)item).Attributes;
|
||||
|
||||
if (attr != null && (m_Options & ReforgingOption.Structural) != 0)
|
||||
{
|
||||
if(neg != null)
|
||||
neg.Brittle = 1;
|
||||
|
||||
if ((m_Options & ReforgingOption.Fortified) != 0)
|
||||
durability = 150;
|
||||
|
||||
if (item is BaseArmor || item is BaseClothing)
|
||||
item.Hue = 2500;
|
||||
}
|
||||
|
||||
if ((m_Options & ReforgingOption.Fundamental) != 0)
|
||||
{
|
||||
if (neg != null)
|
||||
neg.NoRepair = 1;
|
||||
|
||||
durability = (m_Options & ReforgingOption.Integral) != 0 ? 255 : 200;
|
||||
|
||||
if (item.Hue == 0 && (item is BaseArmor || item is BaseClothing))
|
||||
item.Hue = 2500;
|
||||
}
|
||||
|
||||
if (durability > 0 && item is IDurability)
|
||||
{
|
||||
((IDurability)item).MaxHitPoints = durability;
|
||||
((IDurability)item).HitPoints = durability;
|
||||
}
|
||||
|
||||
RunicReforging.ApplyItemPower(item, true);
|
||||
}
|
||||
|
||||
public class ItemNameGump : Gump
|
||||
{
|
||||
private BaseRunicTool m_Tool;
|
||||
private Item m_ToReforge;
|
||||
private ReforgingOption m_Options;
|
||||
private ReforgedPrefix m_Prefix;
|
||||
private ReforgedSuffix m_Suffix;
|
||||
private bool m_IsPrefix;
|
||||
|
||||
private static int White = 0x6F7B;
|
||||
private static int Green = 0x4BB2;
|
||||
private static int Yellow = 0x6B55;
|
||||
|
||||
public ItemNameGump(Item toreforge, BaseRunicTool tool, ReforgingOption options, ReforgedPrefix prefix, ReforgedSuffix suffix, bool isprefix)
|
||||
: base(100, 100)
|
||||
{
|
||||
m_Tool = tool;
|
||||
m_ToReforge = toreforge;
|
||||
m_Options = options;
|
||||
m_Prefix = prefix;
|
||||
m_Suffix = suffix;
|
||||
m_IsPrefix = isprefix;
|
||||
|
||||
AddBackground(0, 0, 370, 440, 83);
|
||||
|
||||
AddHtmlLocalized(10, 10, 350, 18, 1114513, "#1152089", 0x4BB7, false, false); // Runic Crafting - Item Name Selection
|
||||
|
||||
int buttonID = 4005;
|
||||
int buttonHue = 0x4BB2;
|
||||
int y = 50;
|
||||
|
||||
foreach (int i in Enum.GetValues(typeof(ReforgedPrefix)))
|
||||
{
|
||||
if (i == 0)
|
||||
continue;
|
||||
|
||||
if ((isprefix && prefix == (ReforgedPrefix)i) || (!isprefix && suffix == (ReforgedSuffix)i))
|
||||
{
|
||||
buttonID = 4006;
|
||||
buttonHue = Green;
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonID = 4005;
|
||||
buttonHue = White;
|
||||
}
|
||||
|
||||
if (RunicReforging.HasSelection(i, toreforge, tool, m_Options, (int)m_Prefix, (int)m_Suffix))
|
||||
{
|
||||
AddButton(15, y, buttonID, buttonID, 100 + i, GumpButtonType.Reply, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
buttonHue = Yellow;
|
||||
}
|
||||
|
||||
AddHtmlLocalized(55, y, 250, 20, RunicReforging.GetName(i), buttonHue, false, false);
|
||||
|
||||
y += 25;
|
||||
}
|
||||
|
||||
AddHtmlLocalized(45, 412, 100, 20, 1060675, White, false, false);
|
||||
AddButton(10, 412, 4017, 4019, 0, GumpButtonType.Reply, 0);
|
||||
}
|
||||
|
||||
public override void OnResponse(NetState state, RelayInfo info)
|
||||
{
|
||||
Mobile from = state.Mobile;
|
||||
|
||||
if (info.ButtonID == 0)
|
||||
return;
|
||||
|
||||
int index = info.ButtonID - 100;
|
||||
|
||||
if (index >= 0 && index <= 12 && RunicReforging.HasSelection(index, m_ToReforge, m_Tool, m_Options, (int)m_Prefix, (int)m_Suffix))
|
||||
{
|
||||
var context = ReforgingContext.GetContext(from);
|
||||
|
||||
if (m_IsPrefix)
|
||||
{
|
||||
context.Prefix = (ReforgedPrefix)index;
|
||||
m_Prefix = (ReforgedPrefix)index;
|
||||
}
|
||||
else
|
||||
{
|
||||
context.Suffix = (ReforgedSuffix)index;
|
||||
m_Suffix = (ReforgedSuffix)index;
|
||||
}
|
||||
}
|
||||
|
||||
from.SendGump(new RunicReforgingGump(from, m_ToReforge, m_Tool));
|
||||
}
|
||||
}
|
||||
|
||||
private class ReforgingHelpGump : Gump
|
||||
{
|
||||
public ReforgingHelpGump()
|
||||
: base(100, 100)
|
||||
{
|
||||
AddBackground(0, 0, 370, 440, 83);
|
||||
|
||||
AddHtmlLocalized(10, 10, 350, 18, 1114513, "#1151966", 0x4BB7, false, false); // Runc Crafting Help
|
||||
AddHtmlLocalized(10, 40, 353, 365, 1151965, 0xFFE0, false, true);
|
||||
|
||||
AddHtmlLocalized(45, 412, 100, 20, 1060675, 0x6F7B, false, false);
|
||||
AddButton(10, 412, 4017, 4019, 0, GumpButtonType.Reply, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
27
Scripts/Services/LootGeneration/RunicReforging/ReadMe.txt
Normal file
27
Scripts/Services/LootGeneration/RunicReforging/ReadMe.txt
Normal file
@@ -0,0 +1,27 @@
|
||||
-Random Item Generator: http://www.uoguide.com/Random_Magic_Item_Generation_System
|
||||
|
||||
-This is active for ALL loot on EA servers, however is not active by default. Here is how to activate it. All edits will be in RandomItemGenerator.cs.
|
||||
|
||||
-To drop items via random item generator system on specific monsters, such as hard creatures, etc, you will need to create a drop entry for that creature type in the Initialize() Method.
|
||||
|
||||
For example:
|
||||
|
||||
m_Table[typeof(Server.Engines.Despise.AndrosTheDreadLord)] = new List<DropEntry>();
|
||||
m_Table[typeof(Server.Engines.Despise.AndrosTheDreadLord)].Add(new DropEntry(null, 50, 15));
|
||||
|
||||
This will give a 50% drop rate, rolled 15 times when Adros the Dreadlord dies. This is in addition to his normal lootpack.
|
||||
|
||||
-To drop items via random item generator system as regular loot from loot packs, you will need to edit GenerateRandomItem(Item item, Mobile killer, BaseCreature victim) method.
|
||||
|
||||
For example:
|
||||
|
||||
GenerateRandomItem(Item item, Mobile killer, BaseCreature victim)
|
||||
{
|
||||
if(victim != null && victim.Map == Map.Felucca && .10 > Utility.RandomDouble())
|
||||
return RunicReforging.GenerateRandomItem(item, killer, victim);
|
||||
|
||||
if(victim.Region != null && victim.Region.IsPartOf<DespiseRegion>())
|
||||
return RunicReforging.GenerateRandomItem(item, killer, victim);
|
||||
}
|
||||
|
||||
this will drop the new named items 10% of the time as regular loot in Felucca, and everytime as loot in DespiseRegion.
|
||||
@@ -0,0 +1,121 @@
|
||||
using System;
|
||||
using Server;
|
||||
using System.Collections.Generic;
|
||||
using Server.Items;
|
||||
using Server.Gumps;
|
||||
using System.IO;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class ReforgingContext
|
||||
{
|
||||
public Dictionary<BaseTool, ReforgingOption> Contexts { get; set; }
|
||||
|
||||
public ReforgedPrefix Prefix { get; set; }
|
||||
public ReforgedSuffix Suffix { get; set; }
|
||||
|
||||
public ReforgingContext(Mobile m)
|
||||
{
|
||||
Contexts = new Dictionary<BaseTool, ReforgingOption>();
|
||||
|
||||
ReforgingContexts[m] = this;
|
||||
}
|
||||
|
||||
public ReforgingContext(GenericReader reader)
|
||||
{
|
||||
Contexts = new Dictionary<BaseTool, ReforgingOption>();
|
||||
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Prefix = (ReforgedPrefix)reader.ReadInt();
|
||||
Suffix = (ReforgedSuffix)reader.ReadInt();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
BaseTool tool = reader.ReadItem() as BaseTool;
|
||||
ReforgingOption option = (ReforgingOption)reader.ReadInt();
|
||||
|
||||
if (tool != null)
|
||||
Contexts[tool] = option;
|
||||
}
|
||||
}
|
||||
|
||||
public void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write((int)Prefix);
|
||||
writer.Write((int)Suffix);
|
||||
|
||||
writer.Write(Contexts.Count);
|
||||
foreach (var kvp in Contexts)
|
||||
{
|
||||
writer.Write(kvp.Key);
|
||||
writer.Write((int)kvp.Value);
|
||||
}
|
||||
}
|
||||
|
||||
#region Serialize/Deserialize Persistence
|
||||
private static string FilePath = Path.Combine("Saves", "CraftContext", "ReforgingContexts.bin");
|
||||
|
||||
public static Dictionary<Mobile, ReforgingContext> ReforgingContexts { get; set; }
|
||||
|
||||
public static ReforgingContext GetContext(Mobile m)
|
||||
{
|
||||
if (ReforgingContexts.ContainsKey(m))
|
||||
{
|
||||
return ReforgingContexts[m];
|
||||
}
|
||||
|
||||
return new ReforgingContext(m);
|
||||
}
|
||||
|
||||
public static void Configure()
|
||||
{
|
||||
EventSink.WorldSave += OnSave;
|
||||
EventSink.WorldLoad += OnLoad;
|
||||
}
|
||||
|
||||
public static void OnSave(WorldSaveEventArgs e)
|
||||
{
|
||||
Persistence.Serialize(
|
||||
FilePath,
|
||||
writer =>
|
||||
{
|
||||
writer.Write(0); // version
|
||||
|
||||
writer.Write(ReforgingContexts.Count);
|
||||
|
||||
foreach (var kvp in ReforgingContexts)
|
||||
{
|
||||
writer.Write(kvp.Key);
|
||||
kvp.Value.Serialize(writer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public static void OnLoad()
|
||||
{
|
||||
ReforgingContexts = new Dictionary<Mobile, ReforgingContext>();
|
||||
|
||||
Persistence.Deserialize(
|
||||
FilePath,
|
||||
reader =>
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
Mobile m = reader.ReadMobile();
|
||||
var context = new ReforgingContext(reader);
|
||||
|
||||
if (m != null)
|
||||
ReforgingContexts[m] = context;
|
||||
}
|
||||
});
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
}
|
||||
3391
Scripts/Services/LootGeneration/RunicReforging/RunicReforging.cs
Normal file
3391
Scripts/Services/LootGeneration/RunicReforging/RunicReforging.cs
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user