mirror of
https://github.com/EQEmu/Server.git
synced 2026-06-10 02:31:03 +00:00
More scanning work to unify data structures
This commit is contained in:
+20
-6
@@ -62,7 +62,8 @@ extern char errorname[32];
|
||||
|
||||
Entity::Entity()
|
||||
{
|
||||
id = 0;
|
||||
id = 0;
|
||||
initial_id = 0;
|
||||
spawn_timestamp = time(nullptr);
|
||||
}
|
||||
|
||||
@@ -2566,11 +2567,22 @@ bool EntityList::RemoveNPC(uint16 delete_id)
|
||||
*/
|
||||
bool EntityList::RemoveMobFromCloseLists(Mob *mob)
|
||||
{
|
||||
LogDebug("Removing mob [{}] from close lists", mob->GetCleanName());
|
||||
LogEntityManagement(
|
||||
"Attempting to remove mob [{}] from close lists entity_id ({})",
|
||||
mob->GetCleanName(),
|
||||
mob->GetInitialId()
|
||||
);
|
||||
|
||||
auto it = mob_list.begin();
|
||||
while (it != mob_list.end()) {
|
||||
it->second->close_mobs.erase(mob);
|
||||
LogEntityManagement(
|
||||
"Removing mob [{}] from [{}] close list entity_id ({})",
|
||||
mob->GetCleanName(),
|
||||
it->second->GetCleanName(),
|
||||
mob->GetInitialId()
|
||||
);
|
||||
|
||||
it->second->close_mobs.erase(mob->GetInitialId());
|
||||
++it;
|
||||
}
|
||||
|
||||
@@ -2581,7 +2593,7 @@ bool EntityList::RemoveMobFromCloseLists(Mob *mob)
|
||||
* @param close_mobs
|
||||
* @param scanning_mob
|
||||
*/
|
||||
void EntityList::ScanCloseMobs(std::unordered_map<Mob *, float> &close_mobs, Mob *scanning_mob)
|
||||
void EntityList::ScanCloseMobs(std::unordered_map<uint16, Mob *> &close_mobs, Mob *scanning_mob)
|
||||
{
|
||||
float scan_range = RuleI(Range, MobCloseScanDistance) * RuleI(Range, MobCloseScanDistance);
|
||||
int list_count = 0;
|
||||
@@ -2590,13 +2602,15 @@ void EntityList::ScanCloseMobs(std::unordered_map<Mob *, float> &close_mobs, Mob
|
||||
|
||||
auto it = mob_list.begin();
|
||||
while (it != mob_list.end()) {
|
||||
Mob *mob = it->second;
|
||||
|
||||
float distance = DistanceSquared(scanning_mob->GetPosition(), it->second->GetPosition());
|
||||
if (distance <= scan_range) {
|
||||
close_mobs.insert(std::pair<Mob *, float>(it->second, distance));
|
||||
close_mobs.insert(std::pair<uint16, Mob *>(mob->GetID(), mob));
|
||||
list_count++;
|
||||
}
|
||||
else if (it->second->GetAggroRange() >= scan_range) {
|
||||
close_mobs.insert(std::pair<Mob *, float>(it->second, distance));
|
||||
close_mobs.insert(std::pair<uint16, Mob *>(mob->GetID(), mob));
|
||||
list_count++;
|
||||
}
|
||||
++it;
|
||||
|
||||
Reference in New Issue
Block a user