Overwrite

Complete Overwrite of the Folder with the free shard. ServUO 57.3 has been added.
This commit is contained in:
Unstable Kitsune
2023-11-28 23:20:26 -05:00
parent 3cd54811de
commit b918192e4e
11608 changed files with 2644205 additions and 47 deletions

View File

@@ -0,0 +1,213 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Server.Targeting;
namespace Server.Items
{
public class RefinementAmalgamator : Item
{
public List<RefinementComponent> ToCombine { get; set; }
public RefinementComponent ToUpgrade { get; set; }
[Constructable]
public RefinementAmalgamator()
: base(0x9966)
{
Hue = 1152;
Weight = 1;
}
public RefinementAmalgamator(Serial serial)
: base(serial)
{
}
public override int LabelNumber
{
get
{
return 1154340;
}
}// Refinement Amalgamator
public override void OnDoubleClick(Mobile from)
{
if (!IsChildOf(from.Backpack))
{
// The item must be in your backpack to use it.
from.SendLocalizedMessage(1060640);
}
else
{
ToCombine = null;
ToUpgrade = null;
from.SendLocalizedMessage(1154351); // Target the refinement you wish to combine.
from.Target = new InternalTarget(from, this);
}
}
public void CheckCombine(Mobile m, RefinementComponent component)
{
if (ToUpgrade == null)
{
if (component.ModType != ModType.Invulnerability)
{
ToCombine = new List<RefinementComponent>();
ToUpgrade = component;
m.SendLocalizedMessage(1154351); // Target the refinement you wish to combine.
m.Target = new InternalTarget(m, this);
}
else
{
m.SendLocalizedMessage(1154353); // You can't upgrade this refinement.
}
}
else
{
if (ToUpgrade.RefinementType != component.RefinementType
|| ToUpgrade.CraftType != component.CraftType
|| ToUpgrade.SubCraftType != component.SubCraftType
|| ToUpgrade.ModType != component.ModType)
{
m.SendLocalizedMessage(1154354); // This refinement does not match the type currently being combined.
}
else
{
ToCombine.Add(component);
ValidateList(m);
if (ToCombine.Count >= GetCombineTotal(component.ModType) - 1) // -1 because we're counting ToUpgrade
{
foreach (var comp in ToCombine)
comp.Delete();
ToUpgrade.ModType++;
m.SendLocalizedMessage(1154352); // You've completed the amalgamation and received an upgraded version of your refinement.
}
else
{
m.SendLocalizedMessage(1154360); // You place the refinement into the amalgamator.
m.SendLocalizedMessage(1154351); // Target the refinement you wish to combine.
m.Target = new InternalTarget(m, this);
}
}
}
}
private void ValidateList(Mobile m)
{
if (ToCombine == null)
return;
var copy = new List<RefinementComponent>(ToCombine);
foreach (var comp in copy)
{
if (comp == null || comp.Deleted || !comp.IsChildOf(m.Backpack))
{
ToCombine.Remove(comp);
}
}
ColUtility.Free(copy);
}
private int GetCombineTotal(ModType type)
{
switch (type)
{
default:
case ModType.Defense: return 2;
case ModType.Protection: return 3;
case ModType.Hardening: return 4;
case ModType.Fortification: return 5;
case ModType.Invulnerability: return -1;
}
}
private class InternalTarget : Target
{
private Mobile m_Mobile;
private RefinementAmalgamator m_Amalgamator;
public InternalTarget(Mobile m, RefinementAmalgamator amalgamator)
: base(-1, true, TargetFlags.None)
{
m_Mobile = m;
m_Amalgamator = amalgamator;
}
protected override void OnTarget(Mobile from, object targeted)
{
RefinementComponent item = targeted as RefinementComponent;
if (item == null)
{
from.SendLocalizedMessage(1154457); // This is not a refinement.
}
else if (!item.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1060640); // The item must be in your backpack to use it.
}
else
{
if (m_Amalgamator != null && !m_Amalgamator.Deleted)
{
m_Amalgamator.CheckCombine(from, item);
}
/*RefinementComponent comp = (RefinementComponent)targeted;
if (ToCombine == null)
{
if (comp.ModType == ModType.Invulnerability)
{
from.SendLocalizedMessage(1154353); // You can't upgrade this refinement.
}
else
{
from.SendLocalizedMessage(1154351); // Target the refinement you wish to combine.
from.Target = new InternalTarget(from, comp);
}
}
else
{
if (m_First.RefinementType != comp.RefinementType
|| m_First.CraftType != comp.CraftType
|| m_First.SubCraftType != comp.SubCraftType
|| m_First.ModType != comp.ModType)
{
from.SendLocalizedMessage(1154354); // This refinement does not match the type currently being combined.
}
else
{
comp.Delete();
m_First.ModType++;
from.SendLocalizedMessage(1154352); // You've completed the amalgamation and received an upgraded version of your refinement.
}
}*/
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write((int)0); // version
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}