fix: Updates races to properly support gargoyle equipment. (#744)

* Adds `RaceFlag` to the `Race` object. This is `1 << RaceIndex`
* Replaces `RequiredRace`  with `RequiredRaces` for items.
* Adds convenience flags for `RequiredRaces`
  ```cs
  
  public const int AllowAllRaces = 0x7;      // Race.Human.RaceFlag | Race.Elf.RaceFlag | Race.Gargoyle.RaceFlag
  public const int AllowHumanOrElves = 0x3;  // Race.Human.RaceFlag | Race.Elf.RaceFlag
  public const int AllowElvesOnly = 0x2;     // Race.Elf.RaceFlag
  public const int AllowGargoylesOnly = 0x4; // Race.Gargoyle.RaceFlag
  ```
* Example usage on an item:
  ```cs
  public override int RequiredRaces => Race.AllowHumanOrElves;
  ```
* Adds Wood and Stone armor material types
* Updates Woodland armor to Wood
* Adds proper messaging for race restrictions
* Adds gargoyle only for object properties
* Adds `CheckRace` functions for validating if a race or mobile can use the item:
  ```cs
  bool CheckRace(Race race);
  bool CheckRace(Mobile from, bool message = true);
  ```
This commit is contained in:
Kamron Batman 2021-08-29 00:43:55 -07:00 • committed by GitHub
parent bf20800382
commit 8ffd5a5bd0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
58 changed files with 147 additions and 125 deletions

View file

@ -564,7 +564,6 @@ namespace Server.Items
public virtual CraftResource DefaultResource => CraftResource.Iron;
public virtual Race RequiredRace => null;
[Hue]
[CommandProperty(AccessLevel.GameMaster)]
@ -988,17 +987,8 @@ namespace Server.Items
if (item is BaseArmor armor)
{
if (armor.RequiredRace != null && m.Race != armor.RequiredRace)
if (!armor.CheckRace(m))
{
if (armor.RequiredRace == Race.Elf)
{
m.SendLocalizedMessage(1072203); // Only Elves may use this.
}
else
{
m.SendMessage("Only {0} may use this.", armor.RequiredRace.PluralName);
}
m.AddToBackpack(armor);
}
else if (!armor.AllowMaleWearer && !m.Female && m.AccessLevel < AccessLevel.GameMaster)
@ -1287,17 +1277,8 @@ namespace Server.Items
if (from.AccessLevel < AccessLevel.GameMaster)
{
if (RequiredRace != null && from.Race != RequiredRace)
if (!CheckRace(from))
{
if (RequiredRace == Race.Elf)
{
from.SendLocalizedMessage(1072203); // Only Elves may use this.
}
else
{
from.SendMessage("Only {0} may use this.", RequiredRace.PluralName);
}
return false;
}
@ -1503,12 +1484,12 @@ namespace Server.Items
list.Add(1041350); // faction item
}
if (RequiredRace == Race.Elf)
if (RequiredRaces == Race.AllowElvesOnly)
{
list.Add(1075086); // Elves Only
}
if (RequiredRace == Race.Gargoyle)
if (RequiredRaces == Race.AllowGargoylesOnly)
{
list.Add(1111709); // Gargoyles Only
}