Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
159
Scripts/Spells/Skill Masteries/Core/SkillMasteryPrimer.cs
Normal file
159
Scripts/Spells/Skill Masteries/Core/SkillMasteryPrimer.cs
Normal file
@@ -0,0 +1,159 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user