Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
328
Scripts/Items/Equipment/Clothing/FirstAidBelt.cs
Normal file
328
Scripts/Items/Equipment/Clothing/FirstAidBelt.cs
Normal file
@@ -0,0 +1,328 @@
|
||||
using System;
|
||||
using System.Linq;
|
||||
|
||||
namespace Server.Items
|
||||
{
|
||||
public class FirstAidBelt : Container
|
||||
{
|
||||
public override bool IsArtifact { get { return true; } }
|
||||
public override int LabelNumber { get { return 1158681; } } // First Aid Belt
|
||||
|
||||
public override int DefaultGumpID { get { return 0x3C; } }
|
||||
public override int DefaultMaxItems { get { return 1; } }
|
||||
public override int DefaultMaxWeight { get { return 100; } }
|
||||
public override double DefaultWeight { get { return 2.0; } }
|
||||
|
||||
private int m_WeightReduction;
|
||||
private int m_HealingBonus;
|
||||
private AosAttributes m_Attributes;
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int WeightReduction
|
||||
{
|
||||
get { return m_WeightReduction; }
|
||||
set
|
||||
{
|
||||
m_WeightReduction = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public int HealingBonus
|
||||
{
|
||||
get { return m_HealingBonus; }
|
||||
set
|
||||
{
|
||||
m_HealingBonus = value;
|
||||
InvalidateProperties();
|
||||
}
|
||||
}
|
||||
|
||||
[CommandProperty(AccessLevel.GameMaster)]
|
||||
public AosAttributes Attributes { get { return m_Attributes; } set { } }
|
||||
|
||||
public Item Bandage { get { return Items.Count > 0 ? Items[0] : null; } }
|
||||
public int MaxBandage { get { return DefaultMaxWeight * 10; } }
|
||||
|
||||
[Constructable]
|
||||
public FirstAidBelt()
|
||||
: base(0xA1F6)
|
||||
{
|
||||
Weight = 2.0;
|
||||
Layer = Layer.Waist;
|
||||
m_Attributes = new AosAttributes(this);
|
||||
}
|
||||
|
||||
public override void OnAfterDuped(Item newItem)
|
||||
{
|
||||
var belt = newItem as FirstAidBelt;
|
||||
|
||||
if (belt != null)
|
||||
{
|
||||
belt.m_Attributes = new AosAttributes(newItem, m_Attributes);
|
||||
}
|
||||
|
||||
base.OnAfterDuped(newItem);
|
||||
}
|
||||
|
||||
public FirstAidBelt(Serial serial)
|
||||
: base(serial)
|
||||
{
|
||||
}
|
||||
|
||||
public override bool DisplaysContent { get { return false; } }
|
||||
|
||||
public override void UpdateTotal(Item sender, TotalType type, int delta)
|
||||
{
|
||||
InvalidateProperties();
|
||||
|
||||
base.UpdateTotal(sender, type, delta);
|
||||
}
|
||||
|
||||
public override int GetTotal(TotalType type)
|
||||
{
|
||||
int total = base.GetTotal(type);
|
||||
|
||||
if (type == TotalType.Weight)
|
||||
total -= total * m_WeightReduction / 100;
|
||||
|
||||
return total;
|
||||
}
|
||||
|
||||
private static readonly Type[] m_Bandage = new Type[]
|
||||
{
|
||||
typeof(Bandage), typeof(EnhancedBandage)
|
||||
};
|
||||
|
||||
public bool CheckType(Item item)
|
||||
{
|
||||
Type type = item.GetType();
|
||||
Item bandage = Bandage;
|
||||
|
||||
if (bandage != null)
|
||||
{
|
||||
if (bandage.GetType() == type)
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < m_Bandage.Length; i++)
|
||||
{
|
||||
if (type == m_Bandage[i])
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool CheckHold(Mobile m, Item item, bool message, bool checkItems, int plusItems, int plusWeight)
|
||||
{
|
||||
if (!Movable)
|
||||
return false;
|
||||
|
||||
if (!CheckType(item))
|
||||
{
|
||||
if (message)
|
||||
m.SendLocalizedMessage(1074836); // The container can not hold that type of object.
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!checkItems || Items.Count < DefaultMaxItems)
|
||||
{
|
||||
int currentAmount = 0;
|
||||
|
||||
Items.ForEach(i => currentAmount += i.Amount);
|
||||
|
||||
if (item.Amount + currentAmount <= MaxBandage)
|
||||
return base.CheckHold(m, item, message, checkItems, plusItems, plusWeight);
|
||||
else
|
||||
m.SendLocalizedMessage(1080017); // That container cannot hold more items.
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override bool CheckStack(Mobile from, Item item)
|
||||
{
|
||||
if (!CheckType(item))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
Item bandage = Bandage;
|
||||
|
||||
if (bandage != null)
|
||||
{
|
||||
int currentAmount = Items.Sum(i => i.Amount);
|
||||
|
||||
if (item.Amount + currentAmount <= MaxBandage)
|
||||
return base.CheckStack(from, item);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public override void AddItem(Item dropped)
|
||||
{
|
||||
base.AddItem(dropped);
|
||||
|
||||
InvalidateWeight();
|
||||
}
|
||||
|
||||
public override void RemoveItem(Item dropped)
|
||||
{
|
||||
base.RemoveItem(dropped);
|
||||
|
||||
InvalidateWeight();
|
||||
}
|
||||
|
||||
public override void GetProperties(ObjectPropertyList list)
|
||||
{
|
||||
base.GetProperties(list);
|
||||
|
||||
if (m_HealingBonus > 0)
|
||||
list.Add(1158679, m_HealingBonus.ToString()); // ~1_VALUE~% Bandage Healing Bonus
|
||||
|
||||
int prop;
|
||||
|
||||
if ((prop = m_Attributes.DefendChance) != 0)
|
||||
list.Add(1060408, prop.ToString()); // defense chance increase ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.BonusDex) != 0)
|
||||
list.Add(1060409, prop.ToString()); // dexterity bonus ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.EnhancePotions) != 0)
|
||||
list.Add(1060411, prop.ToString()); // enhance potions ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.CastRecovery) != 0)
|
||||
list.Add(1060412, prop.ToString()); // faster cast recovery ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.CastSpeed) != 0)
|
||||
list.Add(1060413, prop.ToString()); // faster casting ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.AttackChance) != 0)
|
||||
list.Add(1060415, prop.ToString()); // hit chance increase ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.BonusHits) != 0)
|
||||
list.Add(1060431, prop.ToString()); // hit point increase ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.BonusInt) != 0)
|
||||
list.Add(1060432, prop.ToString()); // intelligence bonus ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.LowerManaCost) != 0)
|
||||
list.Add(1060433, prop.ToString()); // lower mana cost ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.LowerRegCost) != 0)
|
||||
list.Add(1060434, prop.ToString()); // lower reagent cost ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.Luck) != 0)
|
||||
list.Add(1060436, prop.ToString()); // luck ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.BonusMana) != 0)
|
||||
list.Add(1060439, prop.ToString()); // mana increase ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.RegenMana) != 0)
|
||||
list.Add(1060440, prop.ToString()); // mana regeneration ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.NightSight) != 0)
|
||||
list.Add(1060441); // night sight
|
||||
|
||||
if ((prop = m_Attributes.ReflectPhysical) != 0)
|
||||
list.Add(1060442, prop.ToString()); // reflect physical damage ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.RegenStam) != 0)
|
||||
list.Add(1060443, prop.ToString()); // stamina regeneration ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.RegenHits) != 0)
|
||||
list.Add(1060444, prop.ToString()); // hit point regeneration ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.SpellDamage) != 0)
|
||||
list.Add(1060483, prop.ToString()); // spell damage increase ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.BonusStam) != 0)
|
||||
list.Add(1060484, prop.ToString()); // stamina increase ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.BonusStr) != 0)
|
||||
list.Add(1060485, prop.ToString()); // strength bonus ~1_val~
|
||||
|
||||
if ((prop = m_Attributes.WeaponSpeed) != 0)
|
||||
list.Add(1060486, prop.ToString()); // swing speed increase ~1_val~%
|
||||
|
||||
if ((prop = m_Attributes.LowerAmmoCost) > 0)
|
||||
list.Add(1075208, prop.ToString()); // Lower Ammo Cost ~1_Percentage~%
|
||||
|
||||
double weight = 0;
|
||||
|
||||
if (Bandage != null)
|
||||
weight = Bandage.Weight * Bandage.Amount;
|
||||
|
||||
list.Add(1072241, "{0}\t{1}\t{2}\t{3}", Items.Count, DefaultMaxItems, (int)weight, DefaultMaxWeight); // Contents: ~1_COUNT~/~2_MAXCOUNT items, ~3_WEIGHT~/~4_MAXWEIGHT~ stones
|
||||
|
||||
if ((prop = m_WeightReduction) != 0)
|
||||
list.Add(1072210, prop.ToString()); // Weight reduction: ~1_PERCENTAGE~%
|
||||
}
|
||||
|
||||
public override void Serialize(GenericWriter writer)
|
||||
{
|
||||
base.Serialize(writer);
|
||||
writer.Write(1); // version
|
||||
|
||||
if (!m_Attributes.IsEmpty)
|
||||
{
|
||||
writer.Write(1);
|
||||
m_Attributes.Serialize(writer);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(0);
|
||||
}
|
||||
|
||||
writer.Write(m_HealingBonus);
|
||||
writer.Write(m_WeightReduction);
|
||||
}
|
||||
|
||||
public override void Deserialize(GenericReader reader)
|
||||
{
|
||||
base.Deserialize(reader);
|
||||
int version = reader.ReadInt();
|
||||
|
||||
switch (version)
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
if (reader.ReadInt() == 1)
|
||||
{
|
||||
m_Attributes = new AosAttributes(this, reader);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_Attributes = new AosAttributes(this);
|
||||
}
|
||||
|
||||
m_HealingBonus = reader.ReadInt();
|
||||
m_WeightReduction = reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
case 0:
|
||||
{
|
||||
m_Attributes = new AosAttributes(this);
|
||||
m_WeightReduction = reader.ReadInt();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void InvalidateWeight()
|
||||
{
|
||||
if (RootParent is Mobile)
|
||||
{
|
||||
Mobile m = (Mobile)RootParent;
|
||||
|
||||
m.UpdateTotals();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user