[Quest API] Add Instance Methods to Perl/Lua. (#2573)

* [Quest API] Add Instance Methods to Perl/Lua.

# Perl
- Add `quest::GetInstanceIDs(zone_name)`.
- Add `quest::GetInstanceIDsByCharID(zone_name, character_id)`.
- Add `quest::GetInstanceVersionByID(instance_id)`.
- Add `quest::GetInstanceZoneIDByID(instance_id)`.

# Lua
- Add `eq.get_instance_ids(zone_name)`.
- Add `eq.get_instance_ids_by_char_id(zone_name, character_id)`.
- Add `eq.get_instance_version_by_id(instance_id)`.
- Add `eq.get_instance_zone_id_by_id(instance_id)`.

# Notes
- The instance IDs methods return arrays of IDs for looping so you can check on mass the instances a player has for a zone.
- Keeps operators from having to guess which possible versions of a zone a player has an instance for or loop through them all to find out.
- Cleanup `common/database_instances.cpp` to mostly use repositories where possible.

* Update database.h

* Update character_corpses_repository.h
This commit is contained in:
Alex King
2022-11-26 10:43:29 -05:00
committed by GitHub
parent 1d1ffc66fe
commit b91d879662
10 changed files with 382 additions and 328 deletions
+18 -4
View File
@@ -3030,6 +3030,20 @@ uint16 QuestManager::GetInstanceID(const char *zone, int16 version)
return 0;
}
std::vector<uint16> QuestManager::GetInstanceIDs(std::string zone_name, uint32 character_id)
{
if (!character_id) {
QuestManagerCurrentQuestVars();
if (initiator) {
return database.GetInstanceIDs(ZoneID(zone_name), initiator->CharacterID());
}
return { };
}
return database.GetInstanceIDs(ZoneID(zone_name), character_id);
}
uint16 QuestManager::GetInstanceIDByCharID(const char *zone, int16 version, uint32 char_id) {
return database.GetInstanceID(ZoneID(zone), char_id, version);
}
@@ -3092,7 +3106,7 @@ void QuestManager::RemoveFromInstanceByCharID(uint16 instance_id, uint32 char_id
}
bool QuestManager::CheckInstanceByCharID(uint16 instance_id, uint32 char_id) {
return database.CharacterInInstanceGroup(instance_id, char_id);
return database.CheckInstanceByCharID(instance_id, char_id);
}
void QuestManager::RemoveAllFromInstance(uint16 instance_id)
@@ -3100,14 +3114,14 @@ void QuestManager::RemoveAllFromInstance(uint16 instance_id)
QuestManagerCurrentQuestVars();
if (initiator)
{
std::list<uint32> charid_list;
std::list<uint32> character_ids;
if (database.RemoveClientsFromInstance(instance_id))
initiator->Message(Chat::Say, "Removed all players from instance.");
else
{
database.GetCharactersInInstance(instance_id, charid_list);
initiator->Message(Chat::Say, "Failed to remove %i player(s) from instance.", charid_list.size()); // once the expedition system is in, this message it not relevant
database.GetCharactersInInstance(instance_id, character_ids);
initiator->Message(Chat::Say, "Failed to remove %i player(s) from instance.", character_ids.size()); // once the expedition system is in, this message it not relevant
}
}
}