Files
abysmal-isle/Scripts/Spells/Skill Masteries/Core/SkillMasteryPrimer.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

159 lines
5.2 KiB
C#

using System;
using Server;
using Server.Mobiles;
using Server.Spells.SkillMasteries;
using System.Collections.Generic;
using System.Linq;
using Server.ContextMenus;
namespace Server.Items
{
public class SkillMasteryPrimer : Item
{
[CommandProperty(AccessLevel.GameMaster)]
public SkillName Skill { get; private set; }
[CommandProperty(AccessLevel.GameMaster)]
public int Volume { get; set; }
public override bool ForceShowProperties { get { return true; } }
[Constructable]
public SkillMasteryPrimer(SkillName skill, int volume) : base(7714)
{
Skill = skill;
LootType = LootType.Cursed;
Volume = volume;
}
public override void OnDoubleClick(Mobile from)
{
if (IsChildOf(from.Backpack))
{
if (MasteryInfo.HasLearned(from, Skill, Volume))
{
from.SendLocalizedMessage(1155884, String.Format("#{0}", MasteryInfo.GetLocalization(Skill))); // You are already proficient in this level of ~1_MasterySkill~
}
else if (MasteryInfo.LearnMastery(from, Skill, Volume))
{
from.SendLocalizedMessage(1155885, String.Format("#{0}", MasteryInfo.GetLocalization(Skill))); // You have increased your proficiency in ~1_SkillMastery~!
Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0, 0, 0, 0, 0, 5060, 0);
Effects.PlaySound(from.Location, from.Map, 0x243);
Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 6, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0xAA8, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 4, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0xAA8, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 6, from.Y - 4, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0xAA8, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
Effects.SendTargetParticles(from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100);
Delete();
}
}
}
public override void AddNameProperty(ObjectPropertyList list)
{
list.Add(1155882, String.Format("#{0}", MasteryInfo.GetLocalization(Skill))); // Primer on ~1_Skill~
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1155883, String.Format("{0}", GetVolume(Volume))); // Volume ~1_Level~
}
private string GetVolume(int volume)
{
if (volume == 1)
return "I";
if (volume == 2)
return "II";
return "III";
}
public static void CheckPrimerDrop(BaseCreature killed)
{
List<DamageStore> rights = killed.GetLootingRights();
rights.ForEach(ds =>
{
if (ds.m_HasRight)
{
Mobile m = ds.m_Mobile;
if (Utility.RandomDouble() < 0.10)
{
SkillMasteryPrimer primer = GetRandom();
if (primer != null)
{
if (m.Backpack == null || !m.Backpack.TryDropItem(m, primer, false))
m.BankBox.DropItem(primer);
}
m.SendLocalizedMessage(1156209); // You have received a mastery primer!
}
}
});
}
public static SkillMasteryPrimer GetRandom()
{
SkillName skill = MasteryInfo.Skills[Utility.RandomMinMax(3, 18)];
int volume = 1;
double random = Utility.RandomDouble();
if (0.2 >= random)
volume = 3;
else if (0.5 >= random)
volume = 2;
SkillMasteryPrimer primer = new SkillMasteryPrimer(skill, volume);
return primer;
}
public SkillMasteryPrimer(Serial serial)
: base(serial)
{
}
public override void Serialize( GenericWriter writer )
{
base.Serialize( writer );
writer.Write( (int) 1 ); // version
writer.Write(Volume);
writer.Write((int)Skill);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
Volume = reader.ReadInt();
Skill = (SkillName)reader.ReadInt();
break;
case 0:
Skill = (SkillName)reader.ReadInt();
int id = reader.ReadInt();
Volume = MasteryInfo.GetVolume(id, Skill);
break;
}
}
}
}