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,269 @@
using System;
using Server.Accounting;
using Server.ContextMenus;
using Server.Gumps;
using Server.Mobiles;
using Server.Network;
using Server.Targeting;
using System.Collections.Generic;
namespace Server.Items
{
public class PetWhistle : Item
{
public override int LabelNumber { get { return 1126239; } } // whistle
[CommandProperty(AccessLevel.GameMaster)]
public DateTime NextLinkedTime { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public string Account { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public BaseCreature PetLinked { get; set; }
[CommandProperty(AccessLevel.GameMaster)]
public bool IsUsable { get { return NextLinkedTime < DateTime.UtcNow; } }
[Constructable]
public PetWhistle()
: base(0xA4E7)
{
LootType = LootType.Blessed;
}
public PetWhistle(Serial serial)
: base(serial)
{
}
public override void OnDoubleClick(Mobile from)
{
if (!string.IsNullOrEmpty(Account))
{
Account acct = from.Account as Account;
if (acct == null || acct.Username != Account)
{
from.SendLocalizedMessage(1151920); // This item is Account Bound, you are not permitted to take this action.
return;
}
}
if (IsChildOf(from.Backpack))
{
if (PetLinked != null)
{
from.CloseGump(typeof(PetWhistleGump));
from.SendGump(new PetWhistleGump(this));
}
else
{
from.SendLocalizedMessage(1159390); // Target a bonded pet to link this whistle.
from.Target = new InternalTarget(this);
}
}
else
{
from.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
if (PetLinked != null)
list.Add(1159360, PetLinked.Name); // Pet Whistle for ~1_name~
if (!string.IsNullOrEmpty(Account))
list.Add(1155526); // Account Bound
}
public override void GetContextMenuEntries(Mobile from, List<ContextMenuEntry> list)
{
base.GetContextMenuEntries(from, list);
list.Add(new LinkBondedPetEntry(from, this));
}
private class LinkBondedPetEntry : ContextMenuEntry
{
private readonly PetWhistle _Item;
private readonly Mobile m_From;
public LinkBondedPetEntry(Mobile from, PetWhistle item)
: base(1159393, 6) // Link Bonded Pet
{
m_From = from;
_Item = item;
Enabled = _Item.IsUsable;
}
public override void OnClick()
{
if (m_From == null || _Item.Deleted)
return;
if (_Item.IsChildOf(m_From.Backpack))
{
m_From.SendLocalizedMessage(1159390); // Target a bonded pet to link this whistle.
m_From.Target = new InternalTarget(_Item);
}
else
{
m_From.SendLocalizedMessage(1062334); // This item must be in your backpack to be used.
}
}
}
private class InternalTarget : Target
{
private readonly PetWhistle _Item;
public InternalTarget(PetWhistle item)
: base(12, true, TargetFlags.None)
{
_Item = item;
}
protected override void OnTarget(Mobile from, object targeted)
{
if (_Item.Deleted)
return;
if (!_Item.IsChildOf(from.Backpack))
{
from.SendLocalizedMessage(1060640); // The item must be in your backpack to use it.
return;
}
if (targeted is BaseCreature && ((BaseCreature)targeted).ControlMaster == from)
{
if (((BaseCreature)targeted).IsBonded)
{
if (_Item.IsUsable)
{
_Item.PetLinked = (BaseCreature)targeted;
_Item.NextLinkedTime = DateTime.UtcNow + TimeSpan.FromDays(7);
_Item.InvalidateProperties();
from.CloseGump(typeof(PetWhistleGump));
from.SendGump(new PetWhistleGump(_Item));
}
else
{
if ((DateTime.UtcNow -_Item.NextLinkedTime).Seconds > 60)
{
from.SendLocalizedMessage(1159391); // You must wait ~1_minutes~ minutes before you can link another pet to this whistle.
}
else
{
from.SendLocalizedMessage(1159392); // You must wait ~1_seconds~ seconds before you can link another pet to this whistle.
}
}
}
else
{
from.SendLocalizedMessage(1159373); // This item can only be linked to a bonded pet.
}
}
else
{
from.SendLocalizedMessage(1149667); // Invalid target.
}
}
}
public class PetWhistleGump : Gump
{
private readonly PetWhistle _Item;
public PetWhistleGump(PetWhistle item)
: base(100, 100)
{
_Item = item;
AddPage(0);
AddBackground(0, 0, 255, 260, 0x5B4);
AddAlphaRegion(0, 0, 255, 260);
AddItem(100, 39, 42215);
AddHtmlLocalized(81, 73, 157, 22, 1159405, 0x76F2, false, false); // Attack
AddButton(41, 73, 0xFA5, 0xFA6, 1000, GumpButtonType.Reply, 0);
AddHtmlLocalized(81, 97, 157, 22, 1159407, 0x76F2, false, false); // Block
AddButton(41, 97, 0xFA5, 0xFA6, 1002, GumpButtonType.Reply, 0);
AddHtmlLocalized(81, 121, 157, 22, 1159375, 0x76F2, false, false); // Play Dead
AddButton(41, 121, 0xFA5, 0xFA6, 1003, GumpButtonType.Reply, 0);
AddHtmlLocalized(81, 145, 157, 22, 1159378, 0x76F2, false, false); // Settle Down
AddButton(41, 145, 0xFA5, 0xFA6, 1004, GumpButtonType.Reply, 0);
AddHtmlLocalized(81, 169, 157, 22, 1159377, 0x76F2, false, false); // Wait
AddButton(41, 169, 0xFA5, 0xFA6, 1005, GumpButtonType.Reply, 0);
AddHtmlLocalized(81, 193, 157, 22, 1159406, 0x76F2, false, false); // Eat
AddButton(41, 193, 0xFA5, 0xFA6, 1006, GumpButtonType.Reply, 0);
AddHtmlLocalized(81, 217, 157, 22, 1159388, 0x76F2, false, false); // What's that?
AddButton(41, 217, 0xFA5, 0xFA6, 1008, GumpButtonType.Reply, 0);
AddHtmlLocalized(40, 15, 200, 18, 1159360, item.PetLinked.Name, 0x6A05, false, false); // Pet Whistle for ~1_name~
}
public override void OnResponse(NetState sender, RelayInfo info)
{
if (_Item.Deleted ||_Item.PetLinked == null)
return;
Mobile m = sender.Mobile;
if (_Item.PetLinked.ControlOrder != OrderType.Stay || _Item.PetLinked.ControlMaster != m)
m.SendLocalizedMessage(1159389); // You must command your pet to stay before using this item.
Effects.PlaySound(m.Location, m.Map, 1665);
switch (info.ButtonID)
{
case 1000:
_Item.PetLinked.Animate(AnimationType.Attack, 0);
break;
case 1002:
_Item.PetLinked.Animate(AnimationType.Block, 0);
break;
case 1003:
_Item.PetLinked.Animate(AnimationType.Die, 0);
break;
case 1004:
_Item.PetLinked.Animate(AnimationType.Impact, 0);
break;
case 1005:
_Item.PetLinked.Animate(AnimationType.Fidget, 0);
break;
case 1006:
_Item.PetLinked.Animate(AnimationType.Eat, 0);
break;
case 1008:
_Item.PetLinked.Animate(AnimationType.Alert, 0);
break;
}
}
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0);
writer.Write(Account);
writer.Write(NextLinkedTime);
writer.Write(PetLinked);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
Account = reader.ReadString();
NextLinkedTime = reader.ReadDateTime();
PetLinked = (BaseCreature)reader.ReadMobile();
}
}
}