[Quest API] Add GetConsiderColor() to Perl/Lua (#4253)

This commit is contained in:
Alex King 2024-04-15 05:53:48 -04:00 committed by GitHub
parent b1d873d1fc
commit 9a09d820a5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 193 additions and 138 deletions

View File

@ -714,3 +714,25 @@ std::string EQ::constants::GetSpecialAbilityName(uint32 ability_id)
return std::string(); return std::string();
} }
const std::map<uint32, std::string>& EQ::constants::GetConsiderColorMap()
{
static const std::map<uint32, std::string> consider_color_map = {
{ ConsiderColor::Green, "Green" },
{ ConsiderColor::DarkBlue, "Dark Blue" },
{ ConsiderColor::Gray, "Gray" },
{ ConsiderColor::White, "White" },
{ ConsiderColor::Red, "Red" },
{ ConsiderColor::Yellow, "Yellow" },
{ ConsiderColor::LightBlue, "Light Blue" },
{ ConsiderColor::WhiteTitanium, "White" },
};
return consider_color_map;
}
std::string EQ::constants::GetConsiderColorName(uint32 consider_color)
{
const auto& c = EQ::constants::GetConsiderColorMap().find(consider_color);
return c != EQ::constants::GetConsiderColorMap().end() ? c->second : std::string();
}

View File

