servuo/Scripts/Items/Resource/Cloth.cs
VitaNex 7851c5e88c + Removed most file header regions.
+ Add MONO to Makefile compile definitions.
+ Update Ultima SDK to support MONO compile definition.
+ Rename Properties Gump parent directory to prevent VS issues.
+ Console error messages will now use red instead of dark red font.
+ Add crash state handler function to Core.
+ AI optimizations and housekeeping.
+ Context Menu optimizations and housekeeping.
+ Add ability to drop throttled packets.
+ Add string parsing support to Rectangle3D.
+ Optimize guild messages and chat.
+ IAddon implements IChopable.
+ Add more flexibility for altering Mobile names.
+ Add ability to enable or disable OPL for individual mobiles.
+ Optimize damaging regions and ensure timers are removed properly.
+ Update Welcome Timer with more intuitive message groups.
+ Normalize all virtue related objects to the Server.Services.Virtues namespace.
+ Add ability for ISpawner to append OPL and Context Menus to their spawn.
+ Add EventSink events for obtaining items, equipping items, context menus, and world broadcasts.
+ Add ability to lock a creature's direction and movement regardless of AI manipulation.
+ Add ability to dynamically change a creature's approach range and wait state.
+ Add extended enumeration features for AOS attributes.
+ Add ability to control whether creatures have blood, and its color.
+ Expose corpse flag manipulation methods.
+ Add ability to prevent criminal action when looting a corpse.
+ Corpse will now be permanently tagged as murderer at time of death if owner is a murderer.
+ Add TextDefinition support for Commodity Deed descriptions.
+ House add-on and component optimizations and housekeeping.
+ Item light is no longer backed by the direction property.
+ ITool implements IEntity.
+ Prevent trading of Siege Bless items.
+ Guards are naturally be immune to guards.
+ Siege Shard initialization housekeeping.
+ Character Creation housekeeping.
+ Generic commands housekeeping.
+ Add Mark command for staff.
2018-07-19 22:12:52 +01:00

224 lines
No EOL
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();
}
}
}
}