mirror of
https://github.com/EQEmu/Server.git
synced 2026-05-19 13:28:25 +00:00
More mob_info work
This commit is contained in:
+236
-43
@@ -23,10 +23,32 @@
|
||||
#include "../common/races.h"
|
||||
#include "../common/say_link.h"
|
||||
|
||||
std::string commify(const std::string &number)
|
||||
{
|
||||
std::string temp_string;
|
||||
|
||||
auto string_length = static_cast<int>(number.length());
|
||||
int i = 0;
|
||||
for (i = string_length - 3; i >= 0; i -= 3) {
|
||||
if (i > 0) {
|
||||
temp_string = "," + number.substr(static_cast<unsigned long>(i), 3) + temp_string;
|
||||
}
|
||||
else {
|
||||
temp_string = number.substr(static_cast<unsigned long>(i), 3) + temp_string;
|
||||
}
|
||||
}
|
||||
|
||||
if (i < 0) {
|
||||
temp_string = number.substr(0, static_cast<unsigned long>(3 + i)) + temp_string;
|
||||
}
|
||||
|
||||
return temp_string;
|
||||
}
|
||||
|
||||
inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribute)
|
||||
{
|
||||
if (attribute == "ac") {
|
||||
return std::to_string(mob->GetAC());
|
||||
return commify(std::to_string(mob->GetAC()));
|
||||
}
|
||||
|
||||
if (attribute == "atk") {
|
||||
@@ -39,71 +61,100 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut
|
||||
endurance = mob->CastToClient()->GetEndurance();
|
||||
}
|
||||
|
||||
return std::to_string(endurance);
|
||||
return commify(std::to_string(endurance));
|
||||
}
|
||||
|
||||
if (attribute == "hp") {
|
||||
return std::to_string(mob->GetHP());
|
||||
return commify(std::to_string(mob->GetHP()));
|
||||
}
|
||||
|
||||
if (attribute == "hp_min_max") {
|
||||
return commify(std::to_string(mob->GetHP())) + " / " + commify(std::to_string(mob->GetMaxHP())) + " (" +
|
||||
std::to_string((int)mob->GetHPRatio()) + "%)";
|
||||
}
|
||||
|
||||
if (attribute == "mana") {
|
||||
return std::to_string(mob->GetMana());
|
||||
return commify(std::to_string(mob->GetMana()));
|
||||
}
|
||||
|
||||
if (attribute == "mp_min_max") {
|
||||
return commify(std::to_string(mob->GetMana())) + " / " + commify(std::to_string(mob->GetMaxMana())) + " (" +
|
||||
std::to_string((int)mob->GetManaPercent()) + "%)";
|
||||
}
|
||||
|
||||
if (attribute == "end_min_max") {
|
||||
return commify(std::to_string(mob->GetEndurance())) + " / " + commify(std::to_string(mob->GetMaxEndurance())) + " (" +
|
||||
std::to_string((int)mob->GetEndurancePercent()) + "%)";
|
||||
}
|
||||
|
||||
if (attribute == "str") {
|
||||
return std::to_string(mob->GetSTR());
|
||||
return commify(std::to_string(mob->GetSTR())) + " / " + commify(std::to_string(mob->GetMaxSTR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicSTR()));
|
||||
}
|
||||
|
||||
if (attribute == "sta") {
|
||||
return std::to_string(mob->GetSTA());
|
||||
return commify(std::to_string(mob->GetSTA())) + " / " + commify(std::to_string(mob->GetMaxSTA())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicSTA()));
|
||||
}
|
||||
|
||||
if (attribute == "dex") {
|
||||
return std::to_string(mob->GetDEX());
|
||||
return commify(std::to_string(mob->GetDEX())) + " / " + commify(std::to_string(mob->GetMaxDEX())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicDEX()));
|
||||
}
|
||||
|
||||
if (attribute == "agi") {
|
||||
return std::to_string(mob->GetAGI());
|
||||
return commify(std::to_string(mob->GetAGI())) + " / " + commify(std::to_string(mob->GetMaxAGI())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicAGI()));
|
||||
}
|
||||
|
||||
if (attribute == "int") {
|
||||
return std::to_string(mob->GetINT());
|
||||
return commify(std::to_string(mob->GetINT())) + " / " + commify(std::to_string(mob->GetMaxINT())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicINT()));
|
||||
}
|
||||
|
||||
if (attribute == "wis") {
|
||||
return std::to_string(mob->GetWIS());
|
||||
return commify(std::to_string(mob->GetWIS())) + " / " + commify(std::to_string(mob->GetMaxWIS())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicWIS()));
|
||||
}
|
||||
|
||||
if (attribute == "cha") {
|
||||
return std::to_string(mob->GetCHA());
|
||||
return commify(std::to_string(mob->GetCHA())) + " / " + commify(std::to_string(mob->GetMaxCHA())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicCHA()));
|
||||
}
|
||||
|
||||
if (attribute == "mr") {
|
||||
return std::to_string(mob->GetMR());
|
||||
return commify(std::to_string(mob->GetMR())) + " / " + commify(std::to_string(mob->GetMaxMR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicMR()));
|
||||
}
|
||||
|
||||
if (attribute == "cr") {
|
||||
return std::to_string(mob->GetCR());
|
||||
return commify(std::to_string(mob->GetCR())) + " / " + commify(std::to_string(mob->GetMaxCR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicCR()));
|
||||
}
|
||||
|
||||
if (attribute == "fr") {
|
||||
return std::to_string(mob->GetFR());
|
||||
return commify(std::to_string(mob->GetFR())) + " / " + commify(std::to_string(mob->GetMaxFR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicFR()));
|
||||
}
|
||||
|
||||
if (attribute == "pr") {
|
||||
return std::to_string(mob->GetPR());
|
||||
return commify(std::to_string(mob->GetPR())) + " / " + commify(std::to_string(mob->GetMaxPR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicPR()));
|
||||
}
|
||||
|
||||
if (attribute == "dr") {
|
||||
return std::to_string(mob->GetDR());
|
||||
return commify(std::to_string(mob->GetDR())) + " / " + commify(std::to_string(mob->GetMaxDR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicDR()));
|
||||
}
|
||||
|
||||
if (attribute == "cr") {
|
||||
return std::to_string(mob->GetCR());
|
||||
return commify(std::to_string(mob->GetCR())) + " / " + commify(std::to_string(mob->GetMaxCR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicCR()));
|
||||
}
|
||||
|
||||
if (attribute == "pr") {
|
||||
return std::to_string(mob->GetPR());
|
||||
return commify(std::to_string(mob->GetPR())) + " / " + commify(std::to_string(mob->GetMaxPR())) + " +" +
|
||||
commify(std::to_string(mob->GetHeroicPR()));
|
||||
}
|
||||
|
||||
if (attribute == "cor") {
|
||||
@@ -118,8 +169,9 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut
|
||||
return mob->GetCleanName();
|
||||
}
|
||||
|
||||
if (attribute == "lastname") {
|
||||
return mob->GetLastName();
|
||||
if (attribute == "surname") {
|
||||
std::string last_name = mob->GetLastName();
|
||||
return (last_name.length() > 0 ? mob->GetLastName() : " ");
|
||||
}
|
||||
|
||||
if (attribute == "race") {
|
||||
@@ -134,6 +186,18 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut
|
||||
return std::to_string(mob->GetLevel());
|
||||
}
|
||||
|
||||
if (attribute == "flymode") {
|
||||
return std::to_string(mob->GetFlyMode());
|
||||
}
|
||||
|
||||
if (attribute == "maxbuffslots") {
|
||||
return std::to_string(mob->GetMaxBuffSlots());
|
||||
}
|
||||
|
||||
if (attribute == "curbuffslots") {
|
||||
return std::to_string(mob->GetCurrentBuffSlots());
|
||||
}
|
||||
|
||||
if (mob->IsNPC()) {
|
||||
NPC *npc = mob->CastToNPC();
|
||||
|
||||
@@ -150,13 +214,13 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut
|
||||
return std::to_string(npc->GetGender());
|
||||
}
|
||||
if (attribute == "size") {
|
||||
return std::to_string(npc->GetSize());
|
||||
return std::to_string((int)npc->GetSize());
|
||||
}
|
||||
if (attribute == "runspeed") {
|
||||
return std::to_string(npc->GetRunspeed());
|
||||
return std::to_string((int)npc->GetRunspeed());
|
||||
}
|
||||
if (attribute == "walkspeed") {
|
||||
return std::to_string(npc->GetWalkspeed());
|
||||
return std::to_string((int)npc->GetWalkspeed());
|
||||
}
|
||||
if (attribute == "spawngroup") {
|
||||
return std::to_string(npc->GetSp2());
|
||||
@@ -167,6 +231,85 @@ inline std::string GetMobAttributeByString(Mob *mob, const std::string &attribut
|
||||
if (attribute == "emote") {
|
||||
return std::to_string(npc->GetEmoteID());
|
||||
}
|
||||
if (attribute == "seeInvis") {
|
||||
return std::to_string(npc->SeeInvisible());
|
||||
}
|
||||
if (attribute == "seeInvisUndead") {
|
||||
return std::to_string(npc->SeeInvisibleUndead());
|
||||
}
|
||||
if (attribute == "faction") {
|
||||
return std::to_string(npc->GetNPCFactionID());
|
||||
}
|
||||
if (attribute == "loottable") {
|
||||
return std::to_string(npc->GetLoottableID());
|
||||
}
|
||||
if (attribute == "primSkill") {
|
||||
return std::to_string(npc->GetPrimSkill());
|
||||
}
|
||||
if (attribute == "secSkill") {
|
||||
return std::to_string(npc->GetSecSkill());
|
||||
}
|
||||
if (attribute == "meleeTexture1") {
|
||||
return std::to_string(npc->GetMeleeTexture1());
|
||||
}
|
||||
if (attribute == "meleeTexture2") {
|
||||
return std::to_string(npc->GetMeleeTexture2());
|
||||
}
|
||||
if (attribute == "aggrorange") {
|
||||
return std::to_string((int)npc->GetAggroRange());
|
||||
}
|
||||
if (attribute == "assistrange") {
|
||||
return std::to_string((int)npc->GetAssistRange());
|
||||
}
|
||||
if (attribute == "findable") {
|
||||
return std::to_string(npc->IsFindable());
|
||||
}
|
||||
if (attribute == "trackable") {
|
||||
return std::to_string(npc->IsTrackable());
|
||||
}
|
||||
if (attribute == "spellsid") {
|
||||
return std::to_string(npc->GetNPCSpellsID());
|
||||
}
|
||||
if (attribute == "roamboxMinX") {
|
||||
return std::to_string((int)npc->GetRoamboxMinX());
|
||||
}
|
||||
if (attribute == "roamboxMaxX") {
|
||||
return std::to_string((int)npc->GetRoamboxMaxX());
|
||||
}
|
||||
if (attribute == "roamboxMinY") {
|
||||
return std::to_string((int)npc->GetRoamboxMinY());
|
||||
}
|
||||
if (attribute == "roamboxMaxY") {
|
||||
return std::to_string((int)npc->GetRoamboxMaxY());
|
||||
}
|
||||
if (attribute == "roamboxMinDelay") {
|
||||
return std::to_string((int)npc->GetRoamboxMinDelay());
|
||||
}
|
||||
if (attribute == "roamboxDelay") {
|
||||
return std::to_string((int)npc->GetRoamboxDelay());
|
||||
}
|
||||
if (attribute == "roamboxDistance") {
|
||||
return std::to_string((int)npc->GetRoamboxDistance());
|
||||
}
|
||||
if (attribute == "proximityMinX") {
|
||||
return std::to_string((int)npc->GetProximityMinX());
|
||||
}
|
||||
if (attribute == "proximityMaxX") {
|
||||
return std::to_string((int)npc->GetProximityMaxX());
|
||||
}
|
||||
if (attribute == "proximityMinY") {
|
||||
return std::to_string((int)npc->GetProximityMinY());
|
||||
}
|
||||
if (attribute == "proximityMaxY") {
|
||||
return std::to_string((int)npc->GetProximityMaxY());
|
||||
}
|
||||
if (attribute == "proximityMinZ") {
|
||||
return std::to_string((int)npc->GetProximityMinZ());
|
||||
}
|
||||
if (attribute == "proximityMaxZ") {
|
||||
return std::to_string((int)npc->GetProximityMaxZ());
|
||||
}
|
||||
|
||||
npc->GetNPCEmote(npc->GetEmoteID(), 0);
|
||||
}
|
||||
|
||||
@@ -223,6 +366,11 @@ inline std::string WriteDisplayInfoSection(
|
||||
}
|
||||
|
||||
std::string attribute_name = attribute;
|
||||
|
||||
if (attribute_name.find('_') != std::string::npos) {
|
||||
std::vector<std::string> split_string = split(attribute_name, '_');
|
||||
attribute_name = split_string[0];
|
||||
}
|
||||
if (attribute_name.length() <= 3) {
|
||||
attribute_name = str_toupper(attribute_name);
|
||||
}
|
||||
@@ -289,32 +437,28 @@ void Mob::DisplayInfo(Mob *mob)
|
||||
// };
|
||||
|
||||
if (this->IsClient()) {
|
||||
std::string window_text = "*Drag / Maximize Window to see all info<br><br>";
|
||||
std::string window_text = "<c \"#FFFF66\">*Drag window open vertically to see all</c><br>";
|
||||
|
||||
Client *client = this->CastToClient();
|
||||
|
||||
std::vector<std::string> who_attributes = {
|
||||
std::vector<std::string> info_attributes = {
|
||||
"name",
|
||||
"lastname",
|
||||
};
|
||||
window_text += WriteDisplayInfoSection(mob, "Who", who_attributes, 1, false);
|
||||
|
||||
std::vector<std::string> type_attributes = {
|
||||
"race",
|
||||
"surname",
|
||||
"class",
|
||||
"type"
|
||||
};
|
||||
window_text += WriteDisplayInfoSection(mob, "Type", type_attributes, 3, true);
|
||||
window_text += WriteDisplayInfoSection(mob, "Info", info_attributes, 1, false);
|
||||
|
||||
std::vector<std::string> basic_attributes = {
|
||||
"type",
|
||||
"level",
|
||||
"hp",
|
||||
"mana",
|
||||
"end",
|
||||
"hp_min_max",
|
||||
"ac",
|
||||
"atk"
|
||||
"mp_min_max",
|
||||
"atk",
|
||||
"end_min_max",
|
||||
};
|
||||
window_text += WriteDisplayInfoSection(mob, "Main", basic_attributes, 7, true);
|
||||
window_text += WriteDisplayInfoSection(mob, "Main", basic_attributes, 1, false);
|
||||
|
||||
std::vector<std::string> stat_attributes = {
|
||||
"str",
|
||||
@@ -325,7 +469,7 @@ void Mob::DisplayInfo(Mob *mob)
|
||||
"int",
|
||||
"cha",
|
||||
};
|
||||
window_text += WriteDisplayInfoSection(mob, "Statistics", stat_attributes, 7, true);
|
||||
window_text += WriteDisplayInfoSection(mob, "Statistics", stat_attributes, 1, false);
|
||||
|
||||
std::vector<std::string> resist_attributes = {
|
||||
"pr",
|
||||
@@ -336,9 +480,11 @@ void Mob::DisplayInfo(Mob *mob)
|
||||
"cor",
|
||||
"phy",
|
||||
};
|
||||
window_text += WriteDisplayInfoSection(mob, "Resists", resist_attributes, 7, true);
|
||||
window_text += WriteDisplayInfoSection(mob, "Resists", resist_attributes, 1, false);
|
||||
|
||||
if (mob->IsNPC()) {
|
||||
NPC *npc = mob->CastToNPC();
|
||||
|
||||
std::vector<std::string> npc_attributes = {
|
||||
"npcid",
|
||||
"texture",
|
||||
@@ -350,13 +496,60 @@ void Mob::DisplayInfo(Mob *mob)
|
||||
"spawngroup",
|
||||
"grid",
|
||||
"emote",
|
||||
"seeInvis",
|
||||
"seeInvisUndead",
|
||||
"faction",
|
||||
"loottable",
|
||||
"primSkill",
|
||||
"secSkill",
|
||||
"meleeTexture1",
|
||||
"meleeTexture2",
|
||||
"aggrorange",
|
||||
"assistrange",
|
||||
"findable",
|
||||
"trackable",
|
||||
"flymode",
|
||||
"spellsid",
|
||||
"curbuffslots",
|
||||
"maxbuffslots",
|
||||
};
|
||||
window_text += WriteDisplayInfoSection(mob, "NPC Attributes", npc_attributes, 2, true);
|
||||
|
||||
window_text += WriteDisplayInfoSection(mob, "NPC Attributes", npc_attributes, 1, true);
|
||||
|
||||
/**
|
||||
* Print Roambox
|
||||
*/
|
||||
if (npc->GetRoamboxMaxX() != 0 && npc->GetRoamboxMinX() != 0) {
|
||||
std::vector<std::string> npc_roambox = {
|
||||
"roamboxMinX",
|
||||
"roamboxMaxX",
|
||||
"roamboxMinY",
|
||||
"roamboxMaxY",
|
||||
"roamboxMinDelay",
|
||||
"roamboxDelay",
|
||||
"roamboxDistance",
|
||||
};
|
||||
|
||||
window_text += WriteDisplayInfoSection(mob, "Roambox", npc_roambox, 1, true);
|
||||
}
|
||||
|
||||
if (npc->proximity != nullptr) {
|
||||
std::vector<std::string> npc_proximity = {
|
||||
"proximityMinX",
|
||||
"proximityMaxX",
|
||||
"proximityMinY",
|
||||
"proximityMaxY",
|
||||
"proximityMinZ",
|
||||
"proximityMaxZ",
|
||||
};
|
||||
|
||||
window_text += WriteDisplayInfoSection(mob, "Proximity", npc_proximity, 1, true);
|
||||
}
|
||||
|
||||
client->Message(0, " ");
|
||||
mob->CastToNPC()->QueryLoot(client);
|
||||
npc->QueryLoot(client);
|
||||
|
||||
NPCCommandsMenu(client, mob->CastToNPC());
|
||||
NPCCommandsMenu(client, npc);
|
||||
}
|
||||
|
||||
std::cout << "Window Length: " << window_text.length() << std::endl;
|
||||
@@ -369,7 +562,7 @@ void Mob::DisplayInfo(Mob *mob)
|
||||
EQEmu::popupresponse::MOB_INFO_DISMISS,
|
||||
0,
|
||||
100,
|
||||
10,
|
||||
0,
|
||||
"Snooze",
|
||||
"OK"
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user