159 lines
5.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
} |