Files
abysmal-isle/Scripts/Items/Internal/ItemSockets/Caddellite.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

198 lines
6.0 KiB
C#

using System;
using Server;
using Server.Mobiles;
using Server.Engines.Craft;
using Server.Spells;
using Server.Engines.Points;
using Server.Engines.Khaldun;
using Server.Engines.Harvest;
namespace Server.Items
{
public class Caddellite : ItemSocket
{
public Caddellite()
{
}
public override void GetProperties(ObjectPropertyList list)
{
if (Owner != null && !(Owner is ICombatEquipment) && !(Owner is Spellbook))
{
list.Add(1158662); // Caddellite Infused
}
}
public static void Initialize()
{
EventSink.Login += OnLogin;
}
public static bool CheckDamage(Mobile from, Server.DamageType type)
{
if (from is BaseCreature)
{
if (KhaldunTastyTreat.UnderInfluence((BaseCreature)from))
{
return true;
}
return false;
}
else if (from.Player)
{
Item damager = from.FindItemOnLayer(Layer.OneHanded);
if (damager == null)
{
damager = from.FindItemOnLayer(Layer.TwoHanded);
}
if (damager != null && damager.HasSocket<Caddellite>())
{
switch (type)
{
case Server.DamageType.Melee:
case Server.DamageType.Ranged:
return damager is BaseWeapon;
default:
return damager is Spellbook;
}
}
}
return false;
}
public static bool IsCaddellite(Mobile from, Item item)
{
return PointsSystem.Khaldun.InSeason && item is ICaddelliteTool && SpellHelper.IsAnyT2A(from.Map, from.Location);
}
public static void OnHarvest(Mobile from, Item tool, HarvestSystem system, Item resource)
{
if(IsCaddellite(from, tool))
{
if (resource != null)
{
resource.AttachSocket(new Caddellite());
}
if (0.005 > Utility.RandomDouble())
{
if (from != null)
{
if (system == Fishing.System)
{
from.SendLocalizedMessage(1158664); // You discover a meteorite entangled in your line!
}
else if (system == Mining.System)
{
from.SendLocalizedMessage(1158663); // You discover a meteorite in the dirt!
}
else if (system == Lumberjacking.System)
{
from.SendLocalizedMessage(1158665); // You discover a meteorite in the tree!
}
from.AddToBackpack(new Meteorite());
}
}
}
}
private static Rectangle2D _CraftRec = new Rectangle2D(6017, 3743, 8, 8);
private static Rectangle2D _CookingRec = new Rectangle2D(6002, 3779, 7, 2);
private static Rectangle2D _ScribeRec = new Rectangle2D(5999, 3771, 5, 2);
public static void CheckWaterSource(Mobile from, BaseBeverage beverage, Item item)
{
if (from.Region.IsPartOf<KhaldunCampRegion>())
{
beverage.Content = BeverageType.Water;
beverage.Poison = null;
beverage.Poisoner = null;
beverage.Quantity = beverage.MaxQuantity;
from.SendLocalizedMessage(1010089); // You fill the container with water.
beverage.AttachSocket(new Caddellite());
}
}
public static void TryInfuse(Mobile from, Item item, CraftSystem system)
{
Rectangle2D rec;
if (system == DefCooking.CraftSystem || system == DefAlchemy.CraftSystem)
{
rec = _CookingRec;
}
else if (system == DefInscription.CraftSystem)
{
rec = _ScribeRec;
}
else
{
rec = _CraftRec;
}
if (rec.Contains(from))
{
item.AttachSocket(new Caddellite());
}
}
public static void UpdateBuff(Mobile m)
{
BaseCreature pet = KhaldunTastyTreat.GetPetUnderEffects(m);
Caddellite equipped = null;
var item = m.FindItemOnLayer(Layer.TwoHanded);
if (item == null)
{
item = m.FindItemOnLayer(Layer.OneHanded);
}
if (item != null)
{
equipped = item.GetSocket<Caddellite>();
}
if (equipped == null && pet == null)
{
BuffInfo.RemoveBuff(m, BuffIcon.CaddelliteInfused);
}
else
{
BuffInfo.AddBuff(m, new BuffInfo(BuffIcon.CaddelliteInfused, 1158662, 1158677,
String.Format("{0}\t{1}\t{2}\t{3}", equipped != null && equipped.Owner is BaseWeapon ? "100" : "0", equipped != null && equipped.Owner is Spellbook ? "100" : "0", pet != null ? pet.Name : "", pet != null ? "100" : "0")));
}
}
public static void OnLogin(LoginEventArgs e)
{
var pm = e.Mobile as PlayerMobile;
if (pm != null)
{
UpdateBuff(pm);
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(Item owner, GenericReader reader)
{
base.Deserialize(owner, reader);
reader.ReadInt(); // version
}
}
}