[Quest API] Add CopyHateList() to Perl/Lua. (#2623)

* [Quest API] Add CopyHateList() to Perl/Lua.

# Perl
- Add `$mob->CopyHateList(to_mob)`.

# Lua
- Add `mob:CopyHateList(to_mob)`.

# Notes
- Allows operators to easily copy and entire hatelist from one mob to another.

* Update mob.cpp
This commit is contained in:
Alex King 2022-12-06 08:38:51 -05:00 committed by GitHub
parent 3774dc50d9
commit 91ea6462f2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 27 additions and 0 deletions

View File

@ -2747,6 +2747,11 @@ void Lua_Mob::SendPayload(int payload_id, std::string payload_value) {
}
}
void Lua_Mob::CopyHateList(Lua_Mob to) {
Lua_Safe_Call_Void();
self->CopyHateList(to);
}
#ifdef BOTS
void Lua_Mob::DamageAreaBots(int64 damage) {
Lua_Safe_Call_Void();
@ -2898,6 +2903,7 @@ luabind::scope lua_register_mob() {
.def("CloneAppearance", (void(Lua_Mob::*)(Lua_Mob))&Lua_Mob::CloneAppearance)
.def("CloneAppearance", (void(Lua_Mob::*)(Lua_Mob,bool))&Lua_Mob::CloneAppearance)
.def("CombatRange", (bool(Lua_Mob::*)(Lua_Mob))&Lua_Mob::CombatRange)
.def("CopyHateList", (void(Lua_Mob::*)(Lua_Mob))&Lua_Mob::CopyHateList)
.def("Damage", (void(Lua_Mob::*)(Lua_Mob,int64,int,int))&Lua_Mob::Damage)
.def("Damage", (void(Lua_Mob::*)(Lua_Mob,int64,int,int,bool))&Lua_Mob::Damage)
.def("Damage", (void(Lua_Mob::*)(Lua_Mob,int64,int,int,bool,int))&Lua_Mob::Damage)

View File

@ -519,6 +519,7 @@ public:
void DamageHateListNPCs(int64 damage, uint32 distance);
void DamageHateListNPCsPercentage(int64 damage);
void DamageHateListNPCsPercentage(int64 damage, uint32 distance);
void CopyHateList(Lua_Mob to);
};
#endif

View File

@ -7051,3 +7051,15 @@ void Mob::CloneAppearance(Mob* other, bool clone_name)
TempName(other->GetCleanName());
}
}
void Mob::CopyHateList(Mob* to) {
if (hate_list.IsHateListEmpty() || !to || to->IsClient()) {
return;
}
for (const auto& h : hate_list.GetHateList()) {
if (h->entity_on_hatelist) {
to->AddToHateList(h->entity_on_hatelist, h->stored_hate_amount, h->hatelist_damage);
}
}
}

View File

@ -654,6 +654,8 @@ public:
inline const bool AlwaysAggro() const { return always_aggro; }
inline int32 GetHeroicStrikethrough() const { return heroic_strikethrough; }
void CopyHateList(Mob* to);
//Group
virtual bool HasRaid() = 0;
virtual bool HasGroup() = 0;

View File

@ -2678,6 +2678,11 @@ void Perl_Mob_SetEntityVariable(Mob* self, std::string variable_name, std::strin
self->SetEntityVariable(variable_name, variable_value);
}
void Perl_Mob_CopyHateList(Mob* self, Mob* to)
{
self->CopyHateList(to);
}
#ifdef BOTS
void Perl_Mob_DamageAreaBots(Mob* self, int64 damage) // @categories Hate and Aggro
{
@ -2827,6 +2832,7 @@ void perl_register_mob()
package.add("CloneAppearance", (void(*)(Mob*, Mob*))&Perl_Mob_CloneAppearance);
package.add("CloneAppearance", (void(*)(Mob*, Mob*, bool))&Perl_Mob_CloneAppearance);
package.add("CombatRange", &Perl_Mob_CombatRange);
package.add("CopyHateList", &Perl_Mob_CopyHateList);
package.add("Damage", (void(*)(Mob*, Mob*, int64, uint16_t, int))&Perl_Mob_Damage);
package.add("Damage", (void(*)(Mob*, Mob*, int64, uint16_t, int, bool))&Perl_Mob_Damage);
package.add("Damage", (void(*)(Mob*, Mob*, int64, uint16_t, int, bool, int8_t))&Perl_Mob_Damage);