@ -404,6 +404,9 @@ namespace EQ
extern const std::map<uint32, std::string>& GetSpecialAbilityMap(); extern const std::map<uint32, std::string>& GetSpecialAbilityMap();
std::string GetSpecialAbilityName(uint32 ability_id); std::string GetSpecialAbilityName(uint32 ability_id);
extern const std::map<uint32, std::string>& GetConsiderColorMap();
std::string GetConsiderColorName(uint32 consider_color);
const int STANCE_TYPE_FIRST = stancePassive; const int STANCE_TYPE_FIRST = stancePassive;
const int STANCE_TYPE_LAST = stanceBurnAE; const int STANCE_TYPE_LAST = stanceBurnAE;
const int STANCE_TYPE_COUNT = stanceBurnAE; const int STANCE_TYPE_COUNT = stanceBurnAE;
@ -559,6 +562,17 @@ enum ConsiderLevel : uint8 {
Scowls Scowls
}; };
namespace ConsiderColor {
constexpr uint32 Green = 2;
constexpr uint32 DarkBlue = 4;
constexpr uint32 Gray = 6;
constexpr uint32 White = 10;
constexpr uint32 Red = 13;
constexpr uint32 Yellow = 15;
constexpr uint32 LightBlue = 18;
constexpr uint32 WhiteTitanium = 20;
};
enum TargetDescriptionType : uint8 { enum TargetDescriptionType : uint8 {
LCSelf, LCSelf,
UCSelf, UCSelf,

View File

@ -221,7 +221,7 @@ void NPC::DescribeAggro(Client *to_who, Mob *mob, bool verbose) {
if (RuleB(Aggro, UseLevelAggro)) { if (RuleB(Aggro, UseLevelAggro)) {
if ( if (
GetLevel() < RuleI(Aggro, MinAggroLevel) && GetLevel() < RuleI(Aggro, MinAggroLevel) &&
mob->GetLevelCon(GetLevel()) == CON_GRAY && mob->GetLevelCon(GetLevel()) == ConsiderColor::Gray &&
GetBodyType() != BT_Undead && GetBodyType() != BT_Undead &&
!AlwaysAggro() !AlwaysAggro()
) { ) {
@ -237,7 +237,7 @@ void NPC::DescribeAggro(Client *to_who, Mob *mob, bool verbose) {
} else { } else {
if ( if (
GetINT() > RuleI(Aggro, IntAggroThreshold) && GetINT() > RuleI(Aggro, IntAggroThreshold) &&
mob->GetLevelCon(GetLevel()) == CON_GRAY && mob->GetLevelCon(GetLevel()) == ConsiderColor::Gray &&
!AlwaysAggro() !AlwaysAggro()
) { ) {
to_who->Message( to_who->Message(
@ -502,7 +502,7 @@ bool Mob::CheckWillAggro(Mob *mob) {
mob->IsClient() && mob->IsClient() &&
mob->CastToClient()->IsSitting() mob->CastToClient()->IsSitting()
) || ) ||
mob->GetLevelCon(GetLevel()) != CON_GRAY mob->GetLevelCon(GetLevel()) != ConsiderColor::Gray
) && ) &&
( (
faction_value == FACTION_SCOWLS || faction_value == FACTION_SCOWLS ||
@ -531,7 +531,7 @@ bool Mob::CheckWillAggro(Mob *mob) {
mob->IsClient() && mob->IsClient() &&
mob->CastToClient()->IsSitting() mob->CastToClient()->IsSitting()
) || ) ||
mob->GetLevelCon(GetLevel()) != CON_GRAY mob->GetLevelCon(GetLevel()) != ConsiderColor::Gray
) && ) &&
( (
faction_value == FACTION_SCOWLS || faction_value == FACTION_SCOWLS ||
@ -586,7 +586,7 @@ int EntityList::GetHatedCount(Mob *attacker, Mob *exclude, bool inc_gray_con)
continue; continue;
} }
if (!inc_gray_con && attacker->GetLevelCon(mob->GetLevel()) == CON_GRAY) { if (!inc_gray_con && attacker->GetLevelCon(mob->GetLevel()) == ConsiderColor::Gray) {
continue; continue;
} }

View File

@ -2720,7 +2720,7 @@ bool NPC::Death(Mob* killer_mob, int64 damage, uint16 spell, EQ::skills::SkillTy
if (!is_ldon_treasure && !MerchantType) { if (!is_ldon_treasure && !MerchantType) {
const uint32 con_level = give_exp->GetLevelCon(GetLevel()); const uint32 con_level = give_exp->GetLevelCon(GetLevel());
if (con_level != CON_GRAY) { if (con_level != ConsiderColor::Gray) {
if (!GetOwner() || (GetOwner() && !GetOwner()->IsClient())) { if (!GetOwner() || (GetOwner() && !GetOwner()->IsClient())) {
give_exp_client->AddEXP(final_exp, con_level); give_exp_client->AddEXP(final_exp, con_level);

View File

@ -7366,23 +7366,23 @@ void EntityList::ShowSpawnWindow(Client* client, int Distance, bool NamedOnly) {
LastCon = CurrentCon; LastCon = CurrentCon;
switch(CurrentCon) { switch(CurrentCon) {
case CON_GREEN: { case ConsiderColor::Green: {
WindowText += "<c \"#00FF00\">"; WindowText += "<c \"#00FF00\">";
break; break;
} }
case CON_LIGHTBLUE: { case ConsiderColor::LightBlue: {
WindowText += "<c \"#8080FF\">"; WindowText += "<c \"#8080FF\">";
break; break;
} }
case CON_BLUE: { case ConsiderColor::DarkBlue: {
WindowText += "<c \"#2020FF\">"; WindowText += "<c \"#2020FF\">";
break; break;
} }
case CON_YELLOW: { case ConsiderColor::Yellow: {
WindowText += "<c \"#FFFF00\">"; WindowText += "<c \"#FFFF00\">";
break; break;
} }
case CON_RED: { case ConsiderColor::Red: {
WindowText += "<c \"#FF0000\">"; WindowText += "<c \"#FF0000\">";
break; break;
} }

View File

@ -2660,7 +2660,7 @@ bool Client::CheckIncreaseSkill(EQ::skills::SkillType skillid, Mob *against_who,
against_who->GetSpecialAbility(IMMUNE_AGGRO) || against_who->GetSpecialAbility(IMMUNE_AGGRO) ||
against_who->GetSpecialAbility(IMMUNE_AGGRO_CLIENT) || against_who->GetSpecialAbility(IMMUNE_AGGRO_CLIENT) ||
against_who->IsClient() || against_who->IsClient() ||
GetLevelCon(against_who->GetLevel()) == CON_GRAY GetLevelCon(against_who->GetLevel()) == ConsiderColor::Gray
) { ) {
return false; return false;
} }

View File

@ -5189,10 +5189,10 @@ void Client::Handle_OP_Consider(const EQApplicationPacket *app)
con->level = GetLevelCon(t->GetLevel()); con->level = GetLevelCon(t->GetLevel());
if (ClientVersion() <= EQ::versions::ClientVersion::Titanium) { if (ClientVersion() <= EQ::versions::ClientVersion::Titanium) {
if (con->level == CON_GRAY) { if (con->level == ConsiderColor::Gray) {
con->level = CON_GREEN; con->level = ConsiderColor::Green;
} else if (con->level == CON_WHITE) { } else if (con->level == ConsiderColor::White) {
con->level = CON_WHITE_TITANIUM; con->level = ConsiderColor::WhiteTitanium;
} }
} }
@ -5233,26 +5233,26 @@ void Client::Handle_OP_Consider(const EQApplicationPacket *app)
if (t->IsRaidTarget()) { if (t->IsRaidTarget()) {
uint32 color = 0; uint32 color = 0;
switch (con->level) { switch (con->level) {
case CON_GREEN: case ConsiderColor::Green:
color = 2; color = 2;
break; break;
case CON_LIGHTBLUE: case ConsiderColor::LightBlue:
color = 10; color = 10;
break; break;
case CON_BLUE: case ConsiderColor::DarkBlue:
color = 4; color = 4;
break; break;
case CON_WHITE_TITANIUM: case ConsiderColor::WhiteTitanium:
case CON_WHITE: case ConsiderColor::White:
color = 10; color = 10;
break; break;
case CON_YELLOW: case ConsiderColor::Yellow:
color = 15; color = 15;
break; break;
case CON_RED: case ConsiderColor::Red:
color = 13; color = 13;
break; break;
case CON_GRAY: case ConsiderColor::Gray:
color = 6; color = 6;
break; break;
} }

View File

@ -25,15 +25,6 @@ namespace Archetype {
constexpr uint8 Melee = 3; constexpr uint8 Melee = 3;
}; };
#define CON_GREEN 2
#define CON_LIGHTBLUE 18
#define CON_BLUE 4
#define CON_WHITE 10
#define CON_WHITE_TITANIUM 20
#define CON_YELLOW 15
#define CON_RED 13
#define CON_GRAY 6
#define DMG_BLOCKED -1 #define DMG_BLOCKED -1
#define DMG_PARRIED -2 #define DMG_PARRIED -2
#define DMG_RIPOSTED -3 #define DMG_RIPOSTED -3

View File

@ -146,25 +146,25 @@ uint64 Client::CalcEXP(uint8 consider_level, bool ignore_modifiers) {
if (RuleB(Character,UseXPConScaling)) { if (RuleB(Character,UseXPConScaling)) {
if (consider_level != 0xFF) { if (consider_level != 0xFF) {
switch (consider_level) { switch (consider_level) {
case CON_GRAY: case ConsiderColor::Gray:
in_add_exp = 0; in_add_exp = 0;
return 0; return 0;
case CON_GREEN: case ConsiderColor::Green:
in_add_exp = in_add_exp * RuleI(Character, GreenModifier) / 100; in_add_exp = in_add_exp * RuleI(Character, GreenModifier) / 100;
break; break;
case CON_LIGHTBLUE: case ConsiderColor::LightBlue:
in_add_exp = in_add_exp * RuleI(Character, LightBlueModifier) / 100; in_add_exp = in_add_exp * RuleI(Character, LightBlueModifier) / 100;
break; break;
case CON_BLUE: case ConsiderColor::DarkBlue:
in_add_exp = in_add_exp * RuleI(Character, BlueModifier) / 100; in_add_exp = in_add_exp * RuleI(Character, BlueModifier) / 100;
break; break;
case CON_WHITE: case ConsiderColor::White:
in_add_exp = in_add_exp * RuleI(Character, WhiteModifier) / 100; in_add_exp = in_add_exp * RuleI(Character, WhiteModifier) / 100;
break; break;
case CON_YELLOW: case ConsiderColor::Yellow:
in_add_exp = in_add_exp * RuleI(Character, YellowModifier) / 100; in_add_exp = in_add_exp * RuleI(Character, YellowModifier) / 100;
break; break;
case CON_RED: case ConsiderColor::Red:
in_add_exp = in_add_exp * RuleI(Character, RedModifier) / 100; in_add_exp = in_add_exp * RuleI(Character, RedModifier) / 100;
break; break;
} }
@ -222,22 +222,22 @@ float static GetConLevelModifierPercent(uint8 conlevel)
{ {
switch (conlevel) switch (conlevel)
{ {
case CON_GREEN: case ConsiderColor::Green:
return (float)RuleI(Character, GreenModifier) / 100; return (float)RuleI(Character, GreenModifier) / 100;
break; break;
case CON_LIGHTBLUE: case ConsiderColor::LightBlue:
return (float)RuleI(Character, LightBlueModifier) / 100; return (float)RuleI(Character, LightBlueModifier) / 100;
break; break;
case CON_BLUE: case ConsiderColor::DarkBlue:
return (float)RuleI(Character, BlueModifier) / 100; return (float)RuleI(Character, BlueModifier) / 100;
break; break;
case CON_WHITE: case ConsiderColor::White:
return (float)RuleI(Character, WhiteModifier) / 100; return (float)RuleI(Character, WhiteModifier) / 100;
break; break;
case CON_YELLOW: case ConsiderColor::Yellow:
return (float)RuleI(Character, YellowModifier) / 100; return (float)RuleI(Character, YellowModifier) / 100;
break; break;
case CON_RED: case ConsiderColor::Red:
return (float)RuleI(Character, RedModifier) / 100; return (float)RuleI(Character, RedModifier) / 100;
break; break;
default: default:
@ -249,7 +249,7 @@ void Client::CalculateNormalizedAAExp(uint64 &add_aaxp, uint8 conlevel, bool res
{ {
// Functionally this is the same as having the case in the switch, but this is // Functionally this is the same as having the case in the switch, but this is
// cleaner to read. // cleaner to read.
if (CON_GRAY == conlevel || resexp) if (ConsiderColor::Gray == conlevel || resexp)
{ {
add_aaxp = 0; add_aaxp = 0;
return; return;
@ -325,7 +325,7 @@ void Client::CalculateStandardAAExp(uint64 &add_aaxp, uint8 conlevel, bool resex
void Client::CalculateLeadershipExp(uint64 &add_exp, uint8 conlevel) void Client::CalculateLeadershipExp(uint64 &add_exp, uint8 conlevel)
{ {
if (IsLeadershipEXPOn() && (conlevel == CON_BLUE || conlevel == CON_WHITE || conlevel == CON_YELLOW || conlevel == CON_RED)) if (IsLeadershipEXPOn() && (conlevel == ConsiderColor::DarkBlue || conlevel == ConsiderColor::White || conlevel == ConsiderColor::Yellow || conlevel == ConsiderColor::Red))
{ {
add_exp = static_cast<uint64>(static_cast<float>(add_exp) * 0.8f); add_exp = static_cast<uint64>(static_cast<float>(add_exp) * 0.8f);
@ -1158,7 +1158,7 @@ void Group::SplitExp(const uint64 exp, Mob* other) {
} }
const uint8 consider_level = Mob::GetLevelCon(highest_level, other->GetLevel()); const uint8 consider_level = Mob::GetLevelCon(highest_level, other->GetLevel());
if (consider_level == CON_GRAY) { if (consider_level == ConsiderColor::Gray) {
return; return;
} }
@ -1204,7 +1204,7 @@ void Raid::SplitExp(const uint64 exp, Mob* other) {
raid_experience = static_cast<uint64>(static_cast<float>(raid_experience) * RuleR(Character, FinalRaidExpMultiplier)); raid_experience = static_cast<uint64>(static_cast<float>(raid_experience) * RuleR(Character, FinalRaidExpMultiplier));
const auto consider_level = Mob::GetLevelCon(highest_level, other->GetLevel()); const auto consider_level = Mob::GetLevelCon(highest_level, other->GetLevel());
if (consider_level == CON_GRAY) { if (consider_level == ConsiderColor::Gray) {
return; return;
} }

View File

@ -71,7 +71,7 @@ void Mob::CheckFlee()
} }
// If no special flee_percent check for Gray or Other con rates // If no special flee_percent check for Gray or Other con rates
if (GetLevelCon(hate_top->GetLevel(), GetLevel()) == CON_GRAY && flee_ratio == 0 && RuleB(Combat, FleeGray) && if (GetLevelCon(hate_top->GetLevel(), GetLevel()) == ConsiderColor::Gray && flee_ratio == 0 && RuleB(Combat, FleeGray) &&
GetLevel() <= RuleI(Combat, FleeGrayMaxLevel)) { GetLevel() <= RuleI(Combat, FleeGrayMaxLevel)) {
flee_ratio = RuleI(Combat, FleeGrayHPRatio); flee_ratio = RuleI(Combat, FleeGrayHPRatio);
LogFlee("Mob [{}] using combat flee gray hp_ratio [{}] flee_ratio [{}]", GetCleanName(), hp_ratio, flee_ratio); LogFlee("Mob [{}] using combat flee gray hp_ratio [{}] flee_ratio [{}]", GetCleanName(), hp_ratio, flee_ratio);
@ -110,16 +110,16 @@ void Mob::CheckFlee()
int flee_chance; int flee_chance;
switch (con) { switch (con) {
//these values are not 100% researched //these values are not 100% researched
case CON_GRAY: case ConsiderColor::Gray:
flee_chance = 100; flee_chance = 100;
break; break;
case CON_GREEN: case ConsiderColor::Green:
flee_chance = 90; flee_chance = 90;
break; break;
case CON_LIGHTBLUE: case ConsiderColor::LightBlue:
flee_chance = 90; flee_chance = 90;
break; break;
case CON_BLUE: case ConsiderColor::DarkBlue:
flee_chance = 80; flee_chance = 80;
break; break;
default: default:
@ -175,7 +175,7 @@ void Mob::ProcessFlee()
Mob *hate_top = GetHateTop(); Mob *hate_top = GetHateTop();
// If no special flee_percent check for Gray or Other con rates // If no special flee_percent check for Gray or Other con rates
if(hate_top != nullptr && GetLevelCon(hate_top->GetLevel(), GetLevel()) == CON_GRAY && fleeratio == 0 && RuleB(Combat, FleeGray)) { if(hate_top != nullptr && GetLevelCon(hate_top->GetLevel(), GetLevel()) == ConsiderColor::Gray && fleeratio == 0 && RuleB(Combat, FleeGray)) {
fleeratio = RuleI(Combat, FleeGrayHPRatio); fleeratio = RuleI(Combat, FleeGrayHPRatio);
} else if(fleeratio == 0) { } else if(fleeratio == 0) {
fleeratio = RuleI(Combat, FleeHPRatio ); fleeratio = RuleI(Combat, FleeHPRatio );

View File

@ -3357,6 +3357,18 @@ bool Lua_Mob::IsWisdomCasterClass()
return self->IsWisdomCasterClass(); return self->IsWisdomCasterClass();
} }
std::string Lua_Mob::GetConsiderColor(Lua_Mob other)
{
Lua_Safe_Call_String();
return EQ::constants::GetConsiderColorName(self->GetLevelCon(other.GetLevel()));
}
std::string Lua_Mob::GetConsiderColor(uint8 other_level)
{
Lua_Safe_Call_String();
return EQ::constants::GetConsiderColorName(self->GetLevelCon(other_level));
}
luabind::scope lua_register_mob() { luabind::scope lua_register_mob() {
return luabind::class_<Lua_Mob, Lua_Entity>("Mob") return luabind::class_<Lua_Mob, Lua_Entity>("Mob")
.def(luabind::constructor<>()) .def(luabind::constructor<>())
@ -3576,6 +3588,8 @@ luabind::scope lua_register_mob() {
.def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(void))&Lua_Mob::GetCloseMobList) .def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(void))&Lua_Mob::GetCloseMobList)
.def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(float))&Lua_Mob::GetCloseMobList) .def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(float))&Lua_Mob::GetCloseMobList)
.def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(float,bool))&Lua_Mob::GetCloseMobList) .def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(float,bool))&Lua_Mob::GetCloseMobList)
.def("GetConsiderColor", (std::string(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetConsiderColor)
.def("GetConsiderColor", (std::string(Lua_Mob::*)(uint8))&Lua_Mob::GetConsiderColor)
.def("GetCorruption", &Lua_Mob::GetCorruption) .def("GetCorruption", &Lua_Mob::GetCorruption)
.def("GetDEX", &Lua_Mob::GetDEX) .def("GetDEX", &Lua_Mob::GetDEX)
.def("GetDR", &Lua_Mob::GetDR) .def("GetDR", &Lua_Mob::GetDR)

View File

@ -590,6 +590,8 @@ public:
bool IsIntelligenceCasterClass(); bool IsIntelligenceCasterClass();
bool IsPureMeleeClass(); bool IsPureMeleeClass();
bool IsWisdomCasterClass(); bool IsWisdomCasterClass();
std::string GetConsiderColor(Lua_Mob other);
std::string GetConsiderColor(uint8 other_level);
}; };
#endif #endif

View File

@ -3794,37 +3794,37 @@ bool Merc::CheckConfidence() {
switch(CurrentCon) { switch(CurrentCon) {
case CON_GRAY: { case ConsiderColor::Gray: {
ConRating = 0; ConRating = 0;
break; break;
} }
case CON_GREEN: { case ConsiderColor::Green: {
ConRating = 0.1; ConRating = 0.1;
break; break;
} }
case CON_LIGHTBLUE: { case ConsiderColor::LightBlue: {
ConRating = 0.2; ConRating = 0.2;
break; break;
} }
case CON_BLUE: { case ConsiderColor::DarkBlue: {
ConRating = 0.6; ConRating = 0.6;
break; break;
} }
case CON_WHITE: { case ConsiderColor::White: {
ConRating = 1.0; ConRating = 1.0;
break; break;
} }
case CON_YELLOW: { case ConsiderColor::Yellow: {
ConRating = 1.2; ConRating = 1.2;
break; break;
} }
case CON_RED: { case ConsiderColor::Red: {
ConRating = 1.5; ConRating = 1.5;
break; break;
} }

View File

@ -2187,162 +2187,162 @@ uint32 Mob::GetLevelCon(uint8 mylevel, uint8 iOtherLevel) {
int16 diff = iOtherLevel - mylevel; int16 diff = iOtherLevel - mylevel;
if (diff == 0) if (diff == 0)
return CON_WHITE; return ConsiderColor::White;
else if (diff >= 1 && diff <= 2) else if (diff >= 1 && diff <= 2)
return CON_YELLOW; return ConsiderColor::Yellow;
else if (diff >= 3) else if (diff >= 3)
return CON_RED; return ConsiderColor::Red;
if (mylevel <= 8) if (mylevel <= 8)
{ {
if (diff <= -4) if (diff <= -4)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 9) else if (mylevel <= 9)
{ {
if (diff <= -6) if (diff <= -6)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -4) else if (diff <= -4)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 13) else if (mylevel <= 13)
{ {
if (diff <= -7) if (diff <= -7)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -5) else if (diff <= -5)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 15) else if (mylevel <= 15)
{ {
if (diff <= -7) if (diff <= -7)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -5) else if (diff <= -5)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 17) else if (mylevel <= 17)
{ {
if (diff <= -8) if (diff <= -8)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -6) else if (diff <= -6)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 21) else if (mylevel <= 21)
{ {
if (diff <= -9) if (diff <= -9)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -7) else if (diff <= -7)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 25) else if (mylevel <= 25)
{ {
if (diff <= -10) if (diff <= -10)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -8) else if (diff <= -8)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 29) else if (mylevel <= 29)
{ {
if (diff <= -11) if (diff <= -11)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -9) else if (diff <= -9)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 31) else if (mylevel <= 31)
{ {
if (diff <= -12) if (diff <= -12)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -9) else if (diff <= -9)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 33) else if (mylevel <= 33)
{ {
if (diff <= -13) if (diff <= -13)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -10) else if (diff <= -10)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 37) else if (mylevel <= 37)
{ {
if (diff <= -14) if (diff <= -14)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -11) else if (diff <= -11)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 41) else if (mylevel <= 41)
{ {
if (diff <= -16) if (diff <= -16)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -12) else if (diff <= -12)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 45) else if (mylevel <= 45)
{ {
if (diff <= -17) if (diff <= -17)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -13) else if (diff <= -13)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 49) else if (mylevel <= 49)
{ {
if (diff <= -18) if (diff <= -18)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -14) else if (diff <= -14)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 53) else if (mylevel <= 53)
{ {
if (diff <= -19) if (diff <= -19)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -15) else if (diff <= -15)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else if (mylevel <= 55) else if (mylevel <= 55)
{ {
if (diff <= -20) if (diff <= -20)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -15) else if (diff <= -15)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else else
{ {
if (diff <= -21) if (diff <= -21)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else if (diff <= -16) else if (diff <= -16)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
} }
else else
@ -2352,42 +2352,42 @@ uint32 Mob::GetLevelCon(uint8 mylevel, uint8 iOtherLevel) {
uint32 conGreenLvl = mylevel - (int32)((mylevel + 7) / 4); uint32 conGreenLvl = mylevel - (int32)((mylevel + 7) / 4);
if (diff == 0) if (diff == 0)
return CON_WHITE; return ConsiderColor::White;
else if (diff >= 1 && diff <= 3) else if (diff >= 1 && diff <= 3)
return CON_YELLOW; return ConsiderColor::Yellow;
else if (diff >= 4) else if (diff >= 4)
return CON_RED; return ConsiderColor::Red;
if (mylevel <= 15) if (mylevel <= 15)
{ {
if (diff <= -6) if (diff <= -6)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else else
if (mylevel <= 20) if (mylevel <= 20)
{ {
if (iOtherLevel <= conGrayLvl) if (iOtherLevel <= conGrayLvl)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else else
if (iOtherLevel <= conGreenLvl) if (iOtherLevel <= conGreenLvl)
conlevel = CON_GREEN; conlevel = ConsiderColor::Green;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
else else
{ {
if (iOtherLevel <= conGrayLvl) if (iOtherLevel <= conGrayLvl)
conlevel = CON_GRAY; conlevel = ConsiderColor::Gray;
else else
if (iOtherLevel <= conGreenLvl) if (iOtherLevel <= conGreenLvl)
conlevel = CON_GREEN; conlevel = ConsiderColor::Green;
else else
if (diff <= -6) if (diff <= -6)
conlevel = CON_LIGHTBLUE; conlevel = ConsiderColor::LightBlue;
else else
conlevel = CON_BLUE; conlevel = ConsiderColor::DarkBlue;
} }
} }
return conlevel; return conlevel;

View File

@ -3403,7 +3403,7 @@ void NPC::AIYellForHelp(Mob *sender, Mob *attacker)
* if they are in range, make sure we are not green... * if they are in range, make sure we are not green...
* then jump in if they are our friend * then jump in if they are our friend
*/ */
if (mob->GetLevel() >= 50 || mob->AlwaysAggro() || attacker->GetLevelCon(mob->GetLevel()) != CON_GRAY) { if (mob->GetLevel() >= 50 || mob->AlwaysAggro() || attacker->GetLevelCon(mob->GetLevel()) != ConsiderColor::Gray) {
if (mob->GetPrimaryFaction() == sender->CastToNPC()->GetPrimaryFaction()) { if (mob->GetPrimaryFaction() == sender->CastToNPC()->GetPrimaryFaction()) {
const auto f = zone->GetNPCFaction(mob->CastToNPC()->GetNPCFactionID()); const auto f = zone->GetNPCFaction(mob->CastToNPC()->GetNPCFactionID());
if (f) { if (f) {

View File

@ -3468,6 +3468,16 @@ bool Perl_Mob_IsWisdomCasterClass(Mob* self)
return self->IsWisdomCasterClass(); return self->IsWisdomCasterClass();
} }
std::string Perl_Mob_GetConsiderColor(Mob* self, Mob* other)
{
return EQ::constants::GetConsiderColorName(self->GetLevelCon(other->GetLevel()));
}
std::string Perl_Mob_GetConsiderColor(Mob* self, uint8 other_level)
{
return EQ::constants::GetConsiderColorName(self->GetLevelCon(other_level));
}
void perl_register_mob() void perl_register_mob()
{ {
perl::interpreter perl(PERL_GET_THX); perl::interpreter perl(PERL_GET_THX);
@ -3670,6 +3680,8 @@ void perl_register_mob()
package.add("GetCloseMobList", (perl::array(*)(Mob*))&Perl_Mob_GetCloseMobList); package.add("GetCloseMobList", (perl::array(*)(Mob*))&Perl_Mob_GetCloseMobList);
package.add("GetCloseMobList", (perl::array(*)(Mob*, float))&Perl_Mob_GetCloseMobList); package.add("GetCloseMobList", (perl::array(*)(Mob*, float))&Perl_Mob_GetCloseMobList);
package.add("GetCloseMobList", (perl::array(*)(Mob*, float, bool))&Perl_Mob_GetCloseMobList); package.add("GetCloseMobList", (perl::array(*)(Mob*, float, bool))&Perl_Mob_GetCloseMobList);
package.add("GetConsiderColor", (std::string(*)(Mob*, Mob*))&Perl_Mob_GetConsiderColor);
package.add("GetConsiderColor", (std::string(*)(Mob*, uint8))&Perl_Mob_GetConsiderColor);
package.add("GetCorruption", &Perl_Mob_GetCorruption); package.add("GetCorruption", &Perl_Mob_GetCorruption);
package.add("GetDefaultRaceSize", (float(*)(Mob*))&Perl_Mob_GetDefaultRaceSize); package.add("GetDefaultRaceSize", (float(*)(Mob*))&Perl_Mob_GetDefaultRaceSize);
package.add("GetDefaultRaceSize", (float(*)(Mob*, int))&Perl_Mob_GetDefaultRaceSize); package.add("GetDefaultRaceSize", (float(*)(Mob*, int))&Perl_Mob_GetDefaultRaceSize);