#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,
|
"Id": 2,
|
||||||
"Name": "Age of Shadows",
|
"Name": "Renaissance",
|
||||||
"ClientFlags": "Malas",
|
"ClientFlags": "Trammel",
|
||||||
"SupportedFeatures": {
|
"SupportedFeatures": {
|
||||||
"ExpansionT2A": true,
|
"ExpansionT2A": true,
|
||||||
"T2A": true,
|
"T2A": true,
|
||||||
"UOR": true,
|
"UOR": true,
|
||||||
"UOTD": false,
|
"UOTD": false,
|
||||||
"LBR": true,
|
"LBR": false,
|
||||||
"AOS": true,
|
"AOS": false,
|
||||||
"SixthCharacterSlot": false,
|
"SixthCharacterSlot": false,
|
||||||
"SE": false,
|
"SE": false,
|
||||||
"ML": false,
|
"ML": false,
|
||||||
|
|
@ -19,7 +19,7 @@
|
||||||
"SeventhCharacterSlot": false,
|
"SeventhCharacterSlot": false,
|
||||||
"RoleplayFaces": false,
|
"RoleplayFaces": false,
|
||||||
"TrialAccount": false,
|
"TrialAccount": false,
|
||||||
"LiveAccount": true,
|
"LiveAccount": false,
|
||||||
"SA": false,
|
"SA": false,
|
||||||
"HS": false,
|
"HS": false,
|
||||||
"Gothic": false,
|
"Gothic": false,
|
||||||
|
|
@ -40,7 +40,7 @@
|
||||||
"ExpansionUOR": true,
|
"ExpansionUOR": true,
|
||||||
"ContextMenus": true,
|
"ContextMenus": true,
|
||||||
"SlotLimit": false,
|
"SlotLimit": false,
|
||||||
"AOS": true,
|
"AOS": false,
|
||||||
"SixthCharacterSlot": false,
|
"SixthCharacterSlot": false,
|
||||||
"SE": false,
|
"SE": false,
|
||||||
"ML": false,
|
"ML": false,
|
||||||
|
|
@ -53,8 +53,8 @@
|
||||||
"NewFeluccaAreas": false
|
"NewFeluccaAreas": false
|
||||||
},
|
},
|
||||||
"HousingFlags": {
|
"HousingFlags": {
|
||||||
"AOS": true,
|
"AOS": false,
|
||||||
"HousingAOS": true,
|
"HousingAOS": false,
|
||||||
"SE": false,
|
"SE": false,
|
||||||
"ML": false,
|
"ML": false,
|
||||||
"Crystal": false,
|
"Crystal": false,
|
||||||
|
|
@ -67,12 +67,12 @@
|
||||||
"TOL": false,
|
"TOL": false,
|
||||||
"EJ": false
|
"EJ": false
|
||||||
},
|
},
|
||||||
"MobileStatusVersion": 6,
|
"MobileStatusVersion": 3,
|
||||||
"MapSelectionFlags": {
|
"MapSelectionFlags": {
|
||||||
"Felucca": true,
|
"Felucca": true,
|
||||||
"Trammel": true,
|
"Trammel": true,
|
||||||
"Ilshenar": true,
|
"Ilshenar": false,
|
||||||
"Malas": true,
|
"Malas": false,
|
||||||
"Tokuno": false,
|
"Tokuno": false,
|
||||||
"TerMur": false
|
"TerMur": false
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -103,6 +103,7 @@
|
||||||
"visibleDamage": "True",
|
"visibleDamage": "True",
|
||||||
"world.enableAutoRestart": "False",
|
"world.enableAutoRestart": "False",
|
||||||
"world.savePath": "Saves",
|
"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);
|
from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter, false, attrs);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void OnSingleClickPreUOTD(Mobile from)
|
/*public void OnSingleClickPreUOTD(Mobile from)
|
||||||
{
|
{
|
||||||
var isMagicItem = _durability != ArmorDurabilityLevel.Regular ||
|
var isMagicItem = _durability != ArmorDurabilityLevel.Regular ||
|
||||||
_protectionLevel != ArmorProtectionLevel.Regular;
|
_protectionLevel != ArmorProtectionLevel.Regular;
|
||||||
|
|
@ -1455,6 +1455,96 @@ namespace Server.Items
|
||||||
: $"{name} crafted by {Crafter}"
|
: $"{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)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private string DurabilityText(out bool articleAn)
|
private string DurabilityText(out bool articleAn)
|
||||||
|
|
|
||||||
|
|
@ -3228,7 +3228,7 @@ public abstract partial class BaseWeapon
|
||||||
from.NetState.SendDisplayEquipmentInfo(Serial, number, _crafter, false, attrs);
|
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 ||
|
var isMagicItem = _durabilityLevel > WeaponDurabilityLevel.Regular ||
|
||||||
_accuracyLevel > WeaponAccuracyLevel.Regular ||
|
_accuracyLevel > WeaponAccuracyLevel.Regular ||
|
||||||
|
|
@ -3307,6 +3307,112 @@ public abstract partial class BaseWeapon
|
||||||
: $"{name} crafted by {Crafter}"
|
: $"{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)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
private string DurabilityText(out bool articleAn)
|
private string DurabilityText(out bool articleAn)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue