servuo/Scripts/Items/Addons/MiniHouses.cs
TrueUO 9b5739551b
Changes (#4829)
- Fixed exploit with Mysterious Wisp outside dungeon Despise. It now works according to EA.
- Added in Publish 109 store and 23rd Anniversary Items (Thanks @argalep)

Co-authored-by: TrueUO <knight.daniel.r@gmail.com>
2020-08-21 08:58:28 -07:00

301 lines
9.3 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
namespace Server.Items
{
public enum MiniHouseType
{
StoneAndPlaster,
FieldStone,
SmallBrick,
Wooden,
WoodAndPlaster,
ThatchedRoof,
Brick,
TwoStoryWoodAndPlaster,
TwoStoryStoneAndPlaster,
Tower,
SmallStoneKeep,
Castle,
LargeHouseWithPatio,
MarbleHouseWithPatio,
SmallStoneTower,
TwoStoryLogCabin,
TwoStoryVilla,
SandstoneHouseWithPatio,
SmallStoneWorkshop,
SmallMarbleWorkshop,
#region Veteran Rewards
MalasMountainPass,
ChurchAtNight,
#endregion
RobinsNest,
TheSpires
}
public class MiniHouseAddonComponent : AddonComponent
{
private MiniHouseType Type { get; set; }
public override int LabelNumber => ((MiniHouseAddon)Addon).LabelNumber;
public MiniHouseAddonComponent(int itemID)
: base(itemID)
{
}
public MiniHouseAddonComponent(Serial serial)
: base(serial)
{
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write((int)Type);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
reader.ReadInt();
Type = (MiniHouseType)reader.ReadInt();
}
}
public class MiniHouseAddon : BaseAddon
{
public override int LabelNumber => MiniHouseInfo.GetInfo(m_Type).LabelNumber;
private MiniHouseType m_Type;
[CommandProperty(AccessLevel.GameMaster)]
public MiniHouseType Type
{
get { return m_Type; }
set
{
m_Type = value;
Construct();
}
}
[Constructable]
public MiniHouseAddon()
: this(MiniHouseType.StoneAndPlaster)
{
}
[Constructable]
public MiniHouseAddon(MiniHouseType type)
{
m_Type = type;
Construct();
}
public MiniHouseAddon(Serial serial)
: base(serial)
{
}
public override BaseAddonDeed Deed => new MiniHouseDeed(m_Type);
public void Construct()
{
foreach (AddonComponent c in Components)
{
c.Addon = null;
c.Delete();
}
Components.Clear();
MiniHouseInfo info = MiniHouseInfo.GetInfo(m_Type);
int size = (int)Math.Sqrt(info.Graphics.Length);
int num = 0;
for (int y = 0; y < size; ++y)
for (int x = 0; x < size; ++x)
if (info.Graphics[num] != 0x1) // Veteran Rewards Mod
AddComponent(new MiniHouseAddonComponent(info.Graphics[num++]), size - x - 1, size - y - 1, 0);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(1); // version
writer.Write((int)m_Type);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 1:
case 0:
{
m_Type = (MiniHouseType)reader.ReadInt();
break;
}
}
if (version == 0)
Timer.DelayCall(TimeSpan.FromSeconds(30.0), Construct);
}
}
public class MiniHouseDeed : BaseAddonDeed
{
public override int LabelNumber
{
get
{
switch (m_Type)
{
case MiniHouseType.MalasMountainPass:
return 1062692; // Mini House: Contest Winning House Design
case MiniHouseType.ChurchAtNight:
return 1072216; // Mini House: Contest 2004 Winning House Design
case MiniHouseType.RobinsNest:
return 1159527; // Mini Keep - Robin's Nest
case MiniHouseType.TheSpires:
return 1159526; // Mini Castle - The Spires
default:
return 1062096; // a mini house deed
}
}
}
private MiniHouseType m_Type;
[CommandProperty(AccessLevel.GameMaster)]
public MiniHouseType Type
{
get { return m_Type; }
set
{
m_Type = value;
InvalidateProperties();
}
}
public override BaseAddon Addon => new MiniHouseAddon(m_Type);
[Constructable]
public MiniHouseDeed()
: this(MiniHouseType.StoneAndPlaster)
{
}
[Constructable]
public MiniHouseDeed(MiniHouseType type)
{
m_Type = type;
Weight = 1.0;
LootType = LootType.Blessed;
}
public MiniHouseDeed(Serial serial)
: base(serial)
{
}
public override void GetProperties(ObjectPropertyList list)
{
base.GetProperties(list);
list.Add(MiniHouseInfo.GetInfo(m_Type).LabelNumber);
}
public override void Serialize(GenericWriter writer)
{
base.Serialize(writer);
writer.Write(0); // version
writer.Write((int)m_Type);
}
public override void Deserialize(GenericReader reader)
{
base.Deserialize(reader);
int version = reader.ReadInt();
switch (version)
{
case 0:
{
m_Type = (MiniHouseType)reader.ReadInt();
break;
}
}
}
}
public class MiniHouseInfo
{
public static MiniHouseInfo[] Info { get; } = new MiniHouseInfo[]
{
/* Stone and plaster house */ new MiniHouseInfo(0x22C4, 1, 1011303),
/* Field stone house */ new MiniHouseInfo(0x22DE, 1, 1011304),
/* Small brick house */ new MiniHouseInfo(0x22DF, 1, 1011305),
/* Wooden house */ new MiniHouseInfo(0x22C9, 1, 1011306),
/* Wood and plaster house */ new MiniHouseInfo(0x22E0, 1, 1011307),
/* Thatched-roof cottage */ new MiniHouseInfo(0x22E1, 1, 1011308),
/* Brick house */ new MiniHouseInfo(1011309, 0x22CD, 0x22CB, 0x22CC, 0x22CA),
/* Two-story wood and plaster house */ new MiniHouseInfo(1011310, 0x2301, 0x2302, 0x2304, 0x2303),
/* Two-story stone and plaster house */ new MiniHouseInfo(1011311, 0x22FC, 0x22FD, 0x22FF, 0x22FE),
/* Tower */ new MiniHouseInfo(1011312, 0x22F7, 0x22F8, 0x22FA, 0x22F9),
/* Small stone keep */ new MiniHouseInfo(0x22E6, 9, 1011313),
/* Castle */ new MiniHouseInfo(1011314, 0x22CE, 0x22D0, 0x22D2, 0x22D7, 0x22CF, 0x22D1, 0x22D4, 0x22D9, 0x22D3, 0x22D5, 0x22D6, 0x22DB, 0x22D8, 0x22DA, 0x22DC, 0x22DD),
/* Large house with patio */ new MiniHouseInfo(0x22E2, 4, 1011315),
/* Marble house with patio */ new MiniHouseInfo(0x22EF, 4, 1011316),
/* Small stone tower */ new MiniHouseInfo(0x22F5, 1, 1011317),
/* Two-story log cabin */ new MiniHouseInfo(0x22FB, 1, 1011318),
/* Two-story villa */ new MiniHouseInfo(0x2300, 1, 1011319),
/* Sandstone house with patio */ new MiniHouseInfo(0x22F3, 1, 1011320),
/* Small stone workshop */ new MiniHouseInfo(0x22F6, 1, 1011321),
/* Small marble workshop */ new MiniHouseInfo(0x22F4, 1, 1011322),
/* Malas Mountain Pass */ new MiniHouseInfo(1062692, 0x2316, 0x2315, 0x2314, 0x2313),
/* Church At Night */ new MiniHouseInfo(1072215, 0x2318, 0x2317, 0x2319, 0x1),
/* Robins Nest */ new MiniHouseInfo(1126529, 0xA609, 0xA60A, 0xA60C, 0xA60B, 0xA60D, 0xA60F, 0xA60E, 0xA610, 0xA611),
/* The Spires */ new MiniHouseInfo(1126538, 0xA612, 0xA613, 0xA615, 0xA614, 0xA616, 0xA618, 0xA617, 0xA619, 0xA61A)
};
public MiniHouseInfo(int start, int count, int labelNumber)
{
Graphics = new int[count];
for (int i = 0; i < count; ++i)
Graphics[i] = start + i;
LabelNumber = labelNumber;
}
public MiniHouseInfo(int labelNumber, params int[] graphics)
{
LabelNumber = labelNumber;
Graphics = graphics;
}
public int[] Graphics { get; }
public int LabelNumber { get; }
public static MiniHouseInfo GetInfo(MiniHouseType type)
{
int v = (int)type;
if (v < 0 || v >= Info.Length)
v = 0;
return Info[v];
}
}
}