diff --git a/zone/client.cpp b/zone/client.cpp
index a066b9b12..5b849ba58 100644
--- a/zone/client.cpp
+++ b/zone/client.cpp
@@ -6863,16 +6863,46 @@ void Client::SendStatsWindow(Client* client, bool use_window)
indP + "Wind: " + itoa(GetWindMod()) + "
";
}
+ EQEmu::skills::SkillType skill = EQEmu::skills::SkillHandtoHand;
+ auto *inst = GetInv().GetItem(EQEmu::inventory::slotPrimary);
+ if (inst && inst->IsClassCommon()) {
+ switch (inst->GetItem()->ItemType) {
+ case EQEmu::item::ItemType1HSlash:
+ skill = EQEmu::skills::Skill1HSlashing;
+ break;
+ case EQEmu::item::ItemType2HSlash:
+ skill = EQEmu::skills::Skill2HSlashing;
+ break;
+ case EQEmu::item::ItemType1HPiercing:
+ skill = EQEmu::skills::Skill1HPiercing;
+ break;
+ case EQEmu::item::ItemType1HBlunt:
+ skill = EQEmu::skills::Skill1HBlunt;
+ break;
+ case EQEmu::item::ItemType2HBlunt:
+ skill = EQEmu::skills::Skill2HBlunt;
+ break;
+ case EQEmu::item::ItemType2HPiercing:
+ if (ClientVersion() < EQEmu::versions::ClientVersion::RoF2)
+ skill = EQEmu::skills::Skill1HPiercing;
+ else
+ skill = EQEmu::skills::Skill2HPiercing;
+ break;
+ default:
+ break;
+ }
+ }
+
std::ostringstream final_string;
final_string <<
/* C/L/R */ indP << "Class: " << class_Name << indS << "Level: " << static_cast(GetLevel()) << indS << "Race: " << race_Name << "
" <<
/* Runes */ indP << "Rune: " << rune_number << indL << indS << "Spell Rune: " << magic_rune_number << "
" <<
/* HP/M/E */ HME_row <<
/* DS */ indP << "DS: " << (itembonuses.DamageShield + spellbonuses.DamageShield*-1) << " (Spell: " << (spellbonuses.DamageShield*-1) << " + Item: " << itembonuses.DamageShield << " / " << RuleI(Character, ItemDamageShieldCap) << ")
" <<
- /* Atk */ indP << "ATK: " << GetTotalATK() << "
" <<
- /* Atk2 */ indP << "- Base: " << GetATKRating() << " | Item: " << itembonuses.ATK << " (" << RuleI(Character, ItemATKCap) << ")~Used: " << (itembonuses.ATK * 1.342) << " | Spell: " << spellbonuses.ATK << "
" <<
- /* AC */ indP << "AC: " << -1 << "
" <<
- /* AC2 */ indP << "- Mit: " << -1 << " | Avoid: " << -1 << " | Spell: " << spellbonuses.AC << " | Shield: " << shield_ac << "
" <<
+ /* Atk */ indP << "tohit: " << compute_tohit(skill) << " / " << GetTotalToHit(skill, 0) << "
" <<
+ /* Atk2 */ indP << "- Offense: " << offense(skill) << " | Item: " << itembonuses.ATK << " (" << RuleI(Character, ItemATKCap) << ")~Used: " << (itembonuses.ATK * 1.342) << " | Spell: " << spellbonuses.ATK << "
" <<
+ /* AC */ indP << "mitigation AC: " << GetMitigationAC() << "
" <<
+ /* AC2 */ indP << "- defense: " << compute_defense() << " / " << GetTotalDefense() << " | Spell: " << spellbonuses.AC << " | Shield: " << shield_ac << "
" <<
/* Haste */ indP << "Haste: " << GetHaste() << "
" <<
/* Haste2 */ indP << " - Item: " << itembonuses.haste << " + Spell: " << (spellbonuses.haste + spellbonuses.hastetype2) << " (Cap: " << RuleI(Character, HasteCap) << ") | Over: " << (spellbonuses.hastetype3 + ExtraHaste) << "
" <<
/* RunSpeed*/ indP << "Runspeed: " << GetRunspeed() << "
" <<
@@ -6910,7 +6940,9 @@ void Client::SendStatsWindow(Client* client, bool use_window)
client->Message(15, "~~~~~ %s %s ~~~~~", GetCleanName(), GetLastName());
client->Message(0, " Level: %i Class: %i Race: %i DS: %i/%i Size: %1.1f Weight: %.1f/%d ", GetLevel(), GetClass(), GetRace(), GetDS(), RuleI(Character, ItemDamageShieldCap), GetSize(), (float)CalcCurrentWeight() / 10.0f, GetSTR());
client->Message(0, " HP: %i/%i HP Regen: %i/%i",GetHP(), GetMaxHP(), CalcHPRegen(), CalcHPRegenCap());
- client->Message(0, " AC: %i ( Mit.: %i + Avoid.: %i + Spell: %i ) | Shield AC: %i", -1, -1, -1, spellbonuses.AC, shield_ac);
+ client->Message(0, " compute_tohit: %i TotalToHit: %i", compute_tohit(skill), GetTotalToHit(skill, 0));
+ client->Message(0, " compute_defense: %i TotalDefense: %i", compute_defense(), GetTotalDefense());
+ client->Message(0, " offense: %i mitigation ac: %i", offense(skill), GetMitigationAC());
if(CalcMaxMana() > 0)
client->Message(0, " Mana: %i/%i Mana Regen: %i/%i", GetMana(), GetMaxMana(), CalcManaRegen(), CalcManaRegenCap());
client->Message(0, " End.: %i/%i End. Regen: %i/%i",GetEndurance(), GetMaxEndurance(), CalcEnduranceRegen(), CalcEnduranceRegenCap());
diff --git a/zone/mob.cpp b/zone/mob.cpp
index c5b61f546..d8b10874e 100644
--- a/zone/mob.cpp
+++ b/zone/mob.cpp
@@ -1493,6 +1493,9 @@ void Mob::ShowStats(Client* client)
spawngroupid = n->respawn2->SpawnGroupID();
client->Message(0, " NPCID: %u SpawnGroupID: %u Grid: %i LootTable: %u FactionID: %i SpellsID: %u ", GetNPCTypeID(),spawngroupid, n->GetGrid(), n->GetLoottableID(), n->GetNPCFactionID(), n->GetNPCSpellsID());
client->Message(0, " Accuracy: %i MerchantID: %i EmoteID: %i Runspeed: %.3f Walkspeed: %.3f", n->GetAccuracyRating(), n->MerchantType, n->GetEmoteID(), static_cast(0.025f * n->GetRunspeed()), static_cast(0.025f * n->GetWalkspeed()));
+ client->Message(0, " compute_tohit: %i TotalToHit: %i", n->compute_tohit(EQEmu::skills::SkillHandtoHand), n->GetTotalToHit(EQEmu::skills::SkillHandtoHand, 0));
+ client->Message(0, " compute_defense: %i TotalDefense: %i", n->compute_defense(), n->GetTotalDefense());
+ client->Message(0, " offense: %i mitigation ac: %i", n->offense(EQEmu::skills::SkillHandtoHand), n->GetMitigationAC());
n->QueryLoot(client);
}
if (IsAIControlled()) {