mirror of
https://github.com/EQEmu/Server.git
synced 2026-09-03 09:26:36 +00:00
[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:
+53
-15
@@ -1464,23 +1464,57 @@ int Perl__GetInstanceID(const char* zone_name, uint16 version)
|
||||
return quest_manager.GetInstanceID(zone_name, version);
|
||||
}
|
||||
|
||||
int Perl__GetInstanceIDByCharID(const char* zone_name, int16 version, uint32 char_id)
|
||||
uint8 Perl__GetInstanceVersionByID(uint16 instance_id)
|
||||
{
|
||||
return quest_manager.GetInstanceIDByCharID(zone_name, version, char_id);
|
||||
return database.GetInstanceVersion(instance_id);
|
||||
}
|
||||
|
||||
uint32 Perl__GetInstanceZoneIDByID(uint16 instance_id)
|
||||
{
|
||||
return database.GetInstanceZoneID(instance_id);
|
||||
}
|
||||
|
||||
perl::array Perl__GetInstanceIDs(std::string zone_name)
|
||||
{
|
||||
perl::array result;
|
||||
|
||||
const auto instance_ids = quest_manager.GetInstanceIDs(zone_name);
|
||||
for (int i = 0; i < instance_ids.size(); i++) {
|
||||
result.push_back(instance_ids[i]);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
int Perl__GetInstanceIDByCharID(const char* zone_name, int16 version, uint32 character_id)
|
||||
{
|
||||
return quest_manager.GetInstanceIDByCharID(zone_name, version, character_id);
|
||||
}
|
||||
|
||||
perl::array Perl__GetInstanceIDsByCharID(std::string zone_name, uint32 character_id)
|
||||
{
|
||||
perl::array result;
|
||||
|
||||
const auto instance_ids = quest_manager.GetInstanceIDs(zone_name, character_id);
|
||||
for (int i = 0; i < instance_ids.size(); i++) {
|
||||
result.push_back(instance_ids[i]);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string Perl__GetCharactersInInstance(uint16 instance_id)
|
||||
{
|
||||
std::list<uint32> char_id_list;
|
||||
std::list<uint32> character_ids;
|
||||
std::string char_id_string = "No players in that instance.";
|
||||
|
||||
database.GetCharactersInInstance(instance_id, char_id_list);
|
||||
database.GetCharactersInInstance(instance_id, character_ids);
|
||||
|
||||
if (char_id_list.size() > 0)
|
||||
if (character_ids.size() > 0)
|
||||
{
|
||||
char_id_string = fmt::format("{} player(s) in instance: ", char_id_list.size());
|
||||
auto iter = char_id_list.begin();
|
||||
while (iter != char_id_list.end()) {
|
||||
char_id_string = fmt::format("{} player(s) in instance: ", character_ids.size());
|
||||
auto iter = character_ids.begin();
|
||||
while (iter != character_ids.end()) {
|
||||
char char_name[64];
|
||||
database.GetCharName(*iter, char_name);
|
||||
char_id_string += char_name;
|
||||
@@ -1488,7 +1522,7 @@ std::string Perl__GetCharactersInInstance(uint16 instance_id)
|
||||
char_id_string += itoa(*iter);
|
||||
char_id_string += ")";
|
||||
++iter;
|
||||
if (iter != char_id_list.end())
|
||||
if (iter != character_ids.end())
|
||||
char_id_string += ", ";
|
||||
}
|
||||
}
|
||||
@@ -1501,9 +1535,9 @@ void Perl__AssignToInstance(uint16 instance_id)
|
||||
quest_manager.AssignToInstance(instance_id);
|
||||
}
|
||||
|
||||
void Perl__AssignToInstanceByCharID(uint16 instance_id, uint32 char_id)
|
||||
void Perl__AssignToInstanceByCharID(uint16 instance_id, uint32 character_id)
|
||||
{
|
||||
quest_manager.AssignToInstanceByCharID(instance_id, char_id);
|
||||
quest_manager.AssignToInstanceByCharID(instance_id, character_id);
|
||||
}
|
||||
|
||||
void Perl__AssignGroupToInstance(uint16 instance_id)
|
||||
@@ -1521,14 +1555,14 @@ void Perl__RemoveFromInstance(uint16 instance_id)
|
||||
quest_manager.RemoveFromInstance(instance_id);
|
||||
}
|
||||
|
||||
void Perl__RemoveFromInstanceByCharID(uint16 instance_id, uint32 char_id)
|
||||
void Perl__RemoveFromInstanceByCharID(uint16 instance_id, uint32 character_id)
|
||||
{
|
||||
quest_manager.RemoveFromInstanceByCharID(instance_id, char_id);
|
||||
quest_manager.RemoveFromInstanceByCharID(instance_id, character_id);
|
||||
}
|
||||
|
||||
bool Perl__CheckInstanceByCharID(uint16 instance_id, uint32 char_id)
|
||||
bool Perl__CheckInstanceByCharID(uint16 instance_id, uint32 character_id)
|
||||
{
|
||||
return quest_manager.CheckInstanceByCharID(instance_id, char_id);
|
||||
return quest_manager.CheckInstanceByCharID(instance_id, character_id);
|
||||
}
|
||||
|
||||
void Perl__RemoveAllFromInstance(uint16 instance_id)
|
||||
@@ -3913,6 +3947,10 @@ void perl_register_quest()
|
||||
package.add("GetCharactersInInstance", &Perl__GetCharactersInInstance);
|
||||
package.add("GetInstanceID", &Perl__GetInstanceID);
|
||||
package.add("GetInstanceIDByCharID", &Perl__GetInstanceIDByCharID);
|
||||
package.add("GetInstanceIDs", &Perl__GetInstanceIDs);
|
||||
package.add("GetInstanceIDsByCharID", &Perl__GetInstanceIDsByCharID);
|
||||
package.add("GetInstanceVersionByID", &Perl__GetInstanceVersionByID);
|
||||
package.add("GetInstanceZoneIDByID", &Perl__GetInstanceZoneIDByID);
|
||||
package.add("GetSpellResistType", &Perl__GetSpellResistType);
|
||||
package.add("GetSpellTargetType", &Perl__GetSpellTargetType);
|
||||
package.add("GetTimeSeconds", &Perl__GetTimeSeconds);
|
||||
|
||||
@@ -97,9 +97,9 @@ void command_instance(Client *c, const Seperator *sep)
|
||||
return;
|
||||
}
|
||||
|
||||
uint32 zone_id = database.ZoneIDFromInstanceID(instance_id);
|
||||
uint32 version = database.VersionFromInstanceID(instance_id);
|
||||
uint32 current_id = database.GetInstanceID(zone_id, character_id, version);
|
||||
auto zone_id = database.GetInstanceZoneID(instance_id);
|
||||
auto version = database.GetInstanceVersion(instance_id);
|
||||
auto current_id = database.GetInstanceID(zone_id, character_id, version);
|
||||
if (!current_id) {
|
||||
c->Message(
|
||||
Chat::White,
|
||||
|
||||
@@ -25,7 +25,7 @@ void command_zone_instance(Client *c, const Seperator *sep)
|
||||
return;
|
||||
}
|
||||
|
||||
auto zone_id = database.ZoneIDFromInstanceID(instance_id);
|
||||
auto zone_id = database.GetInstanceZoneID(instance_id);
|
||||
if (!zone_id) {
|
||||
c->Message(
|
||||
Chat::White,
|
||||
@@ -36,11 +36,11 @@ void command_zone_instance(Client *c, const Seperator *sep)
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!database.CharacterInInstanceGroup(instance_id, c->CharacterID())) {
|
||||
|
||||
if (!database.CheckInstanceByCharID(instance_id, c->CharacterID())) {
|
||||
database.AddClientToInstance(instance_id, c->CharacterID());
|
||||
}
|
||||
|
||||
|
||||
if (!database.VerifyInstanceAlive(instance_id, c->CharacterID())) {
|
||||
c->Message(
|
||||
Chat::White,
|
||||
|
||||
+46
-12
@@ -1002,16 +1002,46 @@ int lua_get_instance_id(const char *zone, uint32 version) {
|
||||
return quest_manager.GetInstanceID(zone, version);
|
||||
}
|
||||
|
||||
int lua_get_instance_id_by_char_id(const char *zone, uint32 version, uint32 char_id) {
|
||||
return quest_manager.GetInstanceIDByCharID(zone, version, char_id);
|
||||
uint8 lua_get_instance_version_by_id(uint16 instance_id) {
|
||||
return database.GetInstanceVersion(instance_id);
|
||||
}
|
||||
|
||||
uint32 lua_get_instance_zone_id_by_id(uint16 instance_id) {
|
||||
return database.GetInstanceZoneID(instance_id);
|
||||
}
|
||||
|
||||
luabind::adl::object lua_get_instance_ids(lua_State* L, std::string zone_name) {
|
||||
luabind::adl::object ret = luabind::newtable(L);
|
||||
|
||||
auto instance_ids = quest_manager.GetInstanceIDs(zone_name);
|
||||
for (int i = 0; i < instance_ids.size(); i++) {
|
||||
ret[i] = instance_ids[i];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
luabind::adl::object lua_get_instance_ids_by_char_id(lua_State* L, std::string zone_name, uint32 character_id) {
|
||||
luabind::adl::object ret = luabind::newtable(L);
|
||||
|
||||
auto instance_ids = quest_manager.GetInstanceIDs(zone_name, character_id);
|
||||
for (int i = 0; i < instance_ids.size(); i++) {
|
||||
ret[i] = instance_ids[i];
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int lua_get_instance_id_by_char_id(const char *zone, uint32 version, uint32 character_id) {
|
||||
return quest_manager.GetInstanceIDByCharID(zone, version, character_id);
|
||||
}
|
||||
|
||||
void lua_assign_to_instance(uint32 instance_id) {
|
||||
quest_manager.AssignToInstance(instance_id);
|
||||
}
|
||||
|
||||
void lua_assign_to_instance_by_char_id(uint32 instance_id, uint32 char_id) {
|
||||
quest_manager.AssignToInstanceByCharID(instance_id, char_id);
|
||||
void lua_assign_to_instance_by_char_id(uint32 instance_id, uint32 character_id) {
|
||||
quest_manager.AssignToInstanceByCharID(instance_id, character_id);
|
||||
}
|
||||
|
||||
void lua_assign_group_to_instance(uint32 instance_id) {
|
||||
@@ -1026,12 +1056,12 @@ void lua_remove_from_instance(uint32 instance_id) {
|
||||
quest_manager.RemoveFromInstance(instance_id);
|
||||
}
|
||||
|
||||
void lua_remove_from_instance_by_char_id(uint32 instance_id, uint32 char_id) {
|
||||
quest_manager.RemoveFromInstanceByCharID(instance_id, char_id);
|
||||
void lua_remove_from_instance_by_char_id(uint32 instance_id, uint32 character_id) {
|
||||
quest_manager.RemoveFromInstanceByCharID(instance_id, character_id);
|
||||
}
|
||||
|
||||
bool lua_check_instance_by_char_id(uint32 instance_id, uint32 char_id) {
|
||||
return quest_manager.CheckInstanceByCharID(instance_id, char_id);
|
||||
bool lua_check_instance_by_char_id(uint32 instance_id, uint32 character_id) {
|
||||
return quest_manager.CheckInstanceByCharID(instance_id, character_id);
|
||||
}
|
||||
|
||||
void lua_remove_all_from_instance(uint32 instance_id) {
|
||||
@@ -1215,11 +1245,11 @@ int lua_get_zone_instance_version() {
|
||||
luabind::adl::object lua_get_characters_in_instance(lua_State *L, uint16 instance_id) {
|
||||
luabind::adl::object ret = luabind::newtable(L);
|
||||
|
||||
std::list<uint32> charid_list;
|
||||
std::list<uint32> character_ids;
|
||||
uint16 i = 1;
|
||||
database.GetCharactersInInstance(instance_id,charid_list);
|
||||
auto iter = charid_list.begin();
|
||||
while(iter != charid_list.end()) {
|
||||
database.GetCharactersInInstance(instance_id, character_ids);
|
||||
auto iter = character_ids.begin();
|
||||
while(iter != character_ids.end()) {
|
||||
ret[i] = *iter;
|
||||
++i;
|
||||
++iter;
|
||||
@@ -3957,8 +3987,12 @@ luabind::scope lua_register_general() {
|
||||
luabind::def("update_instance_timer", &lua_update_instance_timer),
|
||||
luabind::def("get_instance_id", &lua_get_instance_id),
|
||||
luabind::def("get_instance_id_by_char_id", &lua_get_instance_id_by_char_id),
|
||||
luabind::def("get_instance_ids", &lua_get_instance_ids),
|
||||
luabind::def("get_instance_ids_by_char_id", &lua_get_instance_id_by_char_id),
|
||||
luabind::def("get_instance_timer", &lua_get_instance_timer),
|
||||
luabind::def("get_instance_timer_by_id", &lua_get_instance_timer_by_id),
|
||||
luabind::def("get_instance_version_by_id", &lua_get_instance_version_by_id),
|
||||
luabind::def("get_instance_zone_id_by_id", &lua_get_instance_zone_id_by_id),
|
||||
luabind::def("get_characters_in_instance", &lua_get_characters_in_instance),
|
||||
luabind::def("assign_to_instance", &lua_assign_to_instance),
|
||||
luabind::def("assign_to_instance_by_char_id", &lua_assign_to_instance_by_char_id),
|
||||
|
||||
+18
-4
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -266,6 +266,7 @@ public:
|
||||
uint32 GetInstanceTimerByID(uint16 instance_id = 0);
|
||||
void DestroyInstance(uint16 instance_id);
|
||||
uint16 GetInstanceID(const char *zone, int16 version);
|
||||
std::vector<uint16> GetInstanceIDs(std::string zone_name, uint32 character_id = 0);
|
||||
uint16 GetInstanceIDByCharID(const char *zone, int16 version, uint32 char_id);
|
||||
void AssignToInstance(uint16 instance_id);
|
||||
void AssignToInstanceByCharID(uint16 instance_id, uint32 char_id);
|
||||
|
||||
+2
-2
@@ -545,11 +545,11 @@ void Client::MoveZoneRaid(const char *zone_short_name, const glm::vec4 &location
|
||||
}
|
||||
|
||||
void Client::MoveZoneInstance(uint16 instance_id, const glm::vec4 &location) {
|
||||
if (!database.CharacterInInstanceGroup(instance_id, CharacterID())) {
|
||||
if (!database.CheckInstanceByCharID(instance_id, CharacterID())) {
|
||||
database.AddClientToInstance(instance_id, CharacterID());
|
||||
}
|
||||
|
||||
ProcessMovePC(database.ZoneIDFromInstanceID(instance_id), instance_id, location.x, location.y, location.z, location.w, 3, ZoneToSafeCoords);
|
||||
ProcessMovePC(database.GetInstanceZoneID(instance_id), instance_id, location.x, location.y, location.z, location.w, 3, ZoneToSafeCoords);
|
||||
}
|
||||
|
||||
void Client::MoveZoneInstanceGroup(uint16 instance_id, const glm::vec4 &location) {
|
||||
|
||||
Reference in New Issue
Block a user