Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
726
Scripts/SubSystem/VitaNex/Core/Items/Deeds/HueDeeds.cs
Normal file
726
Scripts/SubSystem/VitaNex/Core/Items/Deeds/HueDeeds.cs
Normal file
@@ -0,0 +1,726 @@
|
||||
#region Header
|
||||
// _,-'/-'/
|
||||
// . __,-; ,'( '/
|
||||
// \. `-.__`-._`:_,-._ _ , . ``
|
||||
// `:-._,------' ` _,`--` -: `_ , ` ,' :
|
||||
// `---..__,,--' (C) 2023 ` -'. -'
|
||||
// # Vita-Nex [http://core.vita-nex.com] #
|
||||
// {o)xxx|===============- # -===============|xxx(o}
|
||||
// # #
|
||||
#endregion
|
||||
|
||||
#region References
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
|
||||
using VitaNex.Network;
|
||||
using VitaNex.SuperGumps.UI;
|
||||
using VitaNex.Targets;
|
||||
#endregion
|
||||
|
||||
namespace VitaNex.Items
|
||||
{
|
||||
public static class HueDeeds
|
||||
{
|
||||
public static event Action<IHueDeed> OnCreated;
|
||||
|
||||
public static void Register<T>(Action<T> onCreated)
|
||||
where T : IHueDeed
|
||||
{
|
||||
OnCreated += o =>
|
||||
{
|
||||
if (o is T d)
|
||||
{
|
||||
onCreated(d);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static void InvokeCreated(IHueDeed d)
|
||||
{
|
||||
if (OnCreated != null)
|
||||
{
|
||||
OnCreated(d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface IHueDeed
|
||||
{
|
||||
List<int> Hues { get; }
|
||||
|
||||
void AddHue(int hue);
|
||||
void AddHues(params int[] hues);
|
||||
void AddHueRange(int hue, int count);
|
||||
}
|
||||
|
||||
public abstract class BaseHueDeed<TEntity> : Item, IHueDeed
|
||||
where TEntity : IEntity
|
||||
{
|
||||
private HueSelector _Gump;
|
||||
private GenericSelectTarget<TEntity> _Target;
|
||||
|
||||
public List<int> Hues { get; private set; }
|
||||
|
||||
public virtual string TargetUsage => "an object";
|
||||
|
||||
public BaseHueDeed()
|
||||
: base(0x14F0)
|
||||
{
|
||||
Hues = new List<int>();
|
||||
|
||||
Name = "Color Change Deed";
|
||||
Weight = 1.0;
|
||||
LootType = LootType.Blessed;
|
||||
|
||||
Timer.DelayCall(HueDeeds.InvokeCreated, this);
|
||||
}
|
||||
|
||||
public BaseHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public void AddHue(int hue)
|
||||
{
|
||||
Hues.Update(hue);
|
||||
}
|
||||
|
||||
public void AddHues(params int[] hues)
|
||||
{
|
||||
if (hues == null || hues.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var h in hues)
|
||||
{
|
||||
AddHue(h);
|
||||
}
|
||||
}
|
||||
|
||||
public void AddHueRange(int hue, int count)
|
||||
{
|
||||
count = Math.Max(0, count);
|
||||
|
||||
while (--count >= 0)
|
||||
{
|
||||
AddHue(hue++);
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
ExtendedOPL.AddTo(list, "Use: Change the color of {0}".WrapUOHtmlColor(Color.LawnGreen), TargetUsage);
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (this.CheckDoubleClick(m, true, false, 2, true))
|
||||
{
|
||||
BeginTarget(m);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void BeginTarget(Mobile m)
|
||||
{
|
||||
if (_Target != null)
|
||||
{
|
||||
if (_Target.User != null && _Target.User.Target == _Target)
|
||||
{
|
||||
_Target.Cancel(_Target.User, TargetCancelType.Overriden);
|
||||
}
|
||||
|
||||
_Target = null;
|
||||
}
|
||||
|
||||
m.SendMessage("Target an object to recolor...");
|
||||
|
||||
_Target = new GenericSelectTarget<TEntity>(
|
||||
(u, t) =>
|
||||
{
|
||||
_Target = null;
|
||||
OpenGump(u, t);
|
||||
},
|
||||
u =>
|
||||
{
|
||||
OnTargetFail(u);
|
||||
_Target = null;
|
||||
});
|
||||
|
||||
m.Target = _Target;
|
||||
}
|
||||
|
||||
protected virtual void OnTargetFail(Mobile m)
|
||||
{
|
||||
if (_Target.User == m && _Target.Result == TargetResult.Invalid)
|
||||
{
|
||||
m.SendMessage("That is not a valid target.");
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OpenGump(Mobile m, TEntity t)
|
||||
{
|
||||
if (_Gump != null)
|
||||
{
|
||||
_Gump.Close();
|
||||
_Gump = null;
|
||||
}
|
||||
|
||||
m.SendMessage("Select a color from the chart...");
|
||||
|
||||
_Gump = new HueSelector(m)
|
||||
{
|
||||
PreviewIcon = GetPreviewIcon(t),
|
||||
Hues = Hues.ToArray(),
|
||||
AcceptCallback = hue =>
|
||||
{
|
||||
_Gump = null;
|
||||
ApplyHue(m, t, hue);
|
||||
},
|
||||
CancelCallback = hue => _Gump = null
|
||||
};
|
||||
|
||||
_Gump.Send();
|
||||
}
|
||||
|
||||
public virtual int GetPreviewIcon(TEntity t)
|
||||
{
|
||||
return HueSelector.DefaultIcon;
|
||||
}
|
||||
|
||||
protected virtual void ApplyHue(Mobile m, TEntity t, int hue)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (hue < 0 || hue >= 3000)
|
||||
{
|
||||
m.SendMessage(0x22, "You cannot use an invalid hue.");
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
var item = t as Item;
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
if (item.Hue == hue)
|
||||
{
|
||||
m.SendMessage(0x22, "The item is already that color.");
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
item.Hue = hue;
|
||||
m.SendMessage(0x55, "The item has been recolored.");
|
||||
Delete();
|
||||
return;
|
||||
}
|
||||
|
||||
var mob = t as Mobile;
|
||||
|
||||
if (mob != null)
|
||||
{
|
||||
if (mob.Hue == hue)
|
||||
{
|
||||
m.SendMessage(0x22, "{0} skin is already that color.", mob == m ? "Your" : "Their");
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
mob.Hue = hue;
|
||||
m.SendMessage(0x55, "{0} skin has been recolored.", mob == m ? "Your" : "Their");
|
||||
Delete();
|
||||
return;
|
||||
}
|
||||
|
||||
m.SendMessage(0x22, "Could not recolor that object.");
|
||||
}
|
||||
|
||||
public override void OnDelete()
|
||||
{
|
||||
base.OnDelete();
|
||||
|
||||
_Gump = null;
|
||||
_Target = null;
|
||||
|
||||
Hues.Free(true);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
|
||||
writer.WriteList(Hues, writer.Write);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
|
||||
Hues = reader.ReadList(reader.ReadInt);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class ItemHueDeed<TItem> : BaseHueDeed<TItem>
|
||||
where TItem : Item
|
||||
{
|
||||
public override string TargetUsage => "an item";
|
||||
|
||||
public ItemHueDeed()
|
||||
{ }
|
||||
|
||||
public ItemHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void OpenGump(Mobile m, TItem t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < AccessLevel.GameMaster)
|
||||
{
|
||||
if (!t.Movable && !t.IsAccessibleTo(m))
|
||||
{
|
||||
m.SendMessage("That item is not accessible.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!t.IsChildOf(m.Backpack) && t.RootParent != m)
|
||||
{
|
||||
m.SendMessage("That item must be equipped or in your pack to recolor it.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override int GetPreviewIcon(TItem t)
|
||||
{
|
||||
return t == null ? HueSelector.DefaultIcon : t.ItemID;
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class MobileHueDeed<TMobile> : BaseHueDeed<TMobile>
|
||||
where TMobile : Mobile
|
||||
{
|
||||
public override string TargetUsage => "a mobile";
|
||||
|
||||
public MobileHueDeed()
|
||||
{ }
|
||||
|
||||
public MobileHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void OpenGump(Mobile m, TMobile t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < t.AccessLevel)
|
||||
{
|
||||
m.SendMessage("They are not accessible.");
|
||||
return;
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override int GetPreviewIcon(TMobile t)
|
||||
{
|
||||
return t == null ? HueSelector.DefaultIcon : ShrinkTable.Lookup(t);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class SkinHueDeed : MobileHueDeed<PlayerMobile>
|
||||
{
|
||||
public override string TargetUsage => "your character";
|
||||
|
||||
[Constructable]
|
||||
public SkinHueDeed()
|
||||
{
|
||||
Name = "Skin Recolor Deed";
|
||||
AddHueRange(1002, 57);
|
||||
}
|
||||
|
||||
public SkinHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void BeginTarget(Mobile m)
|
||||
{
|
||||
OpenGump(m, m as PlayerMobile);
|
||||
}
|
||||
|
||||
protected override void OpenGump(Mobile m, PlayerMobile t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < AccessLevel.GameMaster)
|
||||
{
|
||||
if (m != t)
|
||||
{
|
||||
m.SendMessage("You can only recolor your own skin.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class PetHueDeed : MobileHueDeed<BaseCreature>
|
||||
{
|
||||
public override string TargetUsage => "your pet";
|
||||
|
||||
[Constructable]
|
||||
public PetHueDeed()
|
||||
{
|
||||
Name = "Pet Recolor Deed";
|
||||
AddHueRange(2301, 18);
|
||||
}
|
||||
|
||||
public PetHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void OpenGump(Mobile m, BaseCreature t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < AccessLevel.GameMaster)
|
||||
{
|
||||
if (t.GetMaster() != m)
|
||||
{
|
||||
m.SendMessage("You can only recolor the skin of pets that you own.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class WeaponHueDeed : ItemHueDeed<BaseWeapon>
|
||||
{
|
||||
public override string TargetUsage => "a weapon";
|
||||
|
||||
[Constructable]
|
||||
public WeaponHueDeed()
|
||||
{
|
||||
Name = "Weapon Recolor Deed";
|
||||
AddHueRange(2401, 30);
|
||||
}
|
||||
|
||||
public WeaponHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class ArmorHueDeed : ItemHueDeed<BaseArmor>
|
||||
{
|
||||
public override string TargetUsage => "armor";
|
||||
|
||||
[Constructable]
|
||||
public ArmorHueDeed()
|
||||
{
|
||||
Name = "Armor Recolor Deed";
|
||||
AddHueRange(2401, 30);
|
||||
}
|
||||
|
||||
public ArmorHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class ClothingHueDeed : ItemHueDeed<BaseClothing>
|
||||
{
|
||||
public override string TargetUsage => "clothing";
|
||||
|
||||
[Constructable]
|
||||
public ClothingHueDeed()
|
||||
{
|
||||
Name = "Clothing Recolor Deed";
|
||||
AddHueRange(2, 1000);
|
||||
}
|
||||
|
||||
public ClothingHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class JewelHueDeed : ItemHueDeed<BaseJewel>
|
||||
{
|
||||
public override string TargetUsage => "your jewelry";
|
||||
|
||||
[Constructable]
|
||||
public JewelHueDeed()
|
||||
{
|
||||
Name = "Jewelry Recolor Deed";
|
||||
AddHueRange(2401, 30);
|
||||
}
|
||||
|
||||
public JewelHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class QuiverHueDeed : ItemHueDeed<BaseQuiver>
|
||||
{
|
||||
public override string TargetUsage => "your quiver";
|
||||
|
||||
[Constructable]
|
||||
public QuiverHueDeed()
|
||||
{
|
||||
Name = "Quiver Recolor Deed";
|
||||
AddHueRange(2, 1000);
|
||||
}
|
||||
|
||||
public QuiverHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class LightHueDeed : ItemHueDeed<BaseEquipableLight>
|
||||
{
|
||||
public override string TargetUsage => "your light source";
|
||||
|
||||
[Constructable]
|
||||
public LightHueDeed()
|
||||
{
|
||||
Name = "Light Source Recolor Deed";
|
||||
AddHueRange(2401, 30);
|
||||
}
|
||||
|
||||
public LightHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class SpellbookHueDeed : ItemHueDeed<Spellbook>
|
||||
{
|
||||
public override string TargetUsage => "your spellbook";
|
||||
|
||||
[Constructable]
|
||||
public SpellbookHueDeed()
|
||||
{
|
||||
Name = "Spellbook Recolor Deed";
|
||||
AddHueRange(2, 1000);
|
||||
}
|
||||
|
||||
public SpellbookHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class ContainerHueDeed : ItemHueDeed<Container>
|
||||
{
|
||||
public override string TargetUsage => "a container";
|
||||
|
||||
[Constructable]
|
||||
public ContainerHueDeed()
|
||||
{
|
||||
Name = "Container Recolor Deed";
|
||||
AddHueRange(2, 1000);
|
||||
}
|
||||
|
||||
public ContainerHueDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
}
|
||||
723
Scripts/SubSystem/VitaNex/Core/Items/Deeds/NameDeeds.cs
Normal file
723
Scripts/SubSystem/VitaNex/Core/Items/Deeds/NameDeeds.cs
Normal file
@@ -0,0 +1,723 @@
|
||||
#region Header
|
||||
// _,-'/-'/
|
||||
// . __,-; ,'( '/
|
||||
// \. `-.__`-._`:_,-._ _ , . ``
|
||||
// `:-._,------' ` _,`--` -: `_ , ` ,' :
|
||||
// `---..__,,--' (C) 2023 ` -'. -'
|
||||
// # Vita-Nex [http://core.vita-nex.com] #
|
||||
// {o)xxx|===============- # -===============|xxx(o}
|
||||
// # #
|
||||
#endregion
|
||||
|
||||
#region References
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Drawing;
|
||||
|
||||
using Server;
|
||||
using Server.Items;
|
||||
using Server.Misc;
|
||||
using Server.Mobiles;
|
||||
using Server.Targeting;
|
||||
|
||||
using VitaNex.Network;
|
||||
using VitaNex.SuperGumps;
|
||||
using VitaNex.SuperGumps.UI;
|
||||
using VitaNex.Targets;
|
||||
#endregion
|
||||
|
||||
namespace VitaNex.Items
|
||||
{
|
||||
public static class NameDeeds
|
||||
{
|
||||
public static event Action<INameDeed> OnCreated;
|
||||
|
||||
public static void Register<T>(Action<T> onCreated)
|
||||
where T : INameDeed
|
||||
{
|
||||
OnCreated += o =>
|
||||
{
|
||||
if (o is T d)
|
||||
{
|
||||
onCreated(d);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static void InvokeCreated(INameDeed d)
|
||||
{
|
||||
if (OnCreated != null)
|
||||
{
|
||||
OnCreated(d);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public interface INameDeed
|
||||
{
|
||||
List<string> Names { get; }
|
||||
|
||||
void AddName(string name);
|
||||
void AddNames(params string[] names);
|
||||
}
|
||||
|
||||
public abstract class BaseNameDeed<TEntity> : Item, INameDeed
|
||||
where TEntity : IEntity
|
||||
{
|
||||
private SuperGump _Gump;
|
||||
private GenericSelectTarget<TEntity> _Target;
|
||||
|
||||
public List<string> Names { get; private set; }
|
||||
|
||||
public virtual string TargetUsage => "an object";
|
||||
|
||||
public BaseNameDeed()
|
||||
: base(0x14F0)
|
||||
{
|
||||
Names = new List<string>();
|
||||
|
||||
Name = "Rename Deed";
|
||||
Weight = 1.0;
|
||||
LootType = LootType.Blessed;
|
||||
|
||||
Timer.DelayCall(NameDeeds.InvokeCreated, this);
|
||||
}
|
||||
|
||||
public BaseNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public void AddName(string name)
|
||||
{
|
||||
Names.Update(name);
|
||||
}
|
||||
|
||||
public void AddNames(params string[] names)
|
||||
{
|
||||
if (names == null || names.Length == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
foreach (var n in names)
|
||||
{
|
||||
AddName(n);
|
||||
}
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
new ExtendedOPL(list)
|
||||
{
|
||||
{"Use: Change the name of {0}".WrapUOHtmlColor(Color.LawnGreen), TargetUsage}
|
||||
}.Apply();
|
||||
}
|
||||
|
||||
public override void OnDoubleClick(Mobile m)
|
||||
{
|
||||
if (this.CheckDoubleClick(m, true, false, 2, true))
|
||||
{
|
||||
BeginTarget(m);
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void BeginTarget(Mobile m)
|
||||
{
|
||||
if (_Target != null)
|
||||
{
|
||||
if (_Target.User != null && _Target.User.Target == _Target)
|
||||
{
|
||||
_Target.Cancel(_Target.User, TargetCancelType.Overriden);
|
||||
}
|
||||
|
||||
_Target = null;
|
||||
}
|
||||
|
||||
m.SendMessage("Target an object to rename...");
|
||||
|
||||
_Target = new GenericSelectTarget<TEntity>(
|
||||
(u, t) =>
|
||||
{
|
||||
_Target = null;
|
||||
OpenGump(u, t);
|
||||
},
|
||||
u =>
|
||||
{
|
||||
OnTargetFail(u);
|
||||
_Target = null;
|
||||
});
|
||||
|
||||
m.Target = _Target;
|
||||
}
|
||||
|
||||
protected virtual void OnTargetFail(Mobile m)
|
||||
{
|
||||
if (_Target.User == m && _Target.Result == TargetResult.Invalid)
|
||||
{
|
||||
m.SendMessage("That is not a valid target.");
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void OpenGump(Mobile m, TEntity t)
|
||||
{
|
||||
if (_Gump != null)
|
||||
{
|
||||
_Gump.Close();
|
||||
_Gump = null;
|
||||
}
|
||||
|
||||
if (Names != null && Names.Count > 0)
|
||||
{
|
||||
m.SendMessage("Select a name from the registry...");
|
||||
|
||||
var opts = new MenuGumpOptions();
|
||||
|
||||
foreach (var name in Names.OrderByNatural())
|
||||
{
|
||||
var n = name;
|
||||
|
||||
opts.AppendEntry(
|
||||
new ListGumpEntry(
|
||||
n,
|
||||
() =>
|
||||
{
|
||||
_Gump = null;
|
||||
ApplyName(m, t, n);
|
||||
}));
|
||||
}
|
||||
|
||||
var menu = new MenuGump(m, null, opts);
|
||||
|
||||
menu.OnActionClose += HandleGumpClose;
|
||||
_Gump = menu.Send();
|
||||
}
|
||||
else
|
||||
{
|
||||
string name;
|
||||
int limit;
|
||||
|
||||
if (t is Item)
|
||||
{
|
||||
name = (t as Item).Name;
|
||||
limit = 20;
|
||||
}
|
||||
else if (t is Mobile)
|
||||
{
|
||||
name = (t as Mobile).RawName;
|
||||
limit = 20;
|
||||
}
|
||||
else
|
||||
{
|
||||
name = String.Empty;
|
||||
limit = 0;
|
||||
}
|
||||
|
||||
var dialog = new InputDialogGump(m)
|
||||
{
|
||||
Title = "Name Selection",
|
||||
Html = "Type the name you wish to use and click OK to accept.",
|
||||
InputText = name ?? String.Empty,
|
||||
Limit = limit,
|
||||
Callback = (b, n) =>
|
||||
{
|
||||
_Gump = null;
|
||||
ApplyName(m, t, n);
|
||||
}
|
||||
};
|
||||
|
||||
dialog.OnActionClose += HandleGumpClose;
|
||||
_Gump = dialog.Send();
|
||||
}
|
||||
}
|
||||
|
||||
private void HandleGumpClose(SuperGump g, bool all)
|
||||
{
|
||||
if (_Gump == g && all)
|
||||
{
|
||||
_Gump.OnActionClose -= HandleGumpClose;
|
||||
_Gump = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected virtual void ApplyName(Mobile m, TEntity t, string name)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (String.IsNullOrWhiteSpace(name))
|
||||
{
|
||||
m.SendMessage(0x22, "You cannot use a blank name.");
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
name = Utility.FixHtml(name.Trim());
|
||||
|
||||
if (!NameVerification.Validate(name, 2, 20, true, t is Item, true, 1, NameVerification.SpaceDashPeriodQuote))
|
||||
{
|
||||
m.SendMessage(0x22, "That name is unacceptable.");
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
var item = t as Item;
|
||||
|
||||
if (item != null)
|
||||
{
|
||||
if (item.Name == name)
|
||||
{
|
||||
m.SendMessage(0x22, "The item is already named {0}.", name);
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
item.Name = name;
|
||||
|
||||
m.SendMessage(0x55, "The item has been renamed.");
|
||||
Delete();
|
||||
return;
|
||||
}
|
||||
|
||||
var mob = t as Mobile;
|
||||
|
||||
if (mob != null)
|
||||
{
|
||||
if (mob.RawName == name)
|
||||
{
|
||||
m.SendMessage(0x22, "{0} are already named {1}.", mob == m ? "You" : "They", name);
|
||||
OpenGump(m, t);
|
||||
return;
|
||||
}
|
||||
|
||||
mob.RawName = name;
|
||||
|
||||
m.SendMessage(0x55, "{0} name has been changed.", mob == m ? "Your" : "Their");
|
||||
Delete();
|
||||
|
||||
if (mob is PlayerMobile)
|
||||
{
|
||||
var pm = (PlayerMobile)mob;
|
||||
|
||||
PlayerNames.Register(pm);
|
||||
PlayerNames.ValidateSharedName(pm);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
m.SendMessage(0x22, "Could not rename that object.");
|
||||
}
|
||||
|
||||
public override void OnDelete()
|
||||
{
|
||||
base.OnDelete();
|
||||
|
||||
_Gump = null;
|
||||
_Target = null;
|
||||
|
||||
Names.Free(true);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
|
||||
writer.WriteList(Names, writer.Write);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
|
||||
Names = reader.ReadList(reader.ReadString);
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class ItemNameDeed<TItem> : BaseNameDeed<TItem>
|
||||
where TItem : Item
|
||||
{
|
||||
public override string TargetUsage => "an item";
|
||||
|
||||
public ItemNameDeed()
|
||||
{ }
|
||||
|
||||
public ItemNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void OpenGump(Mobile m, TItem t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < AccessLevel.GameMaster)
|
||||
{
|
||||
if (!t.Movable && !t.IsAccessibleTo(m))
|
||||
{
|
||||
m.SendMessage("That item is not accessible.");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!t.IsChildOf(m.Backpack) && t.RootParent != m)
|
||||
{
|
||||
m.SendMessage("That item must be equipped or in your pack to rename it.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public abstract class MobileNameDeed<TMobile> : BaseNameDeed<TMobile>
|
||||
where TMobile : Mobile
|
||||
{
|
||||
public override string TargetUsage => "a mobile";
|
||||
|
||||
public MobileNameDeed()
|
||||
{ }
|
||||
|
||||
public MobileNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void OpenGump(Mobile m, TMobile t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < t.AccessLevel)
|
||||
{
|
||||
m.SendMessage("They are not accessible.");
|
||||
return;
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class PlayerNameDeed : MobileNameDeed<PlayerMobile>
|
||||
{
|
||||
public override string TargetUsage => "your character";
|
||||
|
||||
[Constructable]
|
||||
public PlayerNameDeed()
|
||||
{
|
||||
Name = "Player Rename Deed";
|
||||
}
|
||||
|
||||
public PlayerNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
protected override void BeginTarget(Mobile m)
|
||||
{
|
||||
OpenGump(m, m as PlayerMobile);
|
||||
}
|
||||
|
||||
protected override void OpenGump(Mobile m, PlayerMobile t)
|
||||
{
|
||||
if (m == null || t == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (m.AccessLevel < AccessLevel.GameMaster)
|
||||
{
|
||||
if (m != t)
|
||||
{
|
||||
m.SendMessage("You can only change your own name.");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
base.OpenGump(m, t);
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class WeaponNameDeed : ItemNameDeed<BaseWeapon>
|
||||
{
|
||||
public override string TargetUsage => "your weapon";
|
||||
|
||||
[Constructable]
|
||||
public WeaponNameDeed()
|
||||
{
|
||||
Name = "Weapon Rename Deed";
|
||||
}
|
||||
|
||||
public WeaponNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class ArmorNameDeed : ItemNameDeed<BaseArmor>
|
||||
{
|
||||
public override string TargetUsage => "your armor";
|
||||
|
||||
[Constructable]
|
||||
public ArmorNameDeed()
|
||||
{
|
||||
Name = "Armor Rename Deed";
|
||||
}
|
||||
|
||||
public ArmorNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class ClothingNameDeed : ItemNameDeed<BaseClothing>
|
||||
{
|
||||
public override string TargetUsage => "your clothing";
|
||||
|
||||
[Constructable]
|
||||
public ClothingNameDeed()
|
||||
{
|
||||
Name = "Clothing Rename Deed";
|
||||
}
|
||||
|
||||
public ClothingNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class JewelNameDeed : ItemNameDeed<BaseJewel>
|
||||
{
|
||||
public override string TargetUsage => "your jewelry";
|
||||
|
||||
[Constructable]
|
||||
public JewelNameDeed()
|
||||
{
|
||||
Name = "Jewelry Rename Deed";
|
||||
}
|
||||
|
||||
public JewelNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class QuiverNameDeed : ItemNameDeed<BaseQuiver>
|
||||
{
|
||||
public override string TargetUsage => "your quiver";
|
||||
|
||||
[Constructable]
|
||||
public QuiverNameDeed()
|
||||
{
|
||||
Name = "Quiver Rename Deed";
|
||||
}
|
||||
|
||||
public QuiverNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class LightNameDeed : ItemNameDeed<BaseEquipableLight>
|
||||
{
|
||||
public override string TargetUsage => "your light source";
|
||||
|
||||
[Constructable]
|
||||
public LightNameDeed()
|
||||
{
|
||||
Name = "Light Source Rename Deed";
|
||||
}
|
||||
|
||||
public LightNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class SpellbookNameDeed : ItemNameDeed<Spellbook>
|
||||
{
|
||||
public override string TargetUsage => "your spellbook";
|
||||
|
||||
[Constructable]
|
||||
public SpellbookNameDeed()
|
||||
{
|
||||
Name = "Spellbook Rename Deed";
|
||||
}
|
||||
|
||||
public SpellbookNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
|
||||
public class ContainerNameDeed : ItemNameDeed<Container>
|
||||
{
|
||||
public override string TargetUsage => "a container";
|
||||
|
||||
[Constructable]
|
||||
public ContainerNameDeed()
|
||||
{
|
||||
Name = "Container Rename Deed";
|
||||
}
|
||||
|
||||
public ContainerNameDeed(Serial serial)
|
||||
: base(serial)
|
||||
{ }
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
|
||||
writer.SetVersion(0);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
|
||||
reader.GetVersion();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user