#W# Change: Changed to UOR expansion. Added Hover text for armor and weapons.
This commit is contained in:
parent
fa33f8466d
commit
34b7945fc7
4 changed files with 212 additions and 15 deletions
|
|
@ -1,14 +1,14 @@
|
|||
{
|
||||
"Id": 5,
|
||||
"Name": "Age of Shadows",
|
||||
"ClientFlags": "Malas",
|
||||
"Id": 2,
|
||||
"Name": "Renaissance",
|
||||
"ClientFlags": "Trammel",
|
||||
"SupportedFeatures": {
|
||||
"ExpansionT2A": true,
|
||||
"T2A": true,
|
||||
"UOR": true,
|
||||
"UOTD": false,
|
||||
"LBR": true,
|
||||
"AOS": true,
|
||||
"LBR": false,
|
||||
"AOS": false,
|
||||
"SixthCharacterSlot": false,
|
||||
"SE": false,
|
||||
"ML": false,
|
||||
|
|
@ -19,7 +19,7 @@
|
|||
"SeventhCharacterSlot": false,
|
||||
"RoleplayFaces": false,
|
||||
"TrialAccount": false,
|
||||
"LiveAccount": true,
|
||||
"LiveAccount": false,
|
||||
"SA": false,
|
||||
"HS": false,
|
||||
"Gothic": false,
|
||||
|
|
@ -40,7 +40,7 @@
|
|||
"ExpansionUOR": true,
|
||||
"ContextMenus": true,
|
||||
"SlotLimit": false,
|
||||
"AOS": true,
|
||||
"AOS": false,
|
||||
"SixthCharacterSlot": false,
|
||||
"SE": false,
|
||||
"ML": false,
|
||||
|
|
@ -53,8 +53,8 @@
|
|||
"NewFeluccaAreas": false
|
||||
},
|
||||
"HousingFlags": {
|
||||
"AOS": true,
|
||||
"HousingAOS": true,
|
||||
"AOS": false,
|
||||
"HousingAOS": false,
|
||||
"SE": false,
|
||||
"ML": false,
|
||||
"Crystal": false,
|
||||
|
|
@ -67,12 +67,12 @@
|
|||
"TOL": false,
|
||||
"EJ": false
|
||||
},
|
||||
"MobileStatusVersion": 6,
|
||||
"MobileStatusVersion": 3,
|
||||
"MapSelectionFlags": {
|
||||
"Felucca": true,
|
||||
"Trammel": true,
|
||||
"Ilshenar": true,
|
||||
"Malas": true,
|
||||
"Ilshenar": false,
|
||||
"Malas": false,
|
||||
"Tokuno": false,
|
||||
"TerMur": false
|
||||
}
|
||||
|
|
|
|||
|
|
@ -103,6 +103,7 @@
|
|||
"visibleDamage": "True",
|
||||
"world.enableAutoRestart": "False",
|
||||
"world.savePath": "Saves",
|
||||
"world.useMultithreadedSaves": "True"
|
||||
"world.useMultithreadedSaves": "True",
|
||||
"opl.enable": "Core.AOS"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1392,7 +1392,7 @@ namespace Server.Items
|
|||
from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter, false, attrs);
|
||||
}
|
||||
|
||||
public void OnSingleClickPreUOTD(Mobile from)
|
||||
/*public void OnSingleClickPreUOTD(Mobile from)
|
||||
{
|
||||
var isMagicItem = _durability != ArmorDurabilityLevel.Regular ||
|
||||
_protectionLevel != ArmorProtectionLevel.Regular;
|
||||
|
|
@ -1455,6 +1455,96 @@ namespace Server.Items
|
|||
: $"{name} crafted by {Crafter}"
|
||||
);
|
||||
}
|
||||
*/
|
||||
public void OnSingleClickPreUOTD(Mobile from)
|
||||
{
|
||||
var isMagicItem = _durability != ArmorDurabilityLevel.Regular ||
|
||||
_protectionLevel != ArmorProtectionLevel.Regular;
|
||||
|
||||
// 1. Display the main item name
|
||||
if (isMagicItem && !_identified)
|
||||
{
|
||||
LabelTo(from, $"an unidentified {Name ?? Localization.GetText(LabelNumber).ToLowerInvariant()}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var name = Name;
|
||||
var articleAnName = (TileData.ItemTable[ItemID].Flags & TileFlag.ArticleAn) != 0;
|
||||
|
||||
if (isMagicItem)
|
||||
{
|
||||
var builder = new ValueStringBuilder(stackalloc char[128]);
|
||||
|
||||
var durabilityText = DurabilityText(out var articleAnDurability);
|
||||
if (durabilityText != null)
|
||||
{
|
||||
builder.AppendSpaceWithArticle(durabilityText, articleAnDurability);
|
||||
}
|
||||
|
||||
if (name == null)
|
||||
{
|
||||
builder.AppendSpaceWithArticle(Localization.GetText(LabelNumber).ToLowerInvariant(), articleAnName);
|
||||
}
|
||||
else if (builder.Length != 0)
|
||||
{
|
||||
builder.Append($" {name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.Append(name);
|
||||
}
|
||||
|
||||
var protectionText = ProtectionText;
|
||||
if (protectionText != null)
|
||||
{
|
||||
builder.Append($" of {protectionText}");
|
||||
}
|
||||
|
||||
LabelTo(from, builder.ToString());
|
||||
builder.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
name ??= $"{(articleAnName ? "an" : "a")} {Localization.GetText(LabelNumber).ToLowerInvariant()}";
|
||||
|
||||
if (Crafter == null)
|
||||
{
|
||||
LabelTo(from, Quality == ArmorQuality.Exceptional ? $"{name} of exceptional quality" : name);
|
||||
}
|
||||
else
|
||||
{
|
||||
LabelTo(
|
||||
from,
|
||||
Quality == ArmorQuality.Exceptional
|
||||
? $"{name} crafted with exceptional quality by {Crafter}"
|
||||
: $"{name} crafted by {Crafter}"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. --- Sovereign Realm: Custom UOR Stat Display ---
|
||||
|
||||
// Show Strength Requirement
|
||||
int strReq = ComputeStatReq(StatType.Str);
|
||||
if (strReq > 0)
|
||||
{
|
||||
LabelTo(from, $"Strength Requirement: {strReq}");
|
||||
}
|
||||
|
||||
// Show Dexterity Penalty (using Math.Abs to format "-5" as just "5")
|
||||
int dexBonus = ComputeStatBonus(StatType.Dex);
|
||||
if (dexBonus < 0)
|
||||
{
|
||||
LabelTo(from, $"Dexterity Penalty: {Math.Abs(dexBonus)}");
|
||||
}
|
||||
|
||||
// Show Durability (using HitPoints / MaxHitPoints)
|
||||
if (_maxHitPoints > 0)
|
||||
{
|
||||
LabelTo(from, $"Durability: {_hitPoints} / {_maxHitPoints}");
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private string DurabilityText(out bool articleAn)
|
||||
|
|
|
|||
|
|
@ -3228,7 +3228,7 @@ public abstract partial class BaseWeapon
|
|||
from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter, false, attrs);
|
||||
}
|
||||
|
||||
public virtual void OnSingleClickPreUOTD(Mobile from)
|
||||
/*public virtual void OnSingleClickPreUOTD(Mobile from)
|
||||
{
|
||||
var isMagicItem = _durabilityLevel > WeaponDurabilityLevel.Regular ||
|
||||
_accuracyLevel > WeaponAccuracyLevel.Regular ||
|
||||
|
|
@ -3307,6 +3307,112 @@ public abstract partial class BaseWeapon
|
|||
: $"{name} crafted by {Crafter}"
|
||||
);
|
||||
}
|
||||
*/
|
||||
public virtual void OnSingleClickPreUOTD(Mobile from)
|
||||
{
|
||||
var isMagicItem = _durabilityLevel > WeaponDurabilityLevel.Regular ||
|
||||
_accuracyLevel > WeaponAccuracyLevel.Regular ||
|
||||
_damageLevel > WeaponDamageLevel.Regular ||
|
||||
_slayer != SlayerName.None;
|
||||
|
||||
// 1. Display the main item name
|
||||
if (isMagicItem && !_identified)
|
||||
{
|
||||
LabelTo(from, $"an unidentified {Name ?? Localization.GetText(LabelNumber).ToLowerInvariant()}");
|
||||
}
|
||||
else
|
||||
{
|
||||
var name = Name;
|
||||
var articleAnName = (TileData.ItemTable[ItemID].Flags & TileFlag.ArticleAn) != 0;
|
||||
|
||||
if (isMagicItem)
|
||||
{
|
||||
var builder = new ValueStringBuilder(stackalloc char[160]);
|
||||
|
||||
var durabilityText = DurabilityText(out var articleAnDurability);
|
||||
if (durabilityText != null)
|
||||
{
|
||||
builder.AppendSpaceWithArticle(durabilityText, articleAnDurability);
|
||||
}
|
||||
|
||||
var accuracyText = AccuracyText(out var articleAnAccuracy);
|
||||
if (accuracyText != null)
|
||||
{
|
||||
builder.AppendSpaceWithArticle(accuracyText, articleAnAccuracy);
|
||||
}
|
||||
|
||||
var slayerEntry = SlayerGroup.GetEntryByName(_slayer);
|
||||
if (slayerEntry != null)
|
||||
{
|
||||
builder.AppendSpaceWithArticle(slayerEntry.SlayerText(out var articleAnSlayer), articleAnSlayer);
|
||||
}
|
||||
|
||||
if (name == null)
|
||||
{
|
||||
builder.AppendSpaceWithArticle(Localization.GetText(LabelNumber).ToLowerInvariant(), articleAnName);
|
||||
}
|
||||
else if (builder.Length != 0)
|
||||
{
|
||||
builder.Append($" {name}");
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.Append(name);
|
||||
}
|
||||
|
||||
var weaponDamageText = WeaponDamageText;
|
||||
if (weaponDamageText != null)
|
||||
{
|
||||
builder.Append($" of {weaponDamageText}");
|
||||
}
|
||||
|
||||
// TODO: Spells (of Ghoul's Touch)
|
||||
|
||||
LabelTo(from, builder.ToString());
|
||||
builder.Dispose();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Handles regular, non-magic, or crafted weapons
|
||||
name ??= $"{(articleAnName ? "an" : "a")} {Localization.GetText(LabelNumber).ToLowerInvariant()}";
|
||||
|
||||
if (Crafter == null)
|
||||
{
|
||||
LabelTo(from, Quality == WeaponQuality.Exceptional ? $"{name} of exceptional quality" : name);
|
||||
}
|
||||
else
|
||||
{
|
||||
LabelTo(
|
||||
from,
|
||||
Quality == WeaponQuality.Exceptional
|
||||
? $"{name} crafted with exceptional quality by {Crafter}"
|
||||
: $"{name} crafted by {Crafter}"
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 2. --- Sovereign Realm: Custom UOR Stat Display ---
|
||||
|
||||
// Show Damage
|
||||
LabelTo(from, $"Damage: {MinDamage} to {MaxDamage}");
|
||||
|
||||
// Show Weapon Speed
|
||||
LabelTo(from, $"Speed: {Speed}");
|
||||
|
||||
// Show Strength Requirement
|
||||
int strReq = StrRequirement; // Usually named StrRequirement or DefStrReq depending on the emulator version
|
||||
if (strReq > 0)
|
||||
{
|
||||
LabelTo(from, $"Strength Requirement: {strReq}");
|
||||
}
|
||||
|
||||
// Show Durability
|
||||
if (MaxHitPoints > 0)
|
||||
{
|
||||
LabelTo(from, $"Durability: {HitPoints} / {MaxHitPoints}");
|
||||
}
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private string DurabilityText(out bool articleAn)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue