double critDamResist = 100. - (100 * (player.calcStat(Stats.CRIT_DAMAGE_RECEPTIVE, 1., target, null) - critDamResistStatic));
String dialog = HtmCache.getInstance().getNotNull("command/whoami.htm", player);
NumberFormat df = NumberFormat.getInstance(Locale.ENGLISH);
df.setMaximumFractionDigits(1);
df.setMinimumFractionDigits(1);
StrBuilder sb = new StrBuilder(dialog);
sb.replaceFirst("%hpRegen%", df.format(hpRegen));
sb.replaceFirst("%cpRegen%", df.format(cpRegen));
sb.replaceFirst("%mpRegen%", df.format(mpRegen));
sb.replaceFirst("%hpDrain%", df.format(hpDrain));
sb.replaceFirst("%mpDrain%", df.format(mpDrain));
sb.replaceFirst("%hpGain%", df.format(hpGain));
sb.replaceFirst("%mpGain%", df.format(mpGain));
sb.replaceFirst("%critPerc%", df.format(critPerc));
sb.replaceFirst("%critStatic%", df.format(critStatic));
sb.replaceFirst("%mCritDmg%", df.format(mCritDmg));
sb.replaceFirst("%blowRate%", df.format(blowRate));
sb.replaceFirst("%shieldDef%", df.format(shieldDef));
sb.replaceFirst("%shieldRate%", df.format(shieldRate));
sb.replaceFirst("%xpRate%", df.format(xpRate));
sb.replaceFirst("%spRate%", df.format(spRate));
sb.replaceFirst("%dropRate%", df.format(dropRate));
sb.replaceFirst("%adenaRate%", df.format(adenaRate));
sb.replaceFirst("%spoilRate%", df.format(spoilRate));
sb.replaceFirst("%fireResist%", df.format(fireResist));
sb.replaceFirst("%windResist%", df.format(windResist));
sb.replaceFirst("%waterResist%", df.format(waterResist));
sb.replaceFirst("%earthResist%", df.format(earthResist));
sb.replaceFirst("%holyResist%", df.format(holyResist));
sb.replaceFirst("%darkResist%", df.format(unholyResist));
sb.replaceFirst("%bleedPower%", df.format(bleedPower));
sb.replaceFirst("%bleedResist%", df.format(bleedResist));
sb.replaceFirst("%poisonPower%", df.format(poisonPower));
sb.replaceFirst("%poisonResist%", df.format(poisonResist));
sb.replaceFirst("%stunPower%", df.format(stunPower));
sb.replaceFirst("%stunResist%", df.format(stunResist));
sb.replaceFirst("%rootPower%", df.format(rootPower));
sb.replaceFirst("%rootResist%", df.format(rootResist));
sb.replaceFirst("%sleepPower%", df.format(sleepPower));
sb.replaceFirst("%sleepResist%", df.format(sleepResist));
sb.replaceFirst("%paralyzePower%", df.format(paralyzePower));
sb.replaceFirst("%paralyzeResist%", df.format(paralyzeResist));
sb.replaceFirst("%mentalPower%", df.format(mentalPower));
sb.replaceFirst("%mentalResist%", df.format(mentalResist));
sb.replaceFirst("%debuffPower%", df.format(debuffPower));
sb.replaceFirst("%debuffResist%", df.format(debuffResist));
sb.replaceFirst("%cancelPower%", df.format(cancelPower));
sb.replaceFirst("%cancelResist%", df.format(cancelResist));
sb.replaceFirst("%swordResist%", df.format(swordResist));
sb.replaceFirst("%dualResist%", df.format(dualResist));
sb.replaceFirst("%bluntResist%", df.format(bluntResist));
sb.replaceFirst("%daggerResist%", df.format(daggerResist));
sb.replaceFirst("%bowResist%", df.format(bowResist));
sb.replaceFirst("%crossbowResist%", df.format(crossbowResist));
sb.replaceFirst("%fistResist%", df.format(fistResist));
sb.replaceFirst("%poleResist%", df.format(poleResist));
sb.replaceFirst("%critChanceResist%", df.format(critChanceResist));
sb.replaceFirst("%critDamResist%", df.format(critDamResist));
NpcHtmlMessage msg = new NpcHtmlMessage(0);
msg.setHtml(Strings.bbParse(sb.toString()));
player.sendPacket(msg);
return true;
}