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,331 @@
using System;
using Server;
using System.Collections.Generic;
using Server.Mobiles;
using Server.Items;
using System.Linq;
namespace Server.Engines.VvV
{
public class CannonTurret : BaseAddon
{
public const int ScanRange = 8;
public const int ReloadDelay = 10;
private bool _NoShoot;
private int _ShotsRemaining;
[CommandProperty(AccessLevel.GameMaster)]
public Mobile Owner { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public int ShotsRemaining
{
get { return _ShotsRemaining; }
set
{
_ShotsRemaining = value;
if (_ShotsRemaining <= 0)
Delete();
}
}
[CommandProperty(AccessLevel.GameMaster)]
public CannonBase Base { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public Item Turret { get; set; }
private DateTime _NextShot;
public override BaseAddonDeed Deed { get { return null; } }
[Constructable]
public CannonTurret()
: this(null)
{
}
public CannonTurret(Mobile m)
{
Owner = m;
ShotsRemaining = 20;
Base = new CannonBase(this);
Base.MoveToWorld(this.Location, this.Map);
AddonComponent c = new LocalizedAddonComponent(16918, 1155505);
AddComponent(c, 0, 0, 3);
Turret = c;
_NextShot = DateTime.UtcNow;
}
public override void OnLocationChange(Point3D oldLocation)
{
base.OnLocationChange(oldLocation);
if (Base != null && !Base.Deleted)
Base.Location = this.Location;
}
public override void OnMapChange()
{
base.OnMapChange();
if (Base != null && !Base.Deleted)
Base.Map = this.Map;
}
public override void Delete()
{
base.Delete();
if (Base != null && !Base.Deleted)
Base.Delete();
}
public void Scan()
{
if (Deleted || this.Map == null || _ShotsRemaining <= 0 || _NoShoot)
return;
IPooledEnumerable eable = this.Map.GetMobilesInRange(this.Location, ScanRange);
List<Mobile> list = new List<Mobile>();
foreach (Mobile m in eable)
{
if (Owner == null || (ViceVsVirtueSystem.IsEnemy(Owner, m) && m.InLOS(this.Location)
&& m is PlayerMobile
&& m.AccessLevel == AccessLevel.Player))
{
list.Add(m);
}
}
eable.Free();
Mobile target = null;
double closest = ScanRange;
if (list.Count > 0)
{
foreach (Mobile m in list.Where(mob => target == null || mob.GetDistanceToSqrt(target) < closest))
{
target = m;
closest = m.GetDistanceToSqrt(target);
}
}
if (target != null)
{
AimAndShoot(target, (int)Math.Ceiling(closest));
}
list.Clear();
list.TrimExcess();
}
public void AimAndShoot(Mobile target, int range)
{
Direction d = Utility.GetDirection(this, target);
switch (d)
{
default:
case Direction.North:
case Direction.Right: Turret.ItemID = 16920; break;
case Direction.East:
case Direction.Down: Turret.ItemID = 16921; break;
case Direction.South:
case Direction.Left: Turret.ItemID = 16918; break;
case Direction.West:
case Direction.Up: Turret.ItemID = 16919; break;
}
if (_NextShot > DateTime.UtcNow)
return;
Timer.DelayCall(TimeSpan.FromMilliseconds(250), () =>
{
Point3D p = new Point3D(this.X, this.Y, this.Z + 2);
Map map = this.Map;
switch (Turret.ItemID)
{
case 16920: p.Y--; break;
case 16921: p.X++; break;
case 16918: p.Y++; break;
case 16919: p.X--; break;
}
Effects.SendLocationEffect(p, map, 14120, 15, 10);
Effects.PlaySound(p, map, 0x664);
});
Timer.DelayCall(TimeSpan.FromMilliseconds(250 + (150 * (range))), () =>
{
if (Owner != null)
Owner.DoHarmful(target);
AOS.Damage(target, Owner, Utility.RandomMinMax(75, 100), 100, 0, 0, 0, 0);
Effects.SendLocationEffect(target.Location, target.Map, Utility.RandomBool() ? 14000 : 14013, 15, 10);
Effects.PlaySound(target.Location, target.Map, 0x207);
ShotsRemaining--;
});
_NextShot = DateTime.UtcNow + TimeSpan.FromSeconds(ReloadDelay);
}
public class CannonBase : DamageableItem
{
public override int LabelNumber { get { return 1155505; } }
public CannonTurret Turret { get; set; }
public CannonBase(CannonTurret turret)
: base(1822, 1822)
{
Level = ItemLevel.Hard;
Turret = turret;
Name = "a cannon turret";
}
public override void Delete()
{
base.Delete();
if (Turret != null)
Turret.Delete();
}
public CannonBase(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
public CannonTurret(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(Owner);
writer.Write(Base);
writer.Write(Turret);
writer.Write(ShotsRemaining);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Owner = reader.ReadMobile();
Base = reader.ReadItem() as CannonBase;
Turret = reader.ReadItem();
ShotsRemaining = reader.ReadInt();
_NoShoot = true;
Timer.DelayCall(TimeSpan.FromSeconds(10), () =>
{
if (Base != null)
{
if (ViceVsVirtueSystem.Instance.Battle.OnGoing)
{
Base.Turret = this;
ViceVsVirtueSystem.Instance.Battle.Turrets.Add(this);
_NoShoot = false;
return;
}
}
Delete();
});
}
}
public class CannonTurretPlans : Item
{
public override int LabelNumber { get { return 1155503; } } // Plans for a Cannon Turret
[Constructable]
public CannonTurretPlans() : base(5630)
{
}
public override void OnDoubleClick(Mobile m)
{
if (IsChildOf(m.Backpack))
{
VvVBattle battle = ViceVsVirtueSystem.Instance.Battle;
if (!ViceVsVirtueSystem.IsVvV(m))
{
m.SendLocalizedMessage(1155496); // This item can only be used by VvV participants!
}
else if (battle == null || !battle.OnGoing || !battle.IsInActiveBattle(m))
{
m.SendLocalizedMessage(1155406); // This item can only be used in an active VvV battle region!
}
else if (battle.TurretCount > VvVBattle.MaxTurrets)
{
m.SendLocalizedMessage(1155502); // The turret limit for this battle has been reached!
}
else
{
CannonTurret t = new CannonTurret(m);
t.MoveToWorld(m.Location, m.Map);
battle.Turrets.Add(t);
Delete();
}
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(1154937); // vvv item
}
public CannonTurretPlans(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
}
}
}