Files
abysmal-isle/Scripts/Items/Resource/Cloth.cs
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

224 lines
5.1 KiB
C#

using System;
using Server.Network;
namespace Server.Items
{
[FlipableAttribute(0x1766, 0x1768)]
public class Cloth : Item, IScissorable, IDyable, ICommodity
{
[Constructable]
public Cloth()
: this(1)
{
}
[Constructable]
public Cloth(int amount)
: base(0x1766)
{
this.Stackable = true;
this.Amount = amount;
}
public Cloth(Serial serial)
: base(serial)
{
}
public override double DefaultWeight
{
get
{
return 0.1;
}
}
TextDefinition ICommodity.Description
{
get
{
return this.LabelNumber;
}
}
bool ICommodity.IsDeedable
{
get
{
return true;
}
}
public bool Dye(Mobile from, DyeTub sender)
{
if (this.Deleted)
return false;
this.Hue = sender.DyedHue;
return true;
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public override void OnSingleClick(Mobile from)
{
int number = (this.Amount == 1) ? 1049124 : 1049123;
from.Send(new MessageLocalized(this.Serial, this.ItemID, MessageType.Regular, 0x3B2, 3, number, "", this.Amount.ToString()));
}
public bool Scissor(Mobile from, Scissors scissors)
{
if (this.Deleted || !from.CanSee(this))
return false;
base.ScissorHelper(from, new Bandage(), 1);
return true;
}
}
public class CutUpCloth : Item
{
public override int LabelNumber { get { return 1044458; } } // cut-up cloth
[Constructable]
public CutUpCloth()
: base(0x1767)
{
}
public CutUpCloth(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public void CutUp(Mobile from, Item[] items)
{
//Container backpack = from.Backpack;
for (int i = 0; i < items.Length; i++)
{
BoltOfCloth boc = items[i] as BoltOfCloth;
if (boc != null)
boc.Scissor(from, null);
}
}
}
public class CombineCloth : Item
{
public override int LabelNumber { get { return 1044459; } } // combine cloth
[Constructable]
public CombineCloth()
: base(0x1767)
{
}
public CombineCloth(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
public static bool CheckHue(int hue, int[] hues, out int count)
{
int result = 0;
bool success = true;
for (int i = 0; i < hues.Length; i++)
{
if (hues[i] == hue)
{
result = i;
success = false;
}
}
count = result;
return success;
}
public void Combine(Mobile from, Item[] items)
{
Container backpack = from.Backpack;
int[] hues = new int[backpack.Items.Count];
int[] amounts = new int[backpack.Items.Count];
for (int i = 0; i < items.Length; i++)
{
Cloth c = items[i] as Cloth;
if (c != null)
{
int count;
if (CheckHue(c.Hue, hues, out count))
{
hues[i] = c.Hue;
amounts[i] = c.Amount;
}
else
{
amounts[count] += c.Amount;
}
c.Delete();
}
}
for (int i = 0; i < hues.Length; i++)
{
Cloth cloth = new Cloth();
cloth.Hue = hues[i];
cloth.Amount = amounts[i];
if (cloth.Amount > 0)
backpack.DropItem(cloth);
else
cloth.Delete();
}
}
}
}