[Quest API] Add GetClassPlural() and GetRacePlural() to Perl/Lua (#3468)

* [Quest API] Add GetClassPlural() and GetRacePlural() to Perl/Lua

# Perl
- Add `$mob->GetClassPlural()`.
- Add `$mob->GetRacePlural()`.

# Lua
- Add `mob:GetClassPlural()`.
- Add `mob:GetRacePlural()`.

# Notes
- Allows operators to get the plural of a player class or race, example being `Warrior` as `Warriors` or `Dark Elf` as `Dark Elves`.

* Update mob.cpp
This commit is contained in:
Alex King 2023-07-03 01:08:04 -04:00 committed by GitHub
parent 5519c3e781
commit a633784f78
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 111 additions and 83 deletions

View File

@ -6904,87 +6904,6 @@ void Client::SetMaxXTargets(uint8 NewMax)
FastQueuePacket(&outapp);
}
const char* Client::GetRacePlural(Client* client) {
switch (client->CastToMob()->GetRace()) {
case HUMAN:
return "Humans"; break;
case BARBARIAN:
return "Barbarians"; break;
case ERUDITE:
return "Erudites"; break;
case WOOD_ELF:
return "Wood Elves"; break;
case HIGH_ELF:
return "High Elves"; break;
case DARK_ELF:
return "Dark Elves"; break;
case HALF_ELF:
return "Half Elves"; break;
case DWARF:
return "Dwarves"; break;
case TROLL:
return "Trolls"; break;
case OGRE:
return "Ogres"; break;
case HALFLING:
return "Halflings"; break;
case GNOME:
return "Gnomes"; break;
case IKSAR:
return "Iksar"; break;
case VAHSHIR:
return "Vah Shir"; break;
case FROGLOK:
return "Frogloks"; break;
case DRAKKIN:
return "Drakkin"; break;
default:
return "Races"; break;
}
}
const char* Client::GetClassPlural(Client* client) {
switch (client->CastToMob()->GetClass()) {
case WARRIOR:
return "Warriors"; break;
case CLERIC:
return "Clerics"; break;
case PALADIN:
return "Paladins"; break;
case RANGER:
return "Rangers"; break;
case SHADOWKNIGHT:
return "Shadowknights"; break;
case DRUID:
return "Druids"; break;
case MONK:
return "Monks"; break;
case BARD:
return "Bards"; break;
case ROGUE:
return "Rogues"; break;
case SHAMAN:
return "Shamen"; break;
case NECROMANCER:
return "Necromancers"; break;
case WIZARD:
return "Wizards"; break;
case MAGICIAN:
return "Magicians"; break;
case ENCHANTER:
return "Enchanters"; break;
case BEASTLORD:
return "Beastlords"; break;
case BERSERKER:
return "Berserkers"; break;
default:
return "Classes"; break;
}
}
void Client::SendWebLink(const char *website)
{
if (website) {

View File

@ -1559,8 +1559,6 @@ public:
Timer* GetMercTimer() { return &merc_timer; };
Timer* GetPickLockTimer() { return &pick_lock_timer; };
const char* GetRacePlural(Client* client);
const char* GetClassPlural(Client* client);
void SendWebLink(const char* website);
void SendMarqueeMessage(uint32 type, std::string message, uint32 duration = 3000);
void SendMarqueeMessage(uint32 type, uint32 priority, uint32 fade_in, uint32 fade_out, uint32 duration, std::string message);

View File

@ -3115,6 +3115,18 @@ Lua_Mob_List Lua_Mob::GetCloseMobList(float distance, bool ignore_self) {
return ret;
}
std::string Lua_Mob::GetClassPlural()
{
Lua_Safe_Call_String();
return self->GetClassPlural();
}
std::string Lua_Mob::GetRacePlural()
{
Lua_Safe_Call_String();
return self->GetRacePlural();
}
luabind::scope lua_register_mob() {
return luabind::class_<Lua_Mob, Lua_Entity>("Mob")
.def(luabind::constructor<>())
@ -3323,6 +3335,7 @@ luabind::scope lua_register_mob() {
.def("GetCasterLevel", &Lua_Mob::GetCasterLevel)
.def("GetClass", &Lua_Mob::GetClass)
.def("GetClassName", &Lua_Mob::GetClassName)
.def("GetClassPlural", &Lua_Mob::GetClassPlural)
.def("GetCleanName", &Lua_Mob::GetCleanName)
.def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(void))&Lua_Mob::GetCloseMobList)
.def("GetCloseMobList", (Lua_Mob_List(Lua_Mob::*)(float))&Lua_Mob::GetCloseMobList)
@ -3426,6 +3439,7 @@ luabind::scope lua_register_mob() {
.def("GetPhR", &Lua_Mob::GetPhR)
.def("GetRace", &Lua_Mob::GetRace)
.def("GetRaceName", &Lua_Mob::GetRaceName)
.def("GetRacePlural", &Lua_Mob::GetRacePlural)
.def("GetRemainingTimeMS", &Lua_Mob::GetRemainingTimeMS)
.def("GetResist", (int(Lua_Mob::*)(int))&Lua_Mob::GetResist)
.def("GetReverseFactionCon", (int(Lua_Mob::*)(Lua_Mob))&Lua_Mob::GetReverseFactionCon)

View File

@ -554,6 +554,8 @@ public:
Lua_Mob_List GetCloseMobList();
Lua_Mob_List GetCloseMobList(float distance);
Lua_Mob_List GetCloseMobList(float distance, bool ignore_self);
std::string GetClassPlural();
std::string GetRacePlural();
};
#endif

View File

@ -8262,3 +8262,83 @@ int Mob::DispatchZoneControllerEvent(
return ret;
}
std::string Mob::GetRacePlural()
{
switch (GetBaseRace()) {
case RACE_HUMAN_1:
return "Humans";
case RACE_BARBARIAN_2:
return "Barbarians";
case RACE_ERUDITE_3:
return "Erudites";
case RACE_WOOD_ELF_4:
return "Wood Elves";
case RACE_HIGH_ELF_5:
return "High Elves";
case RACE_DARK_ELF_6:
return "Dark Elves";
case RACE_HALF_ELF_7:
return "Half Elves";
case RACE_DWARF_8:
return "Dwarves";
case RACE_TROLL_9:
return "Trolls";
case RACE_OGRE_10:
return "Ogres";
case RACE_HALFLING_11:
return "Halflings";
case RACE_GNOME_12:
return "Gnomes";
case RACE_IKSAR_128:
return "Iksar";
case RACE_VAH_SHIR_130:
return "Vah Shir";
case RACE_FROGLOK_330:
return "Frogloks";
case RACE_DRAKKIN_522:
return "Drakkin";
default:
return "Races";
}
}
std::string Mob::GetClassPlural()
{
switch (GetClass()) {
case WARRIOR:
return "Warriors";
case CLERIC:
return "Clerics";
case PALADIN:
return "Paladins";
case RANGER:
return "Rangers";
case SHADOWKNIGHT:
return "Shadowknights";
case DRUID:
return "Druids";
case MONK:
return "Monks";
case BARD:
return "Bards";
case ROGUE:
return "Rogues";
case SHAMAN:
return "Shamans";
case NECROMANCER:
return "Necromancers";
case WIZARD:
return "Wizards";
case MAGICIAN:
return "Magicians";
case ENCHANTER:
return "Enchanters";
case BEASTLORD:
return "Beastlords";
case BERSERKER:
return "Berserkers";
default:
return "Classes";
}
}

View File

@ -1331,6 +1331,9 @@ public:
bool HasSpellEffect(int effect_id);
std::string GetRacePlural();
std::string GetClassPlural();
//Command #Tune functions
void TuneGetStats(Mob* defender, Mob *attacker);
void TuneGetACByPctMitigation(Mob* defender, Mob *attacker, float pct_mitigation, int interval = 10, int max_loop = 1000, int atk_override = 0, int Msg = 0);

View File

@ -3078,6 +3078,16 @@ StatBonuses* Perl_Mob_GetSpellBonuses(Mob* self)
return self->GetSpellBonusesPtr();
}
std::string Perl_Mob_GetClassPlural(Mob* self)
{
return self->GetClassPlural();
}
std::string Perl_Mob_GetRacePlural(Mob* self)
{
return self->GetRacePlural();
}
void perl_register_mob()
{
perl::interpreter perl(PERL_GET_THX);
@ -3268,6 +3278,7 @@ void perl_register_mob()
package.add("GetCasterLevel", &Perl_Mob_GetCasterLevel);
package.add("GetClass", &Perl_Mob_GetClass);
package.add("GetClassLevelFactor", &Perl_Mob_GetClassLevelFactor);
package.add("GetClassPlural", &Perl_Mob_GetClassPlural);
package.add("GetClassName", &Perl_Mob_GetClassName);
package.add("GetCleanName", &Perl_Mob_GetCleanName);
package.add("GetCloseMobList", (perl::array(*)(Mob*))&Perl_Mob_GetCloseMobList);
@ -3375,6 +3386,7 @@ void perl_register_mob()
package.add("GetPhR", &Perl_Mob_GetPhR);
package.add("GetRace", &Perl_Mob_GetRace);
package.add("GetRaceName", &Perl_Mob_GetRaceName);
package.add("GetRacePlural", &Perl_Mob_GetRacePlural);
package.add("GetRemainingTimeMS", &Perl_Mob_GetRemainingTimeMS);
package.add("GetResist", &Perl_Mob_GetResist);
package.add("GetReverseFactionCon", &Perl_Mob_GetReverseFactionCon);