Overwrite
Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
161
Scripts/Services/Pet Training/PlanningProfile.cs
Normal file
161
Scripts/Services/Pet Training/PlanningProfile.cs
Normal file
@@ -0,0 +1,161 @@
|
||||
using System;
|
||||
using Server;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Server.Items;
|
||||
|
||||
namespace Server.Mobiles
|
||||
{
|
||||
public class PlanningProfile
|
||||
{
|
||||
public BaseCreature Creature { get; private set; }
|
||||
public List<PlanningEntry> Entries { get; private set; }
|
||||
|
||||
public PlanningProfile(BaseCreature bc)
|
||||
{
|
||||
Creature = bc;
|
||||
Entries = new List<PlanningEntry>();
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
Entries.Clear();
|
||||
}
|
||||
|
||||
public void AddToPlan(object tp, int value, int cost)
|
||||
{
|
||||
var entry = Entries.FirstOrDefault(e => e.TrainPoint == tp);
|
||||
|
||||
if (entry != null)
|
||||
Entries.Remove(entry);
|
||||
|
||||
Entries.Add(new PlanningEntry(tp, value, cost));
|
||||
|
||||
if (tp is MagicalAbility && (MagicalAbility)tp <= MagicalAbility.WrestlingMastery)
|
||||
{
|
||||
var trainingPoint = PetTrainingHelper.GetTrainingPoint(tp);
|
||||
|
||||
foreach (var en in Entries)
|
||||
{
|
||||
if (trainingPoint.Requirements != null && trainingPoint.Requirements.Length > 0)
|
||||
{
|
||||
foreach (var req in trainingPoint.Requirements.Where(r => r != null))
|
||||
{
|
||||
if ((req.Requirement is WeaponAbility && en.TrainPoint is WeaponAbility) ||
|
||||
(req.Requirement is SpecialAbility && en.TrainPoint is SpecialAbility) ||
|
||||
(req.Requirement is AreaEffect && en.TrainPoint is AreaEffect))
|
||||
{
|
||||
en.Value = 0;
|
||||
en.Cost = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class PlanningEntry
|
||||
{
|
||||
public object TrainPoint { get; private set; }
|
||||
public int Value { get; set; }
|
||||
public int Cost { get; set; }
|
||||
|
||||
public PlanningEntry(object tp, int value, int cost)
|
||||
{
|
||||
TrainPoint = tp;
|
||||
Value = value;
|
||||
Cost = cost;
|
||||
}
|
||||
}
|
||||
|
||||
public PlanningProfile(BaseCreature bc, GenericReader reader)
|
||||
{
|
||||
int version = reader.ReadInt();
|
||||
|
||||
Entries = new List<PlanningEntry>();
|
||||
|
||||
int count = reader.ReadInt();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
switch (reader.ReadInt())
|
||||
{
|
||||
case 0: break;
|
||||
case 1: Entries.Add(new PlanningEntry((MagicalAbility)reader.ReadInt(), reader.ReadInt(), reader.ReadInt())); break;
|
||||
case 2: Entries.Add(new PlanningEntry(SpecialAbility.Abilities[reader.ReadInt()], reader.ReadInt(), reader.ReadInt())); break;
|
||||
case 3: Entries.Add(new PlanningEntry(AreaEffect.Effects[reader.ReadInt()], reader.ReadInt(), reader.ReadInt())); break;
|
||||
case 4: Entries.Add(new PlanningEntry(WeaponAbility.Abilities[reader.ReadInt()], reader.ReadInt(), reader.ReadInt())); break;
|
||||
case 5: Entries.Add(new PlanningEntry((PetStat)reader.ReadInt(), reader.ReadInt(), reader.ReadInt())); break;
|
||||
case 6: Entries.Add(new PlanningEntry((ResistanceType)reader.ReadInt(), reader.ReadInt(), reader.ReadInt())); break;
|
||||
case 7: Entries.Add(new PlanningEntry((SkillName)reader.ReadInt(), reader.ReadInt(), reader.ReadInt())); break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public virtual void Serialize(GenericWriter writer)
|
||||
{
|
||||
writer.Write(0);
|
||||
|
||||
writer.Write(Entries.Count);
|
||||
|
||||
for(int i = 0; i < Entries.Count; i++)
|
||||
{
|
||||
var entry = Entries[i];
|
||||
object o = entry.TrainPoint;
|
||||
|
||||
if (o is MagicalAbility)
|
||||
{
|
||||
writer.Write(1);
|
||||
writer.Write((int)(MagicalAbility)o);
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else if (o is SpecialAbility)
|
||||
{
|
||||
writer.Write(2);
|
||||
writer.Write(Array.IndexOf(SpecialAbility.Abilities, (SpecialAbility)o));
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else if (o is AreaEffect)
|
||||
{
|
||||
writer.Write(3);
|
||||
writer.Write(Array.IndexOf(AreaEffect.Effects, (AreaEffect)o));
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else if (o is WeaponAbility)
|
||||
{
|
||||
writer.Write(4);
|
||||
writer.Write(Array.IndexOf(WeaponAbility.Abilities, (WeaponAbility)o));
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else if (o is PetStat)
|
||||
{
|
||||
writer.Write(5);
|
||||
writer.Write((int)(PetStat)o);
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else if (o is ResistanceType)
|
||||
{
|
||||
writer.Write(6);
|
||||
writer.Write((int)(ResistanceType)o);
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else if (o is SkillName)
|
||||
{
|
||||
writer.Write(7);
|
||||
writer.Write((int)(SkillName)o);
|
||||
writer.Write(entry.Value);
|
||||
writer.Write(entry.Cost);
|
||||
}
|
||||
else
|
||||
{
|
||||
writer.Write(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user