Files
Unstable Kitsune b918192e4e Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
2023-11-28 23:20:26 -05:00

233 lines
8.3 KiB
C#

using System;
using Server;
using Server.Items;
using Server.Mobiles;
using Server.Gumps;
using Server.Guilds;
using System.Collections.Generic;
namespace Server.Engines.VvV
{
public class SilverTrader : BaseVendor
{
public override bool IsActiveVendor { get { return false; } }
public override bool DisallowAllMoves { get { return true; } }
public override bool ClickTitle { get { return true; } }
public override bool CanTeach { get { return false; } }
protected List<SBInfo> m_SBInfos = new List<SBInfo>();
protected override List<SBInfo> SBInfos { get { return this.m_SBInfos; } }
public override void InitSBInfo() { }
[Constructable]
public SilverTrader() : base("the Silver Trader")
{
}
public override void InitBody()
{
base.InitBody();
Name = NameList.RandomName("male");
SpeechHue = 0x3B2;
Hue = Utility.RandomSkinHue();
Body = 0x190;
}
public override void InitOutfit()
{
Robe robe = new Robe();
robe.ItemID = 0x2684;
robe.Name = "a robe";
SetWearable(robe, 1109);
Timer.DelayCall(TimeSpan.FromSeconds(10), StockInventory);
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1155513); // Vice vs Virtue Reward Vendor
}
private DateTime _NextSpeak;
public override void OnMovement(Mobile m, Point3D oldLocation)
{
base.OnMovement(m, oldLocation);
if (_NextSpeak < DateTime.UtcNow && ViceVsVirtueSystem.IsVvV(m) && InRange(m.Location, 6) && m.Race == Race.Gargoyle)
{
SayTo(m, 1155534); // I will convert your human artifacts to gargoyle versions if you hand them to me.
_NextSpeak = DateTime.UtcNow + TimeSpan.FromSeconds(25);
}
}
public override void OnDoubleClick(Mobile m)
{
if (ViceVsVirtueSystem.Enabled && m is PlayerMobile && InRange(m.Location, 3))
{
if (ViceVsVirtueSystem.IsVvV(m))
{
m.SendGump(new VvVRewardGump(this, (PlayerMobile)m));
}
else
{
SayTo(m, 1155585); // You have no silver to trade with. Join Vice vs Virtue and return to me.
}
}
}
public void StockInventory()
{
if (Backpack == null)
AddItem(new Backpack());
foreach (CollectionItem item in VvVRewards.Rewards)
{
if (item.Tooltip == 0)
{
if (Backpack.GetAmount(item.Type) > 0)
{
Item itm = Backpack.FindItemByType(item.Type);
if (itm is IVvVItem)
((IVvVItem)itm).IsVvVItem = true;
continue;
}
Item i = Activator.CreateInstance(item.Type) as Item;
if (i != null)
{
if (i is IOwnerRestricted)
((IOwnerRestricted)i).OwnerName = "Your Player Name";
if (i is IVvVItem)
((IVvVItem)i).IsVvVItem = true;
NegativeAttributes neg = RunicReforging.GetNegativeAttributes(i);
if (neg != null)
{
neg.Antique = 1;
if (i is IDurability && ((IDurability)i).MaxHitPoints == 0)
{
((IDurability)i).MaxHitPoints = 255;
((IDurability)i).HitPoints = 255;
}
}
ViceVsVirtueSystem.Instance.AddVvVItem(i, true);
Backpack.DropItem(i);
}
}
}
}
private Type[][] _Table =
{
new Type[] { typeof(CrimsonCincture), typeof(GargishCrimsonCincture) },
new Type[] { typeof(MaceAndShieldGlasses), typeof(GargishMaceAndShieldGlasses) },
new Type[] { typeof(WizardsCrystalGlasses), typeof(GargishWizardsCrystalGlasses) },
new Type[] { typeof(FoldedSteelGlasses), typeof(GargishFoldedSteelGlasses) },
};
public override bool OnDragDrop(Mobile from, Item dropped)
{
if (ViceVsVirtueSystem.IsVvV(from))
{
if (!(dropped is IOwnerRestricted) || ((IOwnerRestricted)dropped).Owner == from)
{
if (dropped is IVvVItem && from.Race == Race.Gargoyle)
{
foreach (var t in _Table)
{
if (dropped.GetType() == t[0])
{
IDurability dur = dropped as IDurability;
if (dur != null && dur.MaxHitPoints == 255 && dur.HitPoints == 255)
{
var item = Loot.Construct(t[1]);
if (item != null)
{
VvVRewards.OnRewardItemCreated(from, item);
if (item is GargishCrimsonCincture)
{
((GargishCrimsonCincture)item).Attributes.BonusDex = 10;
}
if (item is GargishMaceAndShieldGlasses)
{
((GargishMaceAndShieldGlasses)item).Attributes.WeaponDamage = 10;
}
if (item is GargishFoldedSteelGlasses)
{
((GargishFoldedSteelGlasses)item).Attributes.DefendChance = 25;
}
if (item is GargishWizardsCrystalGlasses)
{
((GargishWizardsCrystalGlasses)item).PhysicalBonus = 5;
((GargishWizardsCrystalGlasses)item).FireBonus = 5;
((GargishWizardsCrystalGlasses)item).ColdBonus = 5;
((GargishWizardsCrystalGlasses)item).PoisonBonus = 5;
((GargishWizardsCrystalGlasses)item).EnergyBonus = 5;
}
from.AddToBackpack(item);
dropped.Delete();
return true;
}
}
}
}
}
else
{
return false;
}
}
}
SayTo(from, 1157365); // I'm sorry, I cannot accept this item.
return false;
}
public SilverTrader(Serial serial) : base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(1);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version == 0)
{
Timer.DelayCall(() =>
{
ColUtility.SafeDelete<Item>(Backpack.Items, null);
});
}
Timer.DelayCall(TimeSpan.FromSeconds(5), StockInventory);
}
}
}