mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-11 11:48:37 +00:00
[Quest API] Add Mob Hate Methods to Perl/Lua. (#2548)
* [Quest API] Add Mob Hate Methods to Perl/Lua. # Perl - Add `$mob->DamageHateList(damage)` to Perl. - Add `$mob->DamageHateList(damage, distance)` to Perl. - Add `$mob->DamageHateListPercentage(damage)` to Perl. - Add `$mob->DamageHateListPercentage(damage, distance)` to Perl. - Add `$mob->DamageHateListBots(damage)` to Perl. - Add `$mob->DamageHateListBots(damage, distance)` to Perl. - Add `$mob->DamageHateListBotsPercentage(damage)` to Perl. - Add `$mob->DamageHateListBotsPercentage(damage, distance)` to Perl. - Add `$mob->DamageHateListClients(damage)` to Perl. - Add `$mob->DamageHateListClients(damage, distance)` to Perl. - Add `$mob->DamageHateListClientsPercentage(damage)` to Perl. - Add `$mob->DamageHateListClientsPercentage(damage, distance)` to Perl. - Add `$mob->DamageHateListNPCs(damage)` to Perl. - Add `$mob->DamageHateListNPCs(damage, distance)` to Perl. - Add `$mob->DamageHateListNPCsPercentage(damage)` to Perl. - Add `$mob->DamageHateListNPCsPercentage(damage, distance)` to Perl. - Add `$mob->GetHateListBots()` to Perl. - Add `$mob->GetHateListBots(distance)` to Perl. - Add `$mob->GetHateListClients()` to Perl. - Add `$mob->GetHateListClients(distance)` to Perl. - Add `$mob->GetHateListNPCs()` to Perl. - Add `$mob->GetHateListNPCs(distance)` to Perl. # Lua - Add `mob:DamageHateList(damage)` to Lua. - Add `mob:DamageHateList(damage, distance)` to Lua. - Add `mob:DamageHateListPercentage(damage)` to Lua. - Add `mob:DamageHateListPercentage(damage, distance)` to Lua. - Add `mob:DamageHateListBots(damage)` to Lua. - Add `mob:DamageHateListBots(damage, distance)` to Lua. - Add `mob:DamageHateListBotsPercentage(damage)` to Lua. - Add `mob:DamageHateListBotsPercentage(damage, distance)` to Lua. - Add `mob:DamageHateListClients(damage)` to Lua. - Add `mob:DamageHateListClients(damage, distance)` to Lua. - Add `mob:DamageHateListClientsPercentage(damage)` to Lua. - Add `mob:DamageHateListClientsPercentage(damage, distance)` to Lua. - Add `mob:DamageHateListNPCs(damage)` to Lua. - Add `mob:DamageHateListNPCs(damage, distance)` to Lua. - Add `mob:DamageHateListNPCsPercentage(damage)` to Lua. - Add `mob:DamageHateListNPCsPercentage(damage, distance)` to Lua. - Add `mob:GetHateListBots()` to Lua. - Add `mob:GetHateListBots(distance)` to Lua. - Add `mob:GetHateListClients()` to Lua. - Add `mob:GetHateListClients(distance)` to Lua. - Add `mob:GetHateListNPCs()` to Lua. - Add `mob:GetHateListNPCs(distance)` to Lua. # Notes - Offers an extreme amount of short hands when grabbing hate list entities by a specific type or damaging a specific type of entity on an NPC's hatelist. - Should save operators having to use `GetHateList()` then loop it to get the entries they want to do something. * Cleanup.
This commit is contained in:
+47
-13
@@ -850,19 +850,6 @@ void HateList::RemoveStaleEntries(int time_ms, float dist)
|
||||
}
|
||||
}
|
||||
|
||||
std::list<struct_HateList*> HateList::GetHateListByDistance(int distance)
|
||||
{
|
||||
std::list<struct_HateList*> hate_list;
|
||||
int squared_distance = (distance * distance);
|
||||
for (auto hate_iterator : list) {
|
||||
auto hate_entry = hate_iterator->entity_on_hatelist;
|
||||
if (distance == 0 || (distance > 0 && DistanceSquaredNoZ(hate_owner->GetPosition(), hate_entry->GetPosition()) <= squared_distance)) {
|
||||
hate_list.push_back(hate_iterator);
|
||||
}
|
||||
}
|
||||
return hate_list;
|
||||
}
|
||||
|
||||
#ifdef BOTS
|
||||
Bot* HateList::GetRandomBotOnHateList(bool skip_mezzed)
|
||||
{
|
||||
@@ -1011,3 +998,50 @@ NPC* HateList::GetRandomNPCOnHateList(bool skip_mezzed)
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void HateList::DamageHateList(int64 damage, uint32 distance, uint8 filter_type, bool is_percentage)
|
||||
{
|
||||
if (damage <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
const auto& h_list = GetFilteredHateList(distance, filter_type);
|
||||
for (const auto& h : h_list) {
|
||||
auto hate_entry = h->entity_on_hatelist;
|
||||
if (is_percentage) {
|
||||
const auto damage_percentage = EQ::Clamp(damage, static_cast<int64>(1), static_cast<int64>(100));
|
||||
const auto total_damage = hate_entry->GetMaxHP() / damage_percentage * 100;
|
||||
hate_entry->Damage(hate_owner, total_damage, SPELL_UNKNOWN, EQ::skills::SkillEagleStrike);
|
||||
} else {
|
||||
hate_entry->Damage(hate_owner, damage, SPELL_UNKNOWN, EQ::skills::SkillEagleStrike);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::list<struct_HateList*> HateList::GetFilteredHateList(uint32 distance, uint8 filter_type)
|
||||
{
|
||||
std::list<struct_HateList*> filtered_hate_list;
|
||||
const auto squared_distance = (distance * distance);
|
||||
for (auto h : list) {
|
||||
auto hate_entry = h->entity_on_hatelist;
|
||||
if (
|
||||
(
|
||||
!distance ||
|
||||
DistanceSquaredNoZ(
|
||||
hate_owner->GetPosition(),
|
||||
hate_entry->GetPosition()
|
||||
) <= squared_distance
|
||||
) &&
|
||||
(
|
||||
filter_type == HateListFilterTypes::All ||
|
||||
(filter_type == HateListFilterTypes::Bots && hate_entry->IsBot()) ||
|
||||
(filter_type == HateListFilterTypes::Clients && hate_entry->IsClient()) ||
|
||||
(filter_type == HateListFilterTypes::NPCs && hate_entry->IsNPC())
|
||||
)
|
||||
) {
|
||||
filtered_hate_list.push_back(h);
|
||||
}
|
||||
}
|
||||
|
||||
return filtered_hate_list;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user