Files
abysmal-isle/Scripts/Services/Expansions/High Seas/Items/Fish/FishPies.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

691 lines
21 KiB
C#

using Server;
using System;
using Server.Mobiles;
using Server.Engines.Craft;
using System.Collections.Generic;
namespace Server.Items
{
public enum FishPieEffect
{
None,
MedBoost,
FocusBoost,
ColdSoak,
EnergySoak,
FireSoak,
PoisonSoak,
PhysicalSoak,
WeaponDam,
HitChance,
DefChance,
SpellDamage,
ManaRegen,
HitsRegen,
StamRegen,
SoulCharge,
CastFocus,
}
public class BaseFishPie : Item, IQuality
{
private ItemQuality _Quality;
[CommandProperty(AccessLevel.GameMaster)]
public ItemQuality Quality { get { return _Quality; } set { _Quality = value; InvalidateProperties(); } }
public bool PlayerConstructed { get { return true; } }
public virtual TimeSpan Duration { get { return TimeSpan.FromMinutes(5); } }
public virtual int BuffName { get { return 0; } }
public virtual int BuffAmount { get { return 0; } }
public virtual FishPieEffect Effect { get { return FishPieEffect.None; } }
public static Dictionary<Mobile, List<FishPieEffect>> m_EffectsList = new Dictionary<Mobile, List<FishPieEffect>>();
public BaseFishPie() : base(4161)
{
Stackable = true;
}
public virtual int OnCraft(int quality, bool makersMark, Mobile from, CraftSystem craftSystem, Type typeRes, ITool tool, CraftItem craftItem, int resHue)
{
Quality = (ItemQuality)quality;
return quality;
}
public static bool IsUnderEffects(Mobile from, FishPieEffect type)
{
if (!m_EffectsList.ContainsKey(from) || m_EffectsList[from] == null)
return false;
return m_EffectsList[from].Contains(type);
}
public static bool TryAddBuff(Mobile from, FishPieEffect type)
{
if (IsUnderEffects(from, type))
return false;
if (!m_EffectsList.ContainsKey(from))
m_EffectsList.Add(from, new List<FishPieEffect>());
m_EffectsList[from].Add(type);
return true;
}
public static void RemoveBuff(Mobile from, FishPieEffect type)
{
if(!m_EffectsList.ContainsKey(from))
return;
if (m_EffectsList[from] != null && m_EffectsList[from].Contains(type))
m_EffectsList[from].Remove(type);
if (m_EffectsList[from] == null || m_EffectsList[from].Count == 0)
m_EffectsList.Remove(from);
BuffInfo.RemoveBuff(from, BuffIcon.FishPie);
from.Delta(MobileDelta.WeaponDamage);
}
public static void ScaleDamage(Mobile from, Mobile to, ref int totalDamage, int phys, int fire, int cold, int pois, int nrgy, int direct)
{
if (Core.EJ && from is PlayerMobile && to is PlayerMobile)
{
return;
}
if (IsUnderEffects(to, FishPieEffect.PhysicalSoak) && phys > 0)
totalDamage -= (int)Math.Min(5.0, totalDamage * ((double)phys / 100.0));
if (IsUnderEffects(to, FishPieEffect.FireSoak) && fire > 0)
totalDamage -= (int)Math.Min(5.0, totalDamage * ((double)fire / 100.0));
if (IsUnderEffects(to, FishPieEffect.ColdSoak) && cold > 0)
totalDamage -= (int)Math.Min(5.0, totalDamage * ((double)cold / 100.0));
if (IsUnderEffects(to, FishPieEffect.PoisonSoak) && pois > 0)
totalDamage -= (int)Math.Min(5.0, totalDamage * ((double)pois / 100.0));
if (IsUnderEffects(to, FishPieEffect.EnergySoak) && nrgy > 0)
totalDamage -= (int)Math.Min(5.0, totalDamage * ((double)nrgy / 100.0));
}
public virtual bool Apply(Mobile from)
{
if (TryAddBuff(from, Effect))
{
switch (Effect)
{
default:
case FishPieEffect.None: break;
case FishPieEffect.MedBoost:
TimedSkillMod mod1 = new TimedSkillMod(SkillName.Meditation, true, 10.0, Duration);
mod1.ObeyCap = true;
from.AddSkillMod(mod1);
break;
case FishPieEffect.FocusBoost:
TimedSkillMod mod2 = new TimedSkillMod(SkillName.Focus, true, 10.0, Duration);
mod2.ObeyCap = true;
from.AddSkillMod(mod2);
break;
case FishPieEffect.ColdSoak: break;
case FishPieEffect.EnergySoak: break;
case FishPieEffect.PoisonSoak: break;
case FishPieEffect.FireSoak: break;
case FishPieEffect.PhysicalSoak: break;
case FishPieEffect.WeaponDam: break;
case FishPieEffect.HitChance: break;
case FishPieEffect.DefChance: break;
case FishPieEffect.SpellDamage: break;
case FishPieEffect.ManaRegen: break;
case FishPieEffect.StamRegen: break;
case FishPieEffect.HitsRegen: break;
case FishPieEffect.SoulCharge: break;
case FishPieEffect.CastFocus: break;
}
if (Effect != FishPieEffect.None)
{
new InternalTimer(Duration, from, Effect);
BuffInfo.AddBuff(from, new BuffInfo(BuffIcon.FishPie, 1116340, LabelNumber));
}
return true;
}
else
from.SendLocalizedMessage(502173); // You are already under a similar effect.
return false;
}
private class InternalTimer : Timer
{
private Mobile m_From;
private FishPieEffect m_EffectType;
public InternalTimer(TimeSpan duration, Mobile from, FishPieEffect type) : base(duration)
{
m_From = from;
m_EffectType = type;
Start();
}
protected override void OnTick()
{
BaseFishPie.RemoveBuff(m_From, m_EffectType);
}
}
public override void AddCraftedProperties(ObjectPropertyList list)
{
if (_Quality == ItemQuality.Exceptional)
{
list.Add(1060636); // Exceptional
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(BuffName, BuffAmount.ToString());
}
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1042001); // That must be in your pack for you to use it.
}
else if (Apply(from))
{
from.FixedEffect(0x375A, 10, 15);
from.PlaySound(0x1E7);
from.SendLocalizedMessage(1116285, String.Format("#{0}", LabelNumber)); //You eat the ~1_val~. Mmm, tasty!
Delete();
}
}
public BaseFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)1); // version
writer.Write((int)_Quality);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
if (version > 0)
_Quality = (ItemQuality)reader.ReadInt();
}
}
public class AutumnDragonfishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116224; } }
public override int BuffName { get { return 1116280; } }
public override int BuffAmount { get { return 10; } }
public override FishPieEffect Effect { get { return FishPieEffect.MedBoost; } }
[Constructable]
public AutumnDragonfishPie()
{
Hue = FishInfo.GetFishHue(typeof(AutumnDragonfish));
}
public AutumnDragonfishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BullFishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116220; } }
public override int BuffName { get { return 1116276; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.WeaponDam; } }
[Constructable]
public BullFishPie()
{
Hue = FishInfo.GetFishHue(typeof(BullFish));
}
public BullFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class CrystalFishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116219; } }
public override int BuffName { get { return 1116275; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.EnergySoak; } }
[Constructable]
public CrystalFishPie()
{
Hue = FishInfo.GetFishHue(typeof(CrystalFish));
}
public CrystalFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class FairySalmonPie : BaseFishPie
{
public override int LabelNumber { get { return 1116222; } }
public override int BuffName { get { return 1116278; } }
public override int BuffAmount { get { return 2; } }
public override FishPieEffect Effect { get { return FishPieEffect.CastFocus; } }
[Constructable]
public FairySalmonPie()
{
Hue = FishInfo.GetFishHue(typeof(FairySalmon));
}
public FairySalmonPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class FireFishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116217; } }
public override int BuffName { get { return 1116271; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.FireSoak; } }
[Constructable]
public FireFishPie()
{
Hue = FishInfo.GetFishHue(typeof(FireFish));
}
public FireFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GiantKoiPie : BaseFishPie
{
public override int LabelNumber { get { return 1116216; } }
public override int BuffName { get { return 1116270; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.DefChance; } }
[Constructable]
public GiantKoiPie()
{
Hue = FishInfo.GetFishHue(typeof(GiantKoi));
}
public GiantKoiPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class GreatBarracudaPie : BaseFishPie
{
public override int LabelNumber { get { return 1116214; } }
public override int BuffName { get { return 1116269; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.HitChance; } }
[Constructable]
public GreatBarracudaPie()
{
Hue = 1287;// FishInfo.GetFishHue(typeof(GreatBarracuda));
}
public GreatBarracudaPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class HolyMackerelPie : BaseFishPie
{
public override int LabelNumber { get { return 1116225; } }
public override int BuffName { get { return 1116283; } }
public override int BuffAmount { get { return 3; } }
public override FishPieEffect Effect { get { return FishPieEffect.ManaRegen; } }
[Constructable]
public HolyMackerelPie()
{
Hue = FishInfo.GetFishHue(typeof(HolyMackerel));
}
public HolyMackerelPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class LavaFishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116223; } }
public override int BuffName { get { return 1116279; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.SoulCharge; } }
[Constructable]
public LavaFishPie()
{
Hue = FishInfo.GetFishHue(typeof(LavaFish));
}
public LavaFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class ReaperFishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116218; } }
public override int BuffName { get { return 1116274; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.PoisonSoak; } }
[Constructable]
public ReaperFishPie()
{
Hue = 1152;// FishInfo.GetFishHue(typeof(ReaperFish));
}
public ReaperFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class SummerDragonfishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116221; } }
public override int BuffName { get { return 1116277; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.SpellDamage; } }
[Constructable]
public SummerDragonfishPie()
{
Hue = FishInfo.GetFishHue(typeof(SummerDragonfish));
}
public SummerDragonfishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class UnicornFishPie : BaseFishPie
{
public override int LabelNumber { get { return 1116226; } }
public override int BuffName { get { return 1116284; } }
public override int BuffAmount { get { return 3; } }
public override FishPieEffect Effect { get { return FishPieEffect.StamRegen; } }
[Constructable]
public UnicornFishPie()
{
Hue = FishInfo.GetFishHue(typeof(UnicornFish));
}
public UnicornFishPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class YellowtailBarracudaPie : BaseFishPie
{
public override int LabelNumber { get { return 1116215; } }
public override int BuffName { get { return 1116282; } }
public override int BuffAmount { get { return 3; } }
public override FishPieEffect Effect { get { return FishPieEffect.HitsRegen; } }
[Constructable]
public YellowtailBarracudaPie()
{
Hue = FishInfo.GetFishHue(typeof(YellowtailBarracuda));
}
public YellowtailBarracudaPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class StoneCrabPie : BaseFishPie
{
public override int LabelNumber { get { return 1116227; } }
public override int BuffName { get { return 1116272; } }
public override int BuffAmount { get { return 3; } }
public override FishPieEffect Effect { get { return FishPieEffect.PhysicalSoak; } }
[Constructable]
public StoneCrabPie()
{
Hue = FishInfo.GetFishHue(typeof(StoneCrab));
}
public StoneCrabPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class SpiderCrabPie : BaseFishPie
{
public override int LabelNumber { get { return 1116229; } }
public override int BuffName { get { return 1116281; } }
public override int BuffAmount { get { return 10; } }
public override FishPieEffect Effect { get { return FishPieEffect.FocusBoost; } }
[Constructable]
public SpiderCrabPie()
{
Hue = FishInfo.GetFishHue(typeof(SpiderCrab));
}
public SpiderCrabPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public class BlueLobsterPie : BaseFishPie
{
public override int LabelNumber { get { return 1116228; } }
public override int BuffName { get { return 1116273; } }
public override int BuffAmount { get { return 5; } }
public override FishPieEffect Effect { get { return FishPieEffect.ColdSoak; } }
[Constructable]
public BlueLobsterPie()
{
Hue = FishInfo.GetFishHue(typeof(BlueLobster));
}
public BlueLobsterPie(Serial serial) : base(serial) { }
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